]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Merge with mapping-branch.
authorRalf Hartmann <Ralf.Hartmann@dlr.de>
Tue, 6 Mar 2001 10:32:37 +0000 (10:32 +0000)
committerRalf Hartmann <Ralf.Hartmann@dlr.de>
Tue, 6 Mar 2001 10:32:37 +0000 (10:32 +0000)
git-svn-id: https://svn.dealii.org/trunk@4116 0785d39b-7218-0410-832d-ea1e28bc413d

46 files changed:
deal.II/deal.II/include/fe/continuous.h [deleted file]
deal.II/deal.II/include/fe/fe.h
deal.II/deal.II/include/fe/fe_base.h
deal.II/deal.II/include/fe/fe_dgq.h
deal.II/deal.II/include/fe/fe_lib.criss_cross.h [deleted file]
deal.II/deal.II/include/fe/fe_lib.dg.h
deal.II/deal.II/include/fe/fe_lib.dgp.h [deleted file]
deal.II/deal.II/include/fe/fe_lib.lagrange.h
deal.II/deal.II/include/fe/fe_q.h
deal.II/deal.II/include/fe/fe_system.h
deal.II/deal.II/include/fe/fe_update_flags.h
deal.II/deal.II/include/fe/fe_values.h
deal.II/deal.II/include/fe/mapping.h
deal.II/deal.II/include/fe/mapping_cartesian.h
deal.II/deal.II/include/fe/mapping_q.h
deal.II/deal.II/include/fe/mapping_q1.h
deal.II/deal.II/include/fe/q1_mapping.h [deleted file]
deal.II/deal.II/source/fe/fe.cc
deal.II/deal.II/source/fe/fe_data.cc
deal.II/deal.II/source/fe/fe_dgq.cc
deal.II/deal.II/source/fe/fe_lib.criss_cross.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.cubic.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.dg.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.dg.constant.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.dgp1.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.dgp2.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.dgp3.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.linear.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.quadratic.cc [deleted file]
deal.II/deal.II/source/fe/fe_lib.quartic.cc [deleted file]
deal.II/deal.II/source/fe/fe_q.cc
deal.II/deal.II/source/fe/fe_system.cc
deal.II/deal.II/source/fe/fe_tools.cc
deal.II/deal.II/source/fe/fe_values.cc
deal.II/deal.II/source/fe/mapping.cc
deal.II/deal.II/source/fe/mapping_cartesian.cc
deal.II/deal.II/source/fe/mapping_q.cc
deal.II/deal.II/source/fe/mapping_q1.cc
deal.II/deal.II/source/fe/mat_dgq.1
deal.II/deal.II/source/fe/mat_dgq.2
deal.II/deal.II/source/fe/mat_dgq.3
deal.II/deal.II/source/fe/mat_q.1
deal.II/deal.II/source/fe/mat_q.2
deal.II/deal.II/source/fe/mat_q.3
deal.II/deal.II/source/fe/q1_mapping.cc [deleted file]
deal.II/deal.II/source/fe/q1_mapping.jacobians.cc [deleted file]

diff --git a/deal.II/deal.II/include/fe/continuous.h b/deal.II/deal.II/include/fe/continuous.h
deleted file mode 100644 (file)
index 5d0c9c0..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-//---------------------------------------------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//---------------------------------------------------------------
-#ifndef __deal2__fe_continuous_h
-#define __deal2__fe_continuous_h
-
-#include <base/polynomial.h>
-
-template <int dim> class TensorProductPolynomials;
-
-/**
- * Tensor product elements based on equitdistant support points.
- */
-template <int dim>
-class FE_Q : public FiniteElement<dim>
-{
-public:
-                                  /**
-                                   * Constructor for tensor product
-                                   * polynomials of degree @p{k}.
-                                   */
-  FE_Q (unsigned int k);
-                                  /**
-                                   * Destructor.
-                                   */
-  ~FE_Q ();
-  
-                                    /**
-                                     * Prepare internal data
-                                     * structures and fill in values
-                                     * independent of the cell.
-                                     */
-    virtual FEValuesBase<dim>::InternalData*
-    get_data (const UpdateFlags,
-             const Quadrature<dim>& quadrature) const ;
-
-                                    /**
-                                     * Prepare internal data
-                                     * structure for transformation
-                                     * of faces and fill in values
-                                     * independent of the cell.
-                                     */
-    virtual FEValuesBase<dim>::InternalData*
-    get_face_data (const UpdateFlags flags,
-                  const Quadrature<dim>& quadrature) const ;
-
-                                    /**
-                                     * Prepare internal data
-                                     * structure for transformation
-                                     * of children of faces and fill
-                                     * in values independent of the
-                                     * cell.
-                                     */
-    virtual FEValuesBase<dim>::InternalData*
-    get_subface_data (const UpdateFlags flags,
-                      const Quadrature<dim>& quadrature) const;
-
-    virtual void
-    fill_fe_values (const Mapping<dim> &mapping,
-                  const DoFHandler<dim>::cell_iterator &cell,
-                   const Quadrature<dim>                &quadrature,
-                   FEValuesBase<dim>::InternalData      &mapping_internal,
-                   FEValuesBase<dim>::InternalData      &fe_internal,
-                   FEValuesData<dim>& data) const;
-    
-    virtual void
-    fill_fe_face_values (const Mapping<dim> &mapping,
-                        const DoFHandler<dim>::cell_iterator &cell,
-                        const unsigned int                    face_no,
-                        const Quadrature<dim>                &quadrature,
-                        FEValuesBase<dim>::InternalData      &mapping_internal,
-                        FEValuesBase<dim>::InternalData      &fe_internal,
-                        FEValuesData<dim>& data) const ;
-    
-    virtual void
-    fill_fe_subface_values (const Mapping<dim> &mapping,
-                  const DoFHandler<dim>::cell_iterator &cell,
-                           const unsigned int                    face_no,
-                           const unsigned int                    sub_no,
-                           const Quadrature<dim>                &quadrature,
-                           FEValuesBase<dim>::InternalData      &mapping_internal,
-                           FEValuesBase<dim>::InternalData      &fe_internal,
-                           FEValuesData<dim>& data) const ;
-
-private:
-                                  /**
-                                   * Map tensor product data to shape
-                                   * function numbering.
-                                   *
-                                   * The node values are ordered such
-                                   * that vertices are first,
-                                   * followed by lines,
-                                   * quadrilaterals and
-                                   * hexahedra. Furthermore, the
-                                   * ordering inside each group may
-                                   * be confused, too. Therefore,
-                                   * this function computes a mapping
-                                   * from lexicographic ordering
-                                   * (x,y,z) to the shape function
-                                   * structure.
-                                   */
-  void build_renumbering (unsigned int degree,
-                         vector<unsigned int>& numbering);
-
-                                  /**
-                                   * Compute flags for initial update only.
-                                   */
-  static UpdateFlags update_once (UpdateFlags flags);
-  
-                                  /**
-                                   * Compute flags for update on each cell.
-                                   */
-  static UpdateFlags update_each (UpdateFlags flags);
-  
-                                  /**
-                                   * Degree of the polynomials.
-                                   */  
-  const unsigned int degree;
-                                  /**
-                                   * Mapping from lexicographic to
-                                   * shape function numbering.
-                                   */
-  vector<unsigned int> renumber;
-                                  /**
-                                   * Fields of cell-independent data.
-                                   */
-  class InternalData : public FEValuesBase<dim>::InternalData
-  {
-  public:
-    vector<double> shape_values;
-    vector<Tensor<1,dim> > shape_grads;
-  };
-  
-                                  /**
-                                   * Vector of one-dimensional
-                                   * polynomials used.
-                                   */
-  vector<LagrangeEquidistant> polynomials;
-
-                                  /**
-                                   * Implementation of the tensor
-                                   * product of polynomials.
-                                   */
-  TensorProductPolynomials<dim>* poly;
-};
-
-
-
-#endif
index db255de91046b17b2f3c81c7071c014ea5f82d0f..cf32082d61f73954296750203b883b5c1c4e7197 100644 (file)
@@ -1,5 +1,10 @@
+
 //----------------------------  fe.h  ---------------------------
+//    $Id$
 //    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 //    to the file deal.II/doc/license.html for the  text  and
 #ifndef __deal2__fe_h
 #define __deal2__fe_h
 
-
-#include <base/exceptions.h>
-#include <base/subscriptor.h>
-#include <base/point.h>
-#include <base/tensor.h>
+#include <fe/fe_base.h>
 #include <dofs/dof_handler.h>
-#include <grid/geometry_info.h>
-#include <lac/full_matrix.h>
-
-
-/**
- * Dimension independent data for finite elements. See the @p{FiniteElementBase}
- * class for more information.
- */
-template<int dim>
-class FiniteElementData
-{
-  public:
-                                    /**
-                                     * Number of degrees of freedom on
-                                     * a vertex.
-                                     */
-    const unsigned int dofs_per_vertex;
-
-                                    /** Number of degrees of freedom
-                                     *  on a line.
-                                     */
-    const unsigned int dofs_per_line;
-
-                                    /** Number of degrees of freedom
-                                     *  on a quadrilateral.
-                                     */
-    const unsigned int dofs_per_quad;
-
-                                    /** Number of degrees of freedom
-                                     *  on a hexahedron.
-                                     */
-    const unsigned int dofs_per_hex;
-
-                                    /**
-                                     * First index of dof on a line.
-                                     */
-    const unsigned int first_line_index;
-    
-                                    /**
-                                     * First index of dof on a quad.
-                                     */
-    const unsigned int first_quad_index;
-    
-                                    /**
-                                     * First index of dof on a hexahedron.
-                                     */
-    const unsigned int first_hex_index;
-    
-                                    /**
-                                     * First index of dof on a line for face data.
-                                     */
-    const unsigned int first_face_line_index;
-    
-                                    /**
-                                     * First index of dof on a quad for face data.
-                                     */
-    const unsigned int first_face_quad_index;
-
-                                    /**
-                                     * Number of degrees of freedom on a
-                                     * face. This information is
-                                     * redundant to some fields in the
-                                     * derived classes but makes
-                                     * writing dimension independant
-                                     * programs easier.
-                                     */
-    const unsigned int dofs_per_face;
-    
-                                    /**
-                                     * Total number of degrees of freedom
-                                     * on a cell. This information is
-                                     * redundant to some fields in the
-                                     * derived classes but makes
-                                     * writing dimension independant
-                                     * programs easier.
-                                     */
-    const unsigned int dofs_per_cell;
-
-                                    /**
-                                     * Number of basis functions used for the
-                                     * transformation from unit cell to real
-                                     * cell. For a linear mapping, this number
-                                     * equals the number of vertices.
-                                     */
-    const unsigned int transform_functions;
-
-
-                                    /**
-                                     * Number of components and dimension of
-                                     * the image space.
-                                     */
-    const unsigned int components;
-
-                                    /**
-                                     * Default constructor. Constructs
-                                     * an element
-                                     * which is not so useful. Checking
-                                     * @p{dofs_per_cell} is therefore a good way to
-                                     * check if something went wrong. 
-                                     */
-    FiniteElementData ();
-
-                                    /**
-                                     * Constructor for a 1-dimensional
-                                     * object.
-                                     */
-    FiniteElementData (const unsigned int dofs_per_vertex,
-                      const unsigned int dofs_per_line,
-                      const unsigned int n_transform_functions,
-                      const unsigned int n_components);
-
-                                    /**
-                                     * Constructor for a 2-dimensional
-                                     * object.
-                                     */
-    FiniteElementData (const unsigned int dofs_per_vertex,
-                      const unsigned int dofs_per_line,
-                      const unsigned int dofs_per_quad,
-                      const unsigned int n_transform_functions,
-                      const unsigned int n_components);
-
-                                    /**
-                                     * Constructor for a 3-dimensional
-                                     * object.
-                                     */
-    FiniteElementData (const unsigned int dofs_per_vertex,
-                      const unsigned int dofs_per_line,
-                      const unsigned int dofs_per_quad,
-                      const unsigned int dofs_per_hex,
-                      const unsigned int n_transform_functions,
-                      const unsigned int n_components);
-
-                                    /**
-                                     * Declare this destructor virtual in
-                                     * order to make the respective destructors
-                                     * in derived classes virtual as well.
-                                     */
-    virtual ~FiniteElementData ();
-
-                                    /**
-                                     * Return the @p{dofs_per_vertex}.
-                                     */
-    unsigned int n_dofs_per_vertex () const;
-
-                                    /**
-                                     * Return the @p{dofs_per_line}.
-                                     */
-    unsigned int n_dofs_per_line () const;
-
-                                    /**
-                                     * Return the @p{dofs_per_quad}.
-                                     */
-    unsigned int n_dofs_per_quad () const;
-
-                                    /**
-                                     * Return the @p{dofs_per_hex}.
-                                     */
-    unsigned int n_dofs_per_hex () const;
-
-                                    /**
-                                     * Return the @p{dofs_per_face}.
-                                     */
-    unsigned int n_dofs_per_face () const;
-
-                                    /**
-                                     * Return the @p{dofs_per_cell}.
-                                     */
-    unsigned int n_dofs_per_cell () const;
-
-                                    /**
-                                     * Return the @p{components}.
-                                     */
-    unsigned int n_components () const;
-
-                                    /**
-                                     * Return the value of @p{transform_functions}.
-                                     */
-    unsigned int n_transform_functions () const;
-
-
-                                    /**
-                                     * Comparison operator. It is not clear to
-                                     * me (WB) why we have to declare and implement
-                                     * this one explicitely.
-                                     */
-    bool operator == (const FiniteElementData<dim> &) const;
-
-                                    /**
-                                     * Exception
-                                     */
-    DeclException2 (ExcDimensionMismatch, int, int,
-                   << "used " << arg1 << "-d constructor for " << arg2 << "-d object");
-};
-
 
+template <int dim> class FEValuesData;
+template <int dim> class FEValues;
+template <int dim> class FEFaceValues;
+template <int dim> class FESubfaceValues;
+template <int dim> class FESystem;
+template <int dim> class MatrixCreator;
 
 
 /**
- * Base class for finite elements in arbitrary dimensions. This class provides
- * several fields which describe a specific finite element and which are filled
- * by derived classes. It more or less only offers the fields and access
- * functions which makes it possible to copy finite elements without knowledge
- * of the actual type (linear, quadratic, etc).
- *
- * The implementation of this base class is split into two parts: those fields
- * which are not common to all dimensions (@p{dofs_per_quad} for example are only
- * useful for @p{dim>=2}) are put into the @p{FiniteElementData<dim>} class which
- * is explicitely specialized for all used dimensions, while those fields which
- * may be formulated in a dimension-independent way are put into the present
- * class.
- *
- * The different matrices are initialized with the correct size, such that in
- * the derived (concrete) finite element classes, their entries must only be
- * filled in; no resizing is needed.
- *
- * @author Wolfgang Bangerth, 1998
+ * Common interface of all finite elements. Here, the functions to
+ * fill the data fields of @ref{FEValues} are declared. While
+ * @ref{FiniteElementBase} provides implementation of common
+ * functionality, this class only serves as an abstract base class.
+ *
+ * The interface of this class is very restrictive. The reason is that
+ * finite element values should be accessed only by use of
+ * @ref{FEValues} objects. These, together with @p{FiniteElement} are
+ * responsible to provide an optimized implementation.
+ *
+ * This even holds for evaluating finite elements at their support
+ * points (provided the element is based on Lagrangian interpolation):
+ * first, it is necessary to construct a quadrature rule from the
+ * support points. This is then fed into an object of class
+ * @ref{FEValues}. Even for evaluation on the unit cell, you will need
+ * a triangulation containing that single cell.
+ * 
+ * @author Wolfgang Bangerth, Guido Kanschat, 1998, 2000
  */
 template <int dim>
-class FiniteElementBase : public Subscriptor,
-                         public FiniteElementData<dim>
+class FiniteElement : public FiniteElementBase<dim>
 {
-  public:
-                                    /**
-                                     * Construct an object of this type.
-                                     * You have to set the
-                                     * matrices explicitely after calling
-                                     * this base class' constructor.
-                                     */
-    FiniteElementBase (const FiniteElementData<dim> &fe_data,
-                      const std::vector<bool>      &restriction_is_additive_flags);
-    
-                                    /**
-                                     * Return a readonly reference to the
-                                     * matrix which describes the transfer of a
-                                     * child with the given number to the
-                                     * mother cell. See the @p{restriction} array
-                                     * for more information.
-                                     */
-    const FullMatrix<double> & restrict (const unsigned int child) const;
-
                                     /**
-                                     * Return a readonly reference to the
-                                     * matrix which describes the transfer of a
-                                     * mother cell to the child with the given
-                                     * number.
+                                     * Copy constructor prohibited.
                                      */
-    const FullMatrix<double> & prolongate (const unsigned int child) const;
+    FiniteElement(const FESystem<dim>&);
 
+  public:
                                     /**
-                                     * Return a readonly reference to the
-                                     * matrix which describes the constraints
-                                     * at the interface between a refined and
-                                     * an unrefined cell.
-                                     *
-                                     * The matrix is obviously empty in only
-                                     * one space dimension, since there are no
-                                     * constraints then.
+                                     * Constructor
                                      */
-    const FullMatrix<double> & constraints () const;
+    FiniteElement (const FiniteElementData<dim> &fe_data,
+                  const std::vector<bool> &restriction_is_additive_flags);
 
                                     /**
-                                     * Comparison operator. We also check for
-                                     * equality of the constraint matrix,
-                                     * which is quite an expensive operation.
-                                     * Do therefore
-                                     * use this function with care, if possible
-                                     * only for debugging purposes.
-                                     *
-                                     * Since this function is not that important,
-                                     * we avoid an implementational question
-                                     * about comparing arrays and do not compare
-                                     * the matrix arrays @p{restriction} and
-                                     * @p{prolongation}.
+                                     * Virtual destructor. Makes sure
+                                     * that pointers to this class
+                                     * are deleted properly.
                                      */
-    bool operator == (const FiniteElementBase<dim> &) const;
+    virtual ~FiniteElement ();
 
                                     /**
-                                     * Compute system index from components.
+                                     * Compute flags for initial
+                                     * update only.
+                                     * @see{FEValuesBase}
                                      */
-    unsigned int component_to_system_index (unsigned int component,
-                                           unsigned int component_index) const;
+    virtual UpdateFlags update_once (UpdateFlags flags) const = 0;
   
                                     /**
-                                     * Compute component and index from
-                                     * system index.
-                                     *
-                                     * Return value contains first
-                                     * component and second index in
-                                     * component.
+                                     * Compute flags for update on
+                                     * each cell.
+                                     * @see{FEValuesBase}
                                      */
-    std::pair<unsigned int,unsigned int>
-    system_to_component_index (unsigned int index) const; 
-    
-                                    /**
-                                     * Compute system index from components on a face.
-                                     */
-    unsigned int face_component_to_system_index (unsigned int component,
-                                                unsigned int component_index) const;
+    virtual UpdateFlags update_each (UpdateFlags flags) const = 0;
   
-                                    /**
-                                     * Compute component and index from system
-                                     * index for a face.
-                                     *
-                                     * Return value contains first
-                                     * component and second index in
-                                     * component.
-                                     */
-    std::pair<unsigned int,unsigned int>
-    face_system_to_component_index (unsigned int index) const;
-    
-                                    /**
-                                     * The base element establishing a
-                                     * component.
-                                     *
-                                     * This table converts a
-                                     * component number to the
-                                     * @p{base_element} number. While
-                                     * component information contains
-                                     * multiplicity of base elements,
-                                     * the result allows access to
-                                     * shape functions of the base
-                                     * element.
-                                     */
-    unsigned int component_to_base(unsigned int index) const;
-
-                                    /**
-                                     * Access the @p{restriction_is_additive_flag}
-                                     * field. See there for more information on 
-                                     * its contents.
-                                     */
-    bool restriction_is_additive (const unsigned int component) const;
-
-                                    /**
-                                     * Determine an estimate for the
-                                     * memory consumption (in bytes)
-                                     * of this object.
-                                     *
-                                     * This function is made virtual,
-                                     * since finite element objects
-                                     * are usually accessed through
-                                     * pointers to their base class,
-                                     * rather than the class itself.
-                                     */
-    virtual unsigned int memory_consumption () const;
 
                                     /**
-                                     * Exception
-                                     */
-    DeclException2 (ExcWrongFieldDimension,
-                   int, int,
-                   << "The field has not the assumed dimension " << arg2
-                   << ", but has " << arg1 << " elements.");
-    DeclException2 (ExcWrongInterfaceMatrixSize,
-                   int, int,
-                   << "The interface matrix has a size of " << arg1
-                   << "x" << arg2
-                   << ", which is not reasonable in the present dimension.");
-    
-  protected:
-                                    /**
-                                     * Have @p{N=2^dim} matrices keeping the
-                                     * restriction constants for the transfer
-                                     * of the @p{i}th child to the mother cell.
-                                     * The numbering conventions for the
-                                     * degree of freedom indices are descibed
-                                     * in the derived classes.
-                                     * In this matrix, the row indices belong
-                                     * to the destination cell, i.e. the
-                                     * unrefined one, while the column indices
-                                     * are for the refined cell's degrees of
-                                     * freedom. The application of this matrix
-                                     * is therefore usually its being
-                                     * multiplied by the vector of nodal values
-                                     * on the child.
-                                     *
-                                     * In essence, using the matrices from the
-                                     * children to the mother cell amounts to
-                                     * computing the interpolation of the
-                                     * function on the refined to the coarse
-                                     * mesh. To get the vector of nodal values
-                                     * of the interpolant on the mother cell,
-                                     * you have to multiply the nodal value
-                                     * vectors of each of the child cell with
-                                     * the respective restriction matrix and
-                                     * clobber these contributions together.
-                                     * However, you must take care not to
-                                     * @p{add} these together, since nodes which
-                                     * belong to more than one child would then
-                                     * be counted more than once; rather, you
-                                     * have to overwrite the nonzero
-                                     * contributions of each child into the
-                                     * nodal value vector of the mother cell.
-                                     *
-                                     * While we could avoid this and rather add
-                                     * up the contributions of each child for
-                                     * nodes that are interior of the mother
-                                     * cell, we can't for nodes on the boundary
-                                     * of the mother cell. The reason for this
-                                     * is that we know how many children may
-                                     * contribute to the interpolated nodal
-                                     * value of an interior degree of freedom.
-                                     * However, we don't know for dofs on the
-                                     * boundary, for which we only know how many
-                                     * children from each side of the face
-                                     * contribute, but we would have to look out
-                                     * of the cell to know how many neighbors
-                                     * there are and then, still, we would have
-                                     * to have two different interpolation
-                                     * routines for local interpolation and for
-                                     * the contribution of a cell to a global
-                                     * interpolation if we wanted to compute
-                                     * that by adding up local contributions.
+                                     * Return the support points of the
+                                     * trial functions on the unit cell.
                                      *
-                                     * Because of this problem, we chose to
-                                     * write rather than add the contributions
-                                     * of each cell to the interpolation onto
-                                     * the mother cell. However, there now is
-                                     * another problem which appears when using
-                                     * discontinuous finite elements. The
-                                     * process of 'writing' assumed that we
-                                     * get the same result for each degree of
-                                     * freedom from each of the children, such
-                                     * that 'over'writing would not destroy
-                                     * information; when using discontinuous
-                                     * elements, this assumption is violated.
+                                     * The order of points in the
+                                     * array matches that returned by
+                                     * the #cell->get_dof_indices#
+                                     * function, but:
                                      *
-                                     * One way to get the whole thing working
-                                     * nonetheless would be to use a flag which
-                                     * tells us when the 'write' and when to
-                                     * 'add'. Adding is possible when we have
-                                     * only interior degrees of freedom, i.e.
-                                     * dofs that are not shared between cells.
-                                     * This is certainly the way to go for the
-                                     * DG(r) elements. However, this scheme
-                                     * does not work for discontinuous elements
-                                     * with degrees of freedom on the faces,
-                                     * such as the rotated bilinear
-                                     * (Rannacher-Turek) element or elements
-                                     * like the Crouzeix-Raviart one. The latter
-                                     * have degrees of freedom on the faces,
-                                     * e.g. mean values on a face, and these
-                                     * values are the same from both sides of
-                                     * the face, but the solutions are
-                                     * discontinuous there nevertheless, such
-                                     * that interpolation is not possible here.
-                                     * 
-                                     * At least for the first case
-                                     * (the DG(r) elements), the
-                                     * @p{restriction_is_additive_flags} was
-                                     * introduced, see there for more
-                                     * information. For the latter
-                                     * case, NO SOLUTION HAS BEEN
-                                     * MADE UP YET.
-                                     *
-                                     * To compute the interpolation of a
-                                     * finite element field to a cell, you
-                                     * may use the @p{get_interpolated_dof_values}
-                                     * function of the @p{DoFCellAccessor} class.
-                                     * See there for more information.
-                                     *
-                                     * Upon assembling the transfer matrix
-                                     * between cells using this matrix array,
-                                     * zero elements in the restriction
-                                     * matrix are discarded and will not fill
-                                     * up the transfer matrix.
-                                     */
-#if !((__GNUC__==2) && (__GNUC_MINOR__==95))
-    FullMatrix<double> restriction[GeometryInfo<dim>::children_per_cell];
-#else
-    FullMatrix<double> restriction[1 << dim];
-#endif
-
-                                    /**
-                                     * Have @p{N=2^dim} matrices keeping the
-                                     * prolongation constants for the transfer
-                                     * of the mother cell to the @p{i}th child.
-                                     * The numbering conventions for the
-                                     * degree of freedom indices are descibed
-                                     * in the derived classes.
-                                     * In this matrix, the row indices belong
-                                     * to the destination cell, i.e. the
-                                     * refined one, while the column indices
-                                     * are for the unrefined cell's degrees of
-                                     * freedom. Thus, if @p{u0} is the vector
-                                     * of values of degrees of freedom on the
-                                     * coarse cell, @p{prolongation[i]*u0}
-                                     * yields the vector of values of the
-                                     * degrees of freedom on the @p{i}th child
-                                     * cell.
-                                     *
-                                     * On the other hand, for finite elements
-                                     * with embedded spaces, the basis function
-                                     * phi0[i] on the coarse grid can be
-                                     * expressed by
-                                     * $\sum_c \sum_j p^c_{ji} phi1[j]$
-                                     * where the sum over c runs over the child
-                                     * cells and phi1[j] is the jth basis
-                                     * function on the cth child cell. Note
-                                     * that we need here the transpose of the
-                                     * matrix $p^c$ ($p^c$ is returned by this
-                                     * function with parameter c).
-                                     *
-                                     * Upon assembling the transfer matrix
-                                     * between cells using this matrix array,
-                                     * zero elements in the prolongation
-                                     * matrix are discarded and will not fill
-                                     * up the transfer matrix.
+                                     * If the shape functions are not
+                                     * Lagrangian interpolants at
+                                     * some points, the size of the
+                                     * array will be zero after
+                                     * calling this function. This is
+                                     * the standard behavior, if the
+                                     * function is not overloaded.
                                      */
-#if ! ((__GNUC__==2) && (__GNUC_MINOR__==95))
-    FullMatrix<double> prolongation[GeometryInfo<dim>::children_per_cell];
-#else
-    FullMatrix<double> prolongation[1 << dim];
-#endif
-
-                                    /**
-                                     * Specify the constraints which
-                                     * the dofs on the two sides of a
-                                     * cell interface underly if the
-                                     * line connects two cells of
-                                     * which one is refined once.
-                                     *
-                                     * For further details see the
-                                     * general description of the
-                                     * derived class.
-                                     *
-                                     * This field is obviously
-                                     * useless in one space dimension
-                                     * and has there a zero size.
-                                     */
-    FullMatrix<double> interface_constraints;
-
-                                    /**
-                                     * Map between linear dofs and
-                                     * component dofs.
-                                     */
-    std::vector< std::pair<unsigned int, unsigned int> > system_to_component_table;
-
-                                    /**
-                                     * Map between linear dofs and
-                                     * component dofs on face.
-                                     */
-    std::vector< std::pair<unsigned int, unsigned int> > face_system_to_component_table;
-
-                                    /**
-                                     * Map between component and
-                                     * linear dofs.
-                                     */
-    std::vector< std::vector<unsigned int> > component_to_system_table;
-
-                                    /**
-                                     * Map between component and
-                                     * linear dofs on a face.
-                                     */
-    std::vector< std::vector<unsigned int> > face_component_to_system_table;
+    virtual void get_unit_support_points (std::vector<Point<dim> > &points) const;    
     
                                     /**
-                                     * The base element establishing
-                                     * a component.
-                                     *
-                                     * This table converts a
-                                     * component number to the
-                                     * @p{base_element} number. While
-                                     * component information contains
-                                     * multiplicity of base elements,
-                                     * the result allows access to
-                                     * shape functions of the base
-                                     * element.
-                                     */
-    std::vector<unsigned int> component_to_base_table;
-
-                                    /**
-                                     * This flag determines how the
-                                     * restriction of data from child
-                                     * cells to its mother is to be
-                                     * done. In this, it also
-                                     * determines in which way the
-                                     * restriction matrices of the
-                                     * derived class are to be used.
-                                     *
-                                     * For most elements, the mode is
-                                     * the following. Consider a 1d
-                                     * linear element, with two
-                                     * children and nodal values 1
-                                     * and 2 on the first child, and
-                                     * 2 and 4 on the second
-                                     * child. The restriction to the
-                                     * mother child then yields the
-                                     * values 1 and four, i.e. the
-                                     * values on the mother cell can
-                                     * be obtained by pointwise
-                                     * interpolation, where for each
-                                     * nodal value on the mother
-                                     * child one point on exactly one
-                                     * child exists.  However,
-                                     * already on the quadratic
-                                     * element, the midpoint on the
-                                     * mother element can be obtained
-                                     * from any of the two children,
-                                     * which however would both yield
-                                     * the same value due to
-                                     * continuity. What we do in
-                                     * practice is to compute them
-                                     * from both sides and set them,
-                                     * rather than add them up.  This
-                                     * makes some things much
-                                     * easier. In practice, if a
-                                     * degree of freedom on one of
-                                     * the child cells yields a
-                                     * nonzero contribution to one of
-                                     * the degrees of freedom on the
-                                     * mother cell, we overwrite the
-                                     * value on the mother cell. This
-                                     * way, when setting up the
-                                     * restriction matrices, we do
-                                     * not have to track which child
-                                     * is responsible for setting a
-                                     * given value on the mother
-                                     * cell. We call this the
-                                     * non-additive mode.
-                                     *
-                                     * The other possibility would be
-                                     * to add up the contributions
-                                     * from the different
-                                     * children. This would mean that
-                                     * both of the inner endpoint of
-                                     * the quadratic child elements
-                                     * above would have a weight of
-                                     * 1/2 with respect to the
-                                     * midpoint value on the mother
-                                     * cell. However, this also means
-                                     * that we have to first compute
-                                     * the restriction to the mother
-                                     * cell by addition from the
-                                     * child cells, and afterwards
-                                     * set them to the global
-                                     * vector. The same process,
-                                     * adding up the local
-                                     * contributions to the global
-                                     * vector is not possible since
-                                     * we do not know how many coarse
-                                     * cells contribute to nodes on
-                                     * the boundary.
-                                     *
-                                     * In contrast to the
-                                     * non-additive mode described
-                                     * above, which is the simplest
-                                     * way for elements can be
-                                     * interpolated from its
-                                     * children, interpolation is not
-                                     * possible for piecewise
-                                     * constant elements, to name
-                                     * only one example.  Here, the
-                                     * value on the mother cell has
-                                     * to be taken the average of the
-                                     * values on the children,
-                                     * i.e. all children contribute
-                                     * alike to the one degree of
-                                     * freedom. Here, we have to sum
-                                     * up the contributions of all
-                                     * child cells with the same
-                                     * weight, and the non-additive
-                                     * mode of above would only set
-                                     * the value on the mother cell
-                                     * to the value of one of the
-                                     * child cell, irrespective of
-                                     * the values on the other cells.
+                                     * Return the support points of
+                                     * the trial functions on the
+                                     * first face of the unit cell.
                                      *
-                                     * For discontinuous elements of
-                                     * general degree p, DG(p), a
-                                     * local projection from the
-                                     * child cells to the mother cell
-                                     * is used as restriction. As the
-                                     * standard local projection
-                                     * would depend on the real
-                                     * points of the cells, the
-                                     * following projection is chosen
-                                     * to be performed on the unit
-                                     * square only:
-                                     * $u^K=u^K_j\phi^K_j$ denotes
-                                     * the discrete function on the
-                                     * mother cell and
-                                     * $u^C=u^C_k\phi^C_k$ the
-                                     * function on the child cell
-                                     * $C$, with $\phi^K_j$ and
-                                     * $\phi^C_k$ denoting the basis
-                                     * functions on the reference
-                                     * cell (unit square) and the
-                                     * cell $[0,0.5]^dim$,
-                                     * respectively. The projection
-                                     * $u^K$ is now defined to hold
-                                     * $\int_K
-                                     * u^K\phi^K_i=\sum_C\int_C
-                                     * u^C\phi^K_i,\quad\forall
-                                     * i$. Using prolongation
-                                     * matrices $A_{i,l}$, with
-                                     * $\phi^K_i(x)=A_{i,l}\phi^C_l(x)$,
-                                     * and using the local mass
-                                     * matrices $M^K$ and $M^C$, the
-                                     * projection $u^K$ may be
-                                     * written as
-                                     * $M^K_{i,j}u^K_j=\sum_C
-                                     * A_{l,i}M^C_{l,k}u^C_k$. Therefore
-                                     * $u^K_j=\sum_C R^C_{j,k}u^C_k$
-                                     * with
-                                     * $R^C=(M^K)^{-1}A^TM^C$. The
-                                     * restriction matrices $R^C$ are
-                                     * hard coded and the summation
-                                     * over all child cells is
-                                     * switched on by setting the
-                                     * @p{restriction_is_additive_flags}
-                                     * to @p{true}.
+                                     * The order of points in
+                                     * the array matches that returned by
+                                     * the #cell->get_dof_indices# function.
                                      *
-                                     * Given these notes, the flag
-                                     * under consideration has to be
-                                     * set to @p{false} for the usual
-                                     * continuous Lagrange elements,
-                                     * and @p{true} for the other cases
-                                     * mentioned above. The main
-                                     * function where it is used is
-                                     * @p{DoFAccessor::get_interpolated_dof_values}.
-                                     * There is one flag per
-                                     * component.
+                                     * If the shape functions are not
+                                     * Lagrangian interpolants at some
+                                     * points, the size of the array
+                                     * will be zero. This is the standard behavior,
+                                     * if the function is not overloaded.
                                      */
-    const std::vector<bool> restriction_is_additive_flags;    
-};
-
-
-
-
-/**
- * Finite Element in any dimension. This class declares the
- * functionality to fill the fields of the @p{FiniteElementBase}
- * class. Since this is something that depends on the actual finite
- * element, the functions are declared virtual if it is not possible
- * to provide a reasonable standard implementation. Note that you will
- * only seldomly use the functionality of this class in application
- * programs, as you will normally be interested in the values and
- * derivatives of shape functions on cells in physical space, rather
- * than on the unit cell. In that case, you will have to use the
- * @p{FEValues} class and its siblings.
- *
- *
- * @sect3{Finite elements in one dimension}
- *
- * Finite elements in one dimension need only set the @p{restriction} and
- * @p{prolongation} matrices in @p{FiniteElementBase<1>}. The constructor of
- * this class in one dimension presets the @p{interface_constraints} matrix
- * by the unit matrix with dimension one. Changing this behaviour in
- * derived classes is generally not a reasonable idea and you risk getting
- * in terrible trouble.
- * 
- * 
- * @sect3{Finite elements in two dimensions}
- * 
- * In addition to the fields already present in 1D, a constraint matrix
- * is needed in case two quads meet at a common line of which one is refined
- * once more than the other one. Then there are constraints referring to the
- * hanging nodes on that side of the line which is refined. These constraints
- * are represented by a $m\times n$-matrix @p{interface_constraints}, where $n$ is the
- * number of degrees of freedom on the refined side (those dofs on the middle
- * vertex plus those on the two lines), and $m$ is that of the unrefined side
- * (those dofs on the two vertices plus those on the line). The matrix is thus
- * a rectangular one.
- *
- * The mapping of the dofs onto the indices of the matrix is as follows:
- * let $d_v$ be the number of dofs on a vertex, $d_l$ that on a line, then
- * $m=0...d_v-1$ refers to the dofs on vertex zero of the unrefined line,
- * $m=d_v...2d_v-1$ to those on vertex one,
- * $m=2d_v...2d_v+d_l-1$ to those on the line.
- *
- * Similarly, $n=0...d_v-1$ refers to the dofs on the middle vertex
- * (vertex one of child line zero, vertex zero of child line one),
- * $n=d_v...d_v+d_l-1$ refers to the dofs on child line zero,
- * $n=d_v+d_l...d_v+2d_l-1$ refers to the dofs on child line one.
- * Please note that we do not need to reserve space for the dofs on the
- * end vertices of the refined lines, since these must be mapped one-to-one
- * to the appropriate dofs of the vertices of the unrefined line.
- *
- * It should be noted that it is not possible to distribute a constrained
- * degree of freedom to other degrees of freedom which are themselves
- * constrained. Only one level of indirection is allowed. It is not known
- * at the time of this writing whether this is a constraint itself.
- *
- *
- * @sect3{Finite elements in three dimensions}
- *
- * For the interface constraints, almost the same holds as for the 2D case.
- * The numbering for the indices $m$ on the mother face is obvious and keeps
- * to the usual numbering of degrees of freedom on quadrilaterals.
- *
- * The numbering of the degrees of freedom on the interior of the refined
- * faces for the index $n$ is as follows: let $d_v$ and $d_l$ be as above,
- * and $d_q$ be the number of degrees of freedom per quadrilateral (and
- * therefore per face), then $n=0...d_v-1$ denote the dofs on the vertex at
- * the center, $n=d_v...5d_v-1$ for the dofs on the vertices at the center
- * of the bounding lines of the quadrilateral,
- * $n=5d_v..5d_v+4*d_l-1$ are for the degrees of freedom on
- * the four lines connecting the center vertex to the outer boundary of the
- * mother face, $n=5d_v+4*d_l...5d_v+4*d_l+8*d_l-1$ for the degrees of freedom
- * on the small lines surrounding the quad,
- * and $n=5d_v+12*d_l...5d_v+12*d_l+4*d_q-1$ for the dofs on the
- * four child faces. Note the direction of the lines at the boundary of the
- * quads, as shown below.
- *
- * The order of the twelve lines and the four child faces can be extracted
- * from the following sketch, where the overall order of the different
- * dof groups is depicted:
- * @begin{verbatim}
- *    *--13--3--14--*
- *    |      |      |
- *    16 20  7  19  12
- *    |      |      |
- *    4--8---0--6---2
- *    |      |      |
- *    15 17  5  18  11
- *    |      |      |
- *    *--9---1--10--*
- * @end{verbatim}
- * It should be noted that the face as shown here is in the standard form,
- * i.e. with vertex zero at the bottom left, and the other vertices numbered
- * counter clockwise. This explains the numbering of the lines labeled 13 and
- * 14, as well as those labeled 15 and 16. The dofs on the lines need to
- * be numbered in the direction of the lines, which is as follows:
- * @begin{verbatim}
- *    *-->---*-->---*
- *    |      |      |
- *    ^      ^      ^ 
- *    |      |      |
- *    *-->---*-->---*
- *    |      |      |
- *    ^      ^      ^ 
- *    |      |      |
- *    *-->---*-->---*
- * @end{verbatim}
- * The orientation of the quads should be obvious.
- *
- * The faces of a hexahedron are arranged in a way such that
- * some must be viewed from the inside and some from the outside of the cell to
- * show this order; refer to the documentation of the @ref{Triangulation} class for
- * the definition of this.
- *
- * If of the cells adjacent to one line more than one is refined and there is
- * at least one unrefined cell, then the degrees of freedom on the refined line
- * are constrained from two cells. For example, consider the cell behind the
- * face shown above is refined, while the one in front of the face is not
- * refined; then the dofs on the lines numbered 9 and 10 are constrained. If
- * there are two more cells below the ones just introduced, with a common face
- * right below the one shown, and of these is one refined and one unrefined one,
- * then the degrees on the two mentioned small lines are constrained a second
- * time. Since these constraints must be unique, it follows that the constraints
- * for the degrees of freedom on refined lines may only be in terms of the
- * degrees of freedom on the unrefined line, not in terms of the other
- * degrees of freedom on a face.
- *
- * Since the handling of constraints on degrees of freedom is mostly done
- * by the @p{ConstraintMatrix} class, this class checks whether the constraints
- * introduced from the two sides are unique; it is able to handle the fact
- * that the constraints for some of the dofs are entered more than once.
- *
- *
- * @sect3{Notes on three space dimensions}
- *
- * In three space dimensions, using locally refined elements involves
- * a difficulty not found in one or two spatial dimensions: the common
- * face of two cells need not match exactly, if one of the cells is
- * refined and the two cells are at the boundary. To understand this,
- * look at the following sketch:
- * @begin{verbatim}
- *         *---------*---------*
- *        /         /         /|
- *       /         /         / |
- *      /         /         /  |
- *     *---------*---------*   |
- *     |         |         |   |
- *     |         |         |   *
- *     |         |         |  /
- *     |         |         | /
- *     |         |         |/
- *     *---------*---------*
- * @end{verbatim}
- *
- * Assume the two top faces represent the boundary of the
- * triangulation; assume further that the boundary of the original
- * domain is curved here. Then, refining one of the two cells will
- * lead to refinement of the top line of the common face of the two
- * cells with the new mid-point being raised or lowered, i.e. the two
- * children of this line will not take the same place as their mother
- * line did (this is not properly drawable using only ASCII characters,
- * use some imagination):
- * @begin{verbatim}
- *       ..*--.*---..*---------*
- *      *----*----* /         /|
- *      :    :    :/         / |
- *     :    :    :/         /  |
- *     *----*----*---------*   |
- *     |    |    |         |   |
- *     |    |    |         |   *
- *     *----*----*         |  /
- *     |    |    |         | /
- *     |    |    |         |/
- *     *----*----*---------*
- * @end{verbatim}
- * While this is the case with boundary faces in two spatial
- * dimensions also, it here leads to the fact that the four child
- * faces of the common face of the two cells will not coincide with
- * their mother face as well.
- *
- * Before proceeding to the consequences of this, we should note that
- * this problem occurs only for cells exactly at the boundary and if
- * exactly one of the two cells is refined once. If one of the two is
- * refined once and the other one twice, the problem again occurs only
- * for the outermost layer of cells, not for the others.
- *
- * Now for the consequences. Because most finite elements, at least
- * those implemented at present (February 1999) are implemented by
- * interpolation to certain Lagrange points, and because the Lagrange
- * points do not match, there is no easy way to obtain continuity or
- * any other constraint on the finite element functions at this
- * face. This is rather obvious since parts of the child faces of the
- * left, refined cell do not match any face of the right, unrefined
- * cell at all. This problem seems unsolvable using the usual finite
- * elements with trial functions computed on the unit cell without
- * taking into consideration the actual cell, so we do not even
- * attempt to solve it.
- *
- * A second, but related problem comes into play when trying to
- * compute integrals over faces which are refined from one side. For
- * this problem, the @p{FESubfaceValues} class exists, and it
- * evaluates certain functions of the finite element class involving
- * the Jacobian determinant of the mapping of unit face to real face,
- * restricted to a subface, and the normal vectors to the subfaces. We
- * should note that here, we talk only about evaluating the finite
- * element in the right cell, but on the common face; evaluating the
- * finite element in the small cells on the left poses no problem. The
- * question here is: what are the subfaces? It could either be the
- * four subfaces of the refined cell to the left, or the four subfaces
- * of the large face if it were refined with no curved boundary being
- * near it. In the first case, points where we evaluate jacobians as
- * well as normal vectors would match from both sides of the faces;
- * however, the points at which the finite element function is
- * evaluated, would not match, which needs to be that way because for
- * some points of the small faces of the left cell there are no
- * matching points on the right.
- *
- * The other possibility would be to totally ignore the existence of
- * the boundary and evaluate the finite element in the right cell at
- * subfaces which would be generated if the new vertex of the top line
- * of the common face was the midpoint of the line. This approach is
- * simpler from the implementational view point, but is also more
- * appropriate, since we evaluate on the right cell and do not want to
- * let this evaluation depend on the state of the left cell or its
- * children.
- *
- * Within this library, the present implementation uses the second way.
- *
- *
- * @sect3{Notes on extending the finite element library}
- *
- * The @p{deal.II} library was mainly made to use lagrange elements of
- * arbitrary order. For this reason, there may be places in the
- * library where it uses features of finite elements which may not be
- * as general as desirable as may be. Most of these restrictions don't
- * come to mind and may cause problems if someone wanted to implement
- * a finite element which does not satisfy these restrictions, leading
- * to strange problems in places one does not expect.
- *
- * This section tries to collect some of these restrictions which are known.
- * There is no guarantee that this list is complete; in fact, doubts are in
- * place that that be so.
- *
- * @begin{itemize}
- * @item Lagrange elements: at several places in the library, use is made of the
- *   assumption that the basis functions of a finite element corresponds to a
- *   function value (as opposed to derivatives or the like, as used in the
- *   Hermitean finite element class or in the quintic Argyris element). It is
- *   further assumed that a basis function takes its nominal value at a
- *   certain point (e.g. linear trial functions take their value in the
- *   corners of the element; this restriction rules out spectral elements for
- *   the present library).
- *
- *   Both these assumptions are used when interpolation of a continuous
- *   function to the finite element space is applied. At present, only few
- *   places where this is used in the library come to mind to the author,
- *   namely the treating of boundary values in the @p{ProblemBase} class and
- *   the interpolation in the @p{VectorTools} collection. You should also
- *   look out for other places where explicit use of the support points is
- *   made if you want to use elements of other classes. A hint may be the
- *   use of the @p{get_support_points} and @p{get_face_support_points} functions
- *   of this class.
- *
- *   This also is used in some sense in the
- *   @ref{DoFHandler}@p{::distribute_cell_to_dof_vector} where it is assumed that
- *   the degrees of freedom denote function values and not derivatives or
- *   the like.
- *
- * @item Vanishing of basis functions on faces: when projecting a function
- *   to the boundary, use if made of the assumption that all basis functions
- *   on a cell adjacent to the boundary vanish on the boundary except for those
- *   on the boundary face itself. For Lagrange elements this is true, but it
- *   may or may not be true in other cases.
- *
- *   This assumption is used in the @p{VectorTools::project_boundary_values},
- *   @p{MatrixCreator::create_boundary_mass_matrix},
- *   @ref{DoFHandler}@p{::make_boundary_sparsity_pattern},
- *   @ref{DoFHandler}@p{::map_dof_to_boundary_indices} and may be a few other places.
- *   The places in the @ref{DoFHandler} class are probably not that dangerous,
- *   since wrong results will most likely lead to internal errors through
- *   the @p{Assert} mechanism, but the first places will lead to undiscovered
- *   errors if not thought of properly.
- *
- *   This assumption also comes into play when computing the constraints of
- *   hanging nodes. If functions not located on a certain face vanish on
- *   that face (they do for Lagrange elements), then the distribution of
- *   constrained nodes happens with the face nodes on the large call. If
- *   the assumption does not hold, then the distribution has to happen
- *   with all nodes on the small and the large cells. This is not
- *   implemented in the @ref{DoFHandler} class as of now.
- * @end{itemize}
- *
- * @author Wolfgang Bangerth, 1998
- */
-template <int dim>
-class FiniteElement : public FiniteElementBase<dim>
-{
-  public:
-                                    /**
-                                     * Constructor
-                                     */
-    FiniteElement (const FiniteElementData<dim> &fe_data,
-                  const std::vector<bool>      &restriction_is_additive_flags);
-
-                                    /**
-                                     * Destructor. Only declared to
-                                     * have a virtual destructor
-                                     * which the compiler wants to
-                                     * have.
-                                     */
-    virtual ~FiniteElement () {};
+    virtual void get_unit_face_support_points (std::vector<Point<dim-1> > &) const;    
     
-                                    /**
-                                     * Return the value of the
-                                     * @p{i}th shape function at the
-                                     * point @p{p}.  @p{p} is a point
-                                     * on the reference element.
-                                     */
-    virtual double shape_value (const unsigned int i,
-                               const Point<dim> &p) const = 0;
-
-                                    /**
-                                     * Return the gradient of the
-                                     * @p{i}th shape function at the
-                                     * point @p{p}. @p{p} is a point
-                                     * on the reference element, and
-                                     * likewise the gradient is the
-                                     * gradient on the unit cell with
-                                     * respect to unit cell
-                                     * coordinates.
-                                     */
-    virtual Tensor<1,dim> shape_grad (const unsigned int  i,
-                                     const Point<dim>   &p) const = 0;
-
-                                    /**
-                                     * Return the tensor of second
-                                     * derivatives of the @p{i}th
-                                     * shape function at point @p{p}
-                                     * on the unit cell. The
-                                     * derivatives are derivatives on
-                                     * the unit cell with respect to
-                                     * unit cell coordinates.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const = 0;
-
-                                    /**
-                                     * Transforms the point @p{p} on
-                                     * the unit cell to the point
-                                     * @p{p_real} on the real cell
-                                     * @p{cell} and returns @p{p_real}.
-                                     */
-    virtual 
-    Point<dim>
-    transform_unit_to_real_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                const Point<dim>                              &p) const = 0;
+    friend class FEValues<dim>;
+    friend class FEFaceValues<dim>;
+    friend class FESubfaceValues<dim>;
+    friend class FESystem<dim>;
+    friend class MatrixCreator<dim>;
+    friend class VectorTools;
     
+  protected:
                                     /**
-                                     * Transforms the point @p{p} on
-                                     * the real cell to the point
-                                     * @p{p_unit} on the unit cell
-                                     * @p{cell} and returns @p{p_unit}.
-                                     */
-    virtual 
-    Point<dim> 
-    transform_real_to_unit_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                const Point<dim>                              &p) const = 0;
-
-                                    /**
-                                     * Return the value of the
-                                     * @p{i}th shape function of the
-                                     * transformation mapping from
-                                     * unit cell to real cell. For
-                                     * isoparametric elements, this
-                                     * function is the same as the
-                                     * trial functions, but for
-                                     * sublinear or other mappings,
-                                     * they differ.
-                                     */
-    virtual double shape_value_transform (const unsigned int i,
-                                         const Point<dim> &p) const = 0;
-
-                                    /**
-                                     * Same as above: return gradient
-                                     * of the @p{i}th shape function
-                                     * for the mapping from unit to
-                                     * real cell.
+                                     * @p{clone} function instead of
+                                     * a copy constructor.
+                                     *
+                                     * This function is needed by the
+                                     * constructors of @p{FESystem}.
                                      */
-    virtual Tensor<1,dim> shape_grad_transform (const unsigned int i,
-                                               const Point<dim> &p) const = 0;    
+    virtual FiniteElement<dim> *clone() const =0;
     
                                     /**
-                                     * Compute the Jacobian matrix
-                                     * and the quadrature points as
-                                     * well as the trial function
-                                     * locations on the real cell in
-                                     * real space from the given cell
-                                     * and the given quadrature
-                                     * points on the unit cell. The
-                                     * Jacobian matrix is to be
-                                     * computed at every quadrature
-                                     * point.  The derivative of the
-                                     * jacobian matrix is the
-                                     * derivative with respect to the
-                                     * unit cell coordinates.  This
-                                     * function has to be in the
-                                     * finite element class, since
-                                     * different finite elements need
-                                     * different transformations of
-                                     * the unit cell to a real cell.
-                                     *
-                                     * The computation of these
-                                     * fields may share some common
-                                     * code, which is why we put it
-                                     * in one function. However, it
-                                     * may not always be necessary to
-                                     * really compute all fields, so
-                                     * there are bool flags which
-                                     * tell the function which of the
-                                     * fields to actually compute.
-                                     *
-                                     * Refer to the documentation of
-                                     * the @ref{FEValues} class for a
-                                     * definition of the Jacobi
-                                     * matrix and of the various
-                                     * structures to be filled.
-                                     *
-                                     * This function is provided for
-                                     * the finite element class in
-                                     * one space dimension, but for
-                                     * higher dimensions, it depends
-                                     * on the present fe and needs
-                                     * reimplementation by the
-                                     * user. This is due to the fact
-                                     * that the user may want to use
-                                     * iso- or subparametric mappings
-                                     * of the unit cell to the real
-                                     * cell, which makes things much
-                                     * more complicated.
-                                     *
-                                     * The
-                                     * @p{shape_values/grads_transform}
-                                     * arrays store the values and
-                                     * gradients of the
-                                     * transformation basis
-                                     * functions.  While this
-                                     * information is not necessary
-                                     * for the computation of the
-                                     * other fields, it allows for
-                                     * significant speedups, since
-                                     * the values and gradients of
-                                     * the transform functions at the
-                                     * quadrature points need not be
-                                     * recomputed each time this
-                                     * function is called.
-                                     *
-                                     * The function assumes that the
-                                     * fields already have the right
-                                     * number of elements. It has to
-                                     * be guaranteed, that fields
-                                     * that are not requested for
-                                     * update are not changed.  This
-                                     * also means, that these fields
-                                     * have to be filled with the
-                                     * correct values beforehand.
-                                     *
-                                     * This function is more or less
-                                     * an interface to the
-                                     * @p{FEValues} class and should
-                                     * not be used by users unless
-                                     * absolutely needed.
+                                     * Prepare internal data
+                                     * structures and fill in values
+                                     * independent of the cell.
                                      */
-    virtual void fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                const typename std::vector<Point<dim> > &unit_points,
-                                typename std::vector<Tensor<2,dim> >    &jacobians,
-                                const bool                      compute_jacobians,
-                                typename std::vector<Tensor<3,dim> >    &jacobians_grad,
-                                const bool                      compute_jacobians_grad,
-                                typename std::vector<Point<dim> >       &support_points,
-                                const bool                      compute_support_points,
-                                typename std::vector<Point<dim> >       &q_points,
-                                const bool                      compute_q_points,
-                                const FullMatrix<double>       &shape_values_transform,
-                                const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grads_transform) const;
+    virtual typename Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Mapping<dim>& mapping,
+             const Quadrature<dim> &quadrature) const = 0;
 
                                     /**
-                                     * Do the same thing that the
-                                     * other @p{fill_fe_values}
-                                     * function does, exception that
-                                     * a face rather than a cell is
-                                     * considered. The @p{face_no}
-                                     * parameter denotes the number
-                                     * of the face to the given cell
-                                     * to be considered.
-                                     *
-                                     * The unit points for the
-                                     * quadrature formula are given
-                                     * on the unit face which is a
-                                     * mannifold of dimension one
-                                     * less than the dimension of the
-                                     * cell. The
-                                     * @p{global_unit_points} denote
-                                     * the position of the unit
-                                     * points on the selected face on
-                                     * the unit cell.  This
-                                     * additional information is
-                                     * passed since the
-                                     * @p{FEFaceValues} class can
-                                     * compute them once and for all,
-                                     * eliminating the need to
-                                     * recompute it each time
-                                     * @p{FEFaceValues::reinit} is
-                                     * called.
-                                     *
-                                     * The jacobian matrix is
-                                     * evaluated at each of the
-                                     * quadrature points on the given
-                                     * face. The matrix is the
-                                     * transformation matrix of the
-                                     * unit cell to the real cell,
-                                     * not from the unit face to the
-                                     * real face. This is the
-                                     * necessary matrix to compute
-                                     * the real gradients.
-                                     *
-                                     * Conversely, the Jacobi
-                                     * determinants are the
-                                     * determinants of the
-                                     * transformation from the unit
-                                     * face to the real face. This
-                                     * information is needed to
-                                     * actually perform integrations
-                                     * along faces. Note that we here
-                                     * return the inverse of the
-                                     * determinant of the jacobi
-                                     * matrices as explained in the
-                                     * documentation of the
-                                     * @p{FEValues} class.
-                                     * 
-                                     * The support points are the
-                                     * off-points of those trial
-                                     * functions located on the given
-                                     * face; this information is
-                                     * taken over from the
-                                     * @p{get_face_support_points}
-                                     * function.
-                                     *
-                                     * The order of trial functions
-                                     * is the same as if it were a
-                                     * cell of dimension one less
-                                     * than the present. E.g. in two
-                                     * dimensions, the order is first
-                                     * the vertex functions (using
-                                     * the direction of the face
-                                     * induced by the given cell)
-                                     * then the interior functions.
-                                     * The same applies for the
-                                     * quadrature points which also
-                                     * use the standard direction of
-                                     * faces as laid down by the
-                                     * @ref{Triangulation} class.
-                                     *
-                                     * There is a standard
-                                     * implementation for dimensions
-                                     * greater than one. It uses the
-                                     * @p{fill_fe_values()} function
-                                     * to retrieve the wanted
-                                     * information. Since this
-                                     * operation acts only on unit
-                                     * faces and cells it does not
-                                     * depend on a specific finite
-                                     * element transformation and is
-                                     * thus applicable for all finite
-                                     * elements and uses tha same
-                                     * mapping from the unit to the
-                                     * real cell as used for the
-                                     * other operations performed by
-                                     * the specific finite element
-                                     * class.
-                                     *
-                                     * Three fields remain to be
-                                     * finite element specific in
-                                     * this standard implementation:
-                                     * The jacobi determinants of the
-                                     * transformation from the unit
-                                     * face to the real face, the
-                                     * support points and the outward
-                                     * normal vectors. For these
-                                     * fields, there exist pure
-                                     * virtual functions,
-                                     * @p{get_face_jacobians},
-                                     * @p{get_face_support_points}
-                                     * and @p{get_normal_vectors}.
-                                     *
-                                     * Though there is a standard
-                                     * implementation, there may be
-                                     * room for optimizations which
-                                     * is why this function is made
-                                     * virtual.
-                                     *
-                                     * Since any implementation for
-                                     * one dimension would be
-                                     * senseless, all derived classes
-                                     * should throw an error when
-                                     * called with @p{dim==1}.
-                                     *
-                                     * The function assumes that the
-                                     * fields already have the right
-                                     * number of elements.
-                                     *
-                                     * This function is more or less an
-                                     * interface to the @p{FEFaceValues} class
-                                     * and should not be used by users unless
-                                     * absolutely needed.
+                                     * Prepare internal data
+                                     * structure for transformation
+                                     * of faces and fill in values
+                                     * independent of the cell.
                                      */
-    virtual void fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                     const unsigned int           face_no,
-                                     const typename std::vector<Point<dim-1> > &unit_points,
-                                     const typename std::vector<Point<dim> >   &global_unit_points,
-                                     typename std::vector<Tensor<2,dim> >      &jacobians,
-                                     const bool                        compute_jacobians,
-                                     typename std::vector<Tensor<3,dim> >      &jacobians_grad,
-                                     const bool                        compute_jacobians_grad,
-                                     typename std::vector<Point<dim> > &support_points,
-                                     const bool                compute_support_points,
-                                     typename std::vector<Point<dim> > &q_points,
-                                     const bool                compute_q_points,
-                                     std::vector<double>      &face_jacobi_determinants,
-                                     const bool                compute_face_jacobians,
-                                     typename std::vector<Point<dim> > &normal_vectors,
-                                     const bool                compute_normal_vectors,
-                                     const FullMatrix<double> &shape_values_transform,
-                                     const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grads_transform) const;
+    virtual typename Mapping<dim>::InternalDataBase*
+    get_face_data (const UpdateFlags flags,
+                  const Mapping<dim>& mapping,
+                  const Quadrature<dim-1> &quadrature) const;
 
                                     /**
-                                     * This function does almost the
-                                     * same as the above one, with
-                                     * the difference that it
-                                     * considers the restriction of a
-                                     * finite element to a subface
-                                     * (the child of a face) rather
-                                     * than to a face. The number of
-                                     * the subface in the face is
-                                     * given by the @p{subface_no}
-                                     * parameter. The meaning of the
-                                     * other parameters is the same
-                                     * as for the
-                                     * @p{fill_fe_face_values}
-                                     * function.
-                                     *
-                                     * Since the usage of support
-                                     * points on subfaces is not
-                                     * useful, it is excluded from
-                                     * the interface to this
-                                     * function.
-                                     *
-                                     * Like for the
-                                     * @p{fill_fe_face_values}
-                                     * function, there is a default
-                                     * implementation, using the
-                                     * @p{fill_fe_values}
-                                     * function. There may be better
-                                     * and more efficient solutions
-                                     * for a special finite element,
-                                     * which is why this function is
-                                     * made virtual.
-                                     *
-                                     * This function is more or less
-                                     * an interface to the
-                                     * @p{FESubfaceValues} class and
-                                     * should not be used by users
-                                     * unless absolutely needed.
-                                     */                                       
-    virtual void fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                        const unsigned int           face_no,
-                                        const unsigned int           subface_no,
-                                        const typename std::vector<Point<dim-1> > &unit_points,
-                                        const typename std::vector<Point<dim> >   &global_unit_points,
-                                        typename std::vector<Tensor<2,dim> >      &jacobians,
-                                        const bool                        compute_jacobians,
-                                        typename std::vector<Tensor<3,dim> >      &jacobians_grad,
-                                        const bool                compute_jacobians_grad,
-                                        typename std::vector<Point<dim> > &q_points,
-                                        const bool                compute_q_points,
-                                        std::vector<double>      &face_jacobi_determinants,
-                                        const bool                compute_face_jacobians,
-                                        typename std::vector<Point<dim> > &normal_vectors,
-                                        const bool                compute_normal_vectors,
-                                        const FullMatrix<double> &shape_values_transform,
-                                        const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grads_transform) const;
-
-                                    /**
-                                     * Return the support points of
-                                     * the trial functions on the
-                                     * unit cell.
-                                     *
-                                     * The function assumes that the
-                                     * @p{unit_points} array already
-                                     * has the right size. The order
-                                     * of points in the array matches
-                                     * that returned by the
-                                     * @p{cell->get_dof_indices}
-                                     * function.
-                                     *
-                                     * For one space dimension there
-                                     * is a standard implementation
-                                     * assuming equidistant
-                                     * off-points on the unit
-                                     * line. For all other
-                                     * dimensions, an overwritten
-                                     * function has to be provided.
+                                     * Prepare internal data
+                                     * structure for transformation
+                                     * of children of faces and fill
+                                     * in values independent of the
+                                     * cell.
                                      */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &unit_points) const;
+    virtual typename Mapping<dim>::InternalDataBase*
+    get_subface_data (const UpdateFlags flags,
+                     const Mapping<dim>& mapping,
+                     const Quadrature<dim-1> &quadrature) const;
+
+                                    /**
+                                     * Fill the fields of
+                                     * @ref{FEValues}. This function
+                                     * performs all the operations
+                                     * needed to compute the data of an
+                                     * @p{FEValues} object.
+                                     *
+                                     * The same function in
+                                     * @p{mapping} must have been
+                                     * called for the same cell first!
+                                     */                                      
+    virtual void
+    fill_fe_values (const Mapping<dim> &mapping,
+                   const DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>                &quadrature,
+                   Mapping<dim>::InternalDataBase      &mapping_internal,
+                   Mapping<dim>::InternalDataBase      &fe_internal,
+                   FEValuesData<dim>                    &data) const = 0;
     
                                     /**
-                                     * Compute the off-points of the
-                                     * finite element basis functions
-                                     * on the given cell in real
-                                     * space.
-                                     *
-                                     * This function implements a
-                                     * subset of the information
-                                     * delivered by the
-                                     * @p{fill_fe_values} function to
-                                     * the @p{FEValues}
-                                     * class. However, since it is
-                                     * useful to use information
-                                     * about off-points without using
-                                     * @p{FEValues} objects (e.g. in
-                                     * interpolating functions to the
-                                     * finite element space), this
-                                     * function is excluded from the
-                                     * abovementioned one.
-                                     *
-                                     * The function assumes that the
-                                     * @p{support_points} array
-                                     * already has the right
-                                     * size. The order of points in
-                                     * the array matches that
-                                     * returned by the
-                                     * @p{cell->get_dof_indices}
-                                     * function.
-                                     *
-                                     * For one space dimension there
-                                     * is a standard implementation
-                                     * assuming equidistant
-                                     * off-points on the unit
-                                     * line. For all other
-                                     * dimensions, an overwritten
-                                     * function has to be provided.
-                                     *
-                                     * For higher order
-                                     * transformations than the
-                                     * common (bi-, tri-)linear one,
-                                     * information about the boundary
-                                     * is needed, rather than only
-                                     * the readily available
-                                     * information on the location of
-                                     * the vertices. If necessary, we
-                                     * therefore rely on the boundary
-                                     * object of which a pointer is
-                                     * stored by the triangulation.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
+                                     * Fill the fields of
+                                     * @ref{FEFaceValues}. This function
+                                     * performs all the operations
+                                     * needed to compute the data of an
+                                     * @p{FEFaceValues} object.
+                                     *
+                                     * The same function in
+                                     * @p{mapping} must have been
+                                     * called for the same cell first!
+                                     */                                      
+    virtual void
+    fill_fe_face_values (const Mapping<dim> &mapping,
+                        const DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int                    face_no,
+                        const Quadrature<dim-1>              &quadrature,
+                        Mapping<dim>::InternalDataBase      &mapping_internal,
+                        Mapping<dim>::InternalDataBase      &fe_internal,
+                        FEValuesData<dim> &data) const = 0;
     
                                     /**
-                                     * Compute the off-points of the
-                                     * finite element basis functions
-                                     * located on the face. It only
-                                     * returns the off-points of the
-                                     * trial functions which are
-                                     * located on the face, rather
-                                     * than of all basis functions,
-                                     * which is done by the
-                                     * @p{get_support_points}
-                                     * function.
-                                     *
-                                     * This function produces a
-                                     * subset of the information
-                                     * provided by the
-                                     * @p{fill_fe_face_values()}
-                                     * function.  However, you should
-                                     * not try to implement this
-                                     * function using the
-                                     * abovementioned function, since
-                                     * usually that function uses
-                                     * this function to compute
-                                     * information.
-                                     *
-                                     * The function is excluded from
-                                     * the abovementioned one, since
-                                     * no information about the
-                                     * neighboring cell is needed,
-                                     * such that loops over faces
-                                     * alone are possible when using
-                                     * this function.  This is useful
-                                     * for example if we want to
-                                     * interpolate boundary values to
-                                     * the finite element
-                                     * functions. If integration
-                                     * along faces is needed, we
-                                     * still need the
-                                     * @p{fill_fe_face_values}
-                                     * function.
-                                     *
-                                     * The function assumes that the
-                                     * @p{support_points} array
-                                     * already has the right
-                                     * size. The order of points in
-                                     * the array matches that
-                                     * returned by the
-                                     * @p{face->get_dof_indices}
-                                     * function.
-                                     *
-                                     * Since any implementation for
-                                     * one dimension would be
-                                     * senseless, all derived classes
-                                     * should throw an error when
-                                     * called with @p{dim==1}.
-                                     *
-                                     * Regarding information about
-                                     * the boundary, which is
-                                     * necessary for higher order
-                                     * transformations than the usual
-                                     * (bi-, tri-)linear ones, refer
-                                     * to the @p{get_support_points}
-                                     * function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const =0;
-
-                                    /**
-                                     * This is the second separated function
-                                     * described in the documentation of the
-                                     * @p{fill_fe_face_values} function. It
-                                     * returns the determinants of the
-                                     * transformation from the unit face to the
-                                     * real face at the
-                                     *
-                                     * Since any implementation for one
-                                     * dimension would be senseless, all
-                                     * derived classes should throw an error
-                                     * when called with @p{dim==1}.
-                                     *
-                                     * Regarding information about the
-                                     * boundary, which is necessary for
-                                     * higher order transformations than
-                                     * the usual (bi-, tri-)linear ones,
-                                     * refer to the @p{get_support_points}
-                                     * function.
-                                     */
-    virtual void get_face_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    std::vector<double>      &face_jacobi_determinants) const =0;
-
-                                    /**
-                                     * Does the same as the above
-                                     * function, except that it
-                                     * computes the Jacobi
-                                     * determinant of the
-                                     * transformation from the unit
-                                     * face to the subface of
-                                     * @p{face} with number
-                                     * @p{subface_no}.
-                                     *
-                                     * The function needs not take
-                                     * special care about boundary
-                                     * approximation, since it must
-                                     * not be called for faces at the
-                                     * boundary.
-                                     */
-    virtual void get_subface_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                       const unsigned int           subface_no,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       std::vector<double>      &face_jacobi_determinants) const =0;
-
-                                    /**
-                                     * Compute the normal vectors to
-                                     * the cell at the quadrature
-                                     * points. See the documentation
-                                     * for the
-                                     * @p{fill_fe_face_values}
-                                     * function for more details. The
-                                     * function must guarantee that
-                                     * the length of the vectors be
-                                     * one.
-                                     *
-                                     * Since any implementation for
-                                     * one dimension would be
-                                     * senseless, all derived classes
-                                     * should throw an error when
-                                     * called with @p{dim==1}.
-                                     *
-                                     * Regarding information about
-                                     * the boundary, which is
-                                     * necessary for higher order
-                                     * transformations than the usual
-                                     * (bi-, tri-)linear ones, refer
-                                     * to the @p{get_support_points}
-                                     * function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int                face_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const =0;
+                                     * Fill the fields of
+                                     * @ref{FESubfaceValues}. This function
+                                     * performs all the operations
+                                     * needed to compute the data of an
+                                     * @p{FESubfaceValues} object.
+                                     *
+                                     * The same function in
+                                     * @p{mapping} must have been
+                                     * called for the same cell first!
+                                     */                                      
+    virtual void
+    fill_fe_subface_values (const Mapping<dim> &mapping,
+                           const DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int                    face_no,
+                           const unsigned int                    sub_no,
+                           const Quadrature<dim-1>              &quadrature,
+                           typename Mapping<dim>::InternalDataBase      &mapping_internal,
+                           typename Mapping<dim>::InternalDataBase      &fe_internal,
+                           FEValuesData<dim> &data) const = 0;
 
-                                    /**
-                                     * Does the same as the above function,
-                                     * except that it refers to the
-                                     * subface @p{subface_no} of the given face.
-                                     *
-                                     * The function needs not take special care
-                                     * about boundary approximation, since it
-                                     * must not be called for faces at the
-                                     * boundary.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int           face_no,
-                                    const unsigned int           subface_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const =0;
 
-                                    /**
-                                     * Fill in the given matrix with
-                                     * the local mass matrix. The
-                                     * mass matrix must be exactly
-                                     * computed, not using a
-                                     * quadrature, which may be done
-                                     * using an equation object and
-                                     * an assembler, as is done for
-                                     * the Laplace matrix in the
-                                     * @p{MatrixTools} class for
-                                     * example.
-                                     *
-                                     * The exact integration is possible since
-                                     * an exact representation for the Jacobi
-                                     * determinant exists in all known cases of
-                                     * iso- or subparametric mappings. For
-                                     * example, usually the point in real
-                                     * space $\vec x$ referring to the point
-                                     * $\vec \xi$ on the unit cell is given
-                                     * by $\vec x = \sum_i \vec p_i \phi_i(\vec \xi)$,
-                                     * where the sum is over all basis functions
-                                     * $\phi_i$ and $\vec p_i$ are the points
-                                     * in real space where the basis function
-                                     * $\phi_i$ is located. The Jacobi
-                                     * determinant is the given by
-                                     * $|det J| = |\frac{\partial\vec x}{\partial\vec\xi}$,
-                                     * which can be evaluated in closed form.
-                                     * The mass matrix then is given by
-                                     * $m_{ij} = \int_{\hat K} \phi_i(\vec\xi)
-                                     * \phi_j(\vec\xi) |det J| d\xi$, where
-                                     * $\hat K$ is the unit cell. The integrand
-                                     * obviously is a polynom and can
-                                     * thus easily be integrated
-                                     * analytically, so the
-                                     * computation of the local mass
-                                     * matrix is reduced to the
-                                     * computation of a weighted
-                                     * evaluation of a polynom in the
-                                     * coordinates of the support
-                                     * points in real space (for
-                                     * linear mappings, these are the
-                                     * corner points, for quadratic
-                                     * mappings also the center of
-                                     * mass and the edge and face
-                                     * centers).  For example, in one
-                                     * space dimension, the Jacobi
-                                     * determinant simply is $h$, the
-                                     * size of the cell, and the
-                                     * integral over the two basis
-                                     * functions can easily be
-                                     * calculated with a pen and a
-                                     * sheet of paper. The actual
-                                     * computation on this matrix
-                                     * then is simply a scaling of a
-                                     * known and constant matrix by
-                                     * $h$.
-                                     *
-                                     * The functions which override
-                                     * this one may make assumptions
-                                     * on the sign of the determinant
-                                     * if stated in the
-                                     * documentation, but should
-                                     * check for them in debug
-                                     * mode. For that purpose, an
-                                     * exception with the longish
-                                     * name
-                                     * @p{ExcJacobiDeterminantHasWrongSign}
-                                     * is declared.
-                                     *
-                                     * The function takes a
-                                     * @ref{DoFHandler} iterator, which
-                                     * provides a superset of
-                                     * information to the geometrical
-                                     * information needed for the
-                                     * computations.  The additional
-                                     * data should not be used,
-                                     * however a @ref{DoFHandler}
-                                     * iterator was preferred over a
-                                     * @ref{Triangulation} iterator
-                                     * since this is what usually is
-                                     * available in places where this
-                                     * function is called.
-                                     *
-                                     * The cell matrix is assumed to
-                                     * be of the right size
-                                     * already. Functions of derived
-                                     * classes shall be implemented
-                                     * in a way as to overwrite the
-                                     * previous contents of the
-                                     * matrix, so it need not be
-                                     * necessary to clear the matrix
-                                     * before use with this function.
-                                     *
-                                     * Some finite elements,
-                                     * especially in higher
-                                     * dimensions, may choose not to
-                                     * implement this function
-                                     * because the computational
-                                     * effort is growing rapidly, for
-                                     * the in-time computation of the
-                                     * matrix as well as for the
-                                     * setting up using a script. For
-                                     * example, the size of the
-                                     * generated @p{C++} code for the
-                                     * local mass matrix in 3d is
-                                     * 4.383.656 bytes already for
-                                     * the trilinear element.  Higher
-                                     * order elements would produce
-                                     * even larger code.
-                                     *
-                                     * In the case of a finite
-                                     * element chosing not to
-                                     * implement the functionality of
-                                     * this function, that function
-                                     * is supposed to throw an
-                                     * exception of class
-                                     * @p{ExcComputationNotUseful}
-                                     * declared in this class; you
-                                     * can catch this exception and
-                                     * compute the mass matrix by
-                                     * quadrature instead. Finite
-                                     * element classes not
-                                     * implementing this function are
-                                     * assumed to state this in their
-                                     * documentation.
-                                     *
-                                     * Regarding information about
-                                     * the boundary, which is
-                                     * necessary for higher order
-                                     * transformations than the usual
-                                     * (bi-, tri-)linear ones, refer
-                                     * to the @p{get_support_points}
-                                     * function.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const =0;
+  public:
 
                                     /**
-                                     * Number of base elements in a
-                                     * mixed discretization. This
-                                     * function returns 1 for simple
-                                     * elements.
+                                     * Number of base elements in a mixed
+                                     * discretization. This function returns
+                                     * 1 for simple elements.
                                      */
     virtual unsigned int n_base_elements () const;
     
                                     /**
                                      * Access to base element
                                      * objects.  By default,
-                                     * @p{base_element(0)} is
-                                     * @p{this}.  This function is
-                                     * overloaded by system elements
-                                     * to allow access to the
-                                     * different components of mixed
+                                     * #base_element(0)# is #this#.
+                                     * This function is overloaded by
+                                     * system elements to allow
+                                     * access to the different
+                                     * components of mixed
                                      * discretizations.
                                      */
     virtual const FiniteElement<dim>& base_element (const unsigned int index) const;
     
                                     /**
-                                     * Exception
+                                     * Determine an estimate for the
+                                     * memory consumption (in bytes)
+                                     * of this object.
+                                     *
+                                     * This function is made virtual,
+                                     * since finite element objects
+                                     * are usually accessed through
+                                     * pointers to their base class,
+                                     * rather than the class itself.
                                      */
-    DeclException0 (ExcPureFunctionCalled);
+    virtual unsigned int memory_consumption () const;
+
                                     /**
                                      * Exception
                                      */
@@ -1842,171 +279,8 @@ class FiniteElement : public FiniteElementBase<dim>
                    << "The computation you required from this function is not "
                    << "feasible or not probable in the present dimension ("
                    << arg1 << ") because it would be prohibitively expensive.");
-};
 
-
-/* ------------------------------- Inline functions ----------------------- */
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_dofs_per_vertex () const
-{
-  return dofs_per_vertex;
 };
 
 
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_dofs_per_line () const
-{
-  return dofs_per_line;
-};
-
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_dofs_per_quad () const
-{
-  return dofs_per_quad;
-};
-
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_dofs_per_hex () const
-{
-  return dofs_per_hex;
-};
-
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_dofs_per_face () const
-{
-  return dofs_per_face;
-};
-
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_dofs_per_cell () const
-{
-  return dofs_per_cell;
-};
-
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_components () const
-{
-  return components;
-};
-
-
-
-template <int dim>
-inline
-unsigned int 
-FiniteElementData<dim>::n_transform_functions () const
-{
-  return transform_functions;
-};
-
-
-
-template <int dim>
-inline
-unsigned int
-FiniteElementBase<dim>::component_to_system_index (unsigned int component,
-                                                  unsigned int component_index) const
-{
-  Assert(component<n_components(),
-        ExcIndexRange(component, 0, n_components()));
-  Assert(component_index<component_to_system_table[component].size(),
-        ExcIndexRange(component_index, 0,
-                      component_to_system_table[component].size()));
-  return component_to_system_table[component][component_index];
-}
-
-
-
-template <int dim>  
-inline
-std::pair<unsigned int,unsigned int>
-FiniteElementBase<dim>::system_to_component_index (unsigned int index) const
-{
-  Assert(index < system_to_component_table.size(),
-        ExcIndexRange(index, 0, system_to_component_table.size()));
-  return system_to_component_table[index];
-}
-
-
-
-template <int dim>
-inline
-unsigned int
-FiniteElementBase<dim>::face_component_to_system_index (unsigned int component,
-                                                       unsigned int component_index) const
-{
-  Assert(component<n_components(),
-        ExcIndexRange(component, 0, n_components()));
-  Assert(component_index<face_component_to_system_table[component].size(),
-        ExcIndexRange(component_index, 0,
-                      face_component_to_system_table[component].size()));
-  return face_component_to_system_table[component][component_index];
-}
-
-
-
-template <int dim>  
-inline
-std::pair<unsigned int,unsigned int>
-FiniteElementBase<dim>::face_system_to_component_index (unsigned int index) const
-{
-  Assert(index < face_system_to_component_table.size(),
-        ExcIndexRange(index, 0, face_system_to_component_table.size()));
-  return face_system_to_component_table[index];
-}
-
-
-
-template <int dim>  
-inline
-unsigned int
-FiniteElementBase<dim>::component_to_base (unsigned int index) const
-{
-  if (n_components() == 1)
-    return 0;
-  Assert(index < component_to_base_table.size(),
-        ExcIndexRange(index, 0, component_to_base_table.size()));
-  return component_to_base_table[index];
-}
-
-
-
-template <int dim>
-inline
-bool
-FiniteElementBase<dim>::restriction_is_additive (const unsigned int component) const
-{
-  Assert(component<n_components(),
-        ExcIndexRange(component, 0, n_components()));
-  return restriction_is_additive_flags[component];
-}
-
-
 #endif
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1b0ce3ea8f12aa9fc2d8dc6de206a2fa38ae2a22 100644 (file)
@@ -0,0 +1,881 @@
+//----------------------------  fe_base.h  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  fe_base.h  ---------------------------
+#ifndef __deal2__fe_base_h
+#define __deal2__fe_base_h
+
+#include <base/exceptions.h>
+#include <base/subscriptor.h>
+#include <base/point.h>
+#include <base/tensor.h>
+#include <grid/geometry_info.h>
+#include <lac/full_matrix.h>
+#include <fe/fe_update_flags.h>
+#include <fe/mapping.h>
+
+template<int dim> class FESystem;
+
+/**
+ * Dimension independent data for finite elements. See the derived
+ * class @ref{FiniteElementBase} class for information on its use. All
+ * its data are available to the implementation in a concrete finite
+ * element class.
+ *
+ * Remark on a change in implementation: it is now wrong to cast a
+ * pointer to @ref{FiniteElement} to a pointer to
+ * @p{FiniteElementData} and delete it. The virtual destructor has
+ * been moved up. In a later version, @p{FiniteElementData} and
+ * @ref{FiniteElementBase} should be private base classes of
+ * @ref{FiniteElement}.
+ *
+ * @author Wolfgang Bangerth, Guido Kanschat, 1998, 1999, 2000, 2001
+ */
+template<int dim>
+class FiniteElementData
+{
+  public:
+                                    /**
+                                     * Number of degrees of freedom on
+                                     * a vertex.
+                                     */
+    const unsigned int dofs_per_vertex;
+
+                                    /** Number of degrees of freedom
+                                     *  on a line.
+                                     */
+    const unsigned int dofs_per_line;
+
+                                    /** Number of degrees of freedom
+                                     *  on a quadrilateral.
+                                     */
+    const unsigned int dofs_per_quad;
+
+                                    /** Number of degrees of freedom
+                                     *  on a hexahedron.
+                                     */
+    const unsigned int dofs_per_hex;
+
+                                    /**
+                                     * First index of dof on a line.
+                                     */
+    const unsigned int first_line_index;
+    
+                                    /**
+                                     * First index of dof on a quad.
+                                     */
+    const unsigned int first_quad_index;
+    
+                                    /**
+                                     * First index of dof on a hexahedron.
+                                     */
+    const unsigned int first_hex_index;
+    
+                                    /**
+                                     * First index of dof on a line for face data.
+                                     */
+    const unsigned int first_face_line_index;
+    
+                                    /**
+                                     * First index of dof on a quad for face data.
+                                     */
+    const unsigned int first_face_quad_index;
+
+                                    /**
+                                     * Number of degrees of freedom on a
+                                     * face. This information is
+                                     * redundant to some fields in the
+                                     * derived classes but makes
+                                     * writing dimension independant
+                                     * programs easier.
+                                     */
+    const unsigned int dofs_per_face;
+    
+                                    /**
+                                     * Total number of degrees of freedom
+                                     * on a cell. This information is
+                                     * redundant to some fields in the
+                                     * derived classes but makes
+                                     * writing dimension independant
+                                     * programs easier.
+                                     */
+    const unsigned int dofs_per_cell;
+
+                                    /**
+                                     * Number of components and dimension of
+                                     * the image space.
+                                     */
+    const unsigned int components;
+
+                                    /**
+                                     * Default constructor. Constructs
+                                     * an element
+                                     * which is not so useful. Checking
+                                     * @p{dofs_per_cell} is therefore a good way to
+                                     * check if something went wrong. 
+                                     */
+    FiniteElementData ();
+
+                                    /**
+                                     * Constructor for
+                                     * all-dimensional objects. The
+                                     * numbers in @p{dofs_per_object}
+                                     * represent the numbers of DoFs
+                                     * of grid objects in
+                                     * dim-ascending order. That is,
+                                     * @p{dofs_per_object[0]=dofs_per_vertex},
+                                     * @p{dofs_per_object[1]=dofs_per_line},
+                                     * @p{dofs_per_object[2]=dofs_per_quad},
+                                     * @p{dofs_per_object[3]=dofs_per_hex}.
+                                     *
+                                     * Hence this constructor requires
+                                     * @p{dofs_per_object.size()==dim+1}.
+                                     */
+    FiniteElementData (const std::vector<unsigned int> &dofs_per_object,
+                      const unsigned int n_components);
+
+                                    /**
+                                     * Return the #dofs_per_vertex#.
+                                     */
+    unsigned int n_dofs_per_vertex () const;
+
+                                    /**
+                                     * Return the #dofs_per_line#.
+                                     */
+    unsigned int n_dofs_per_line () const;
+
+                                    /**
+                                     * Return the #dofs_per_quad#.
+                                     */
+    unsigned int n_dofs_per_quad () const;
+
+                                    /**
+                                     * Return the #dofs_per_hex#.
+                                     */
+    unsigned int n_dofs_per_hex () const;
+
+                                    /**
+                                     * Return the #dofs_per_face#.
+                                     */
+    unsigned int n_dofs_per_face () const;
+
+                                    /**
+                                     * Return the #dofs_per_cell#.
+                                     */
+    unsigned int n_dofs_per_cell () const;
+
+                                    /**
+                                     * Return the #components#.
+                                     */
+    unsigned int n_components () const;
+
+                                    /**
+                                     * Comparison operator. It is not clear to
+                                     * me (WB) why we have to declare and implement
+                                     * this one explicitely.
+                                     */
+    bool operator == (const FiniteElementData<dim> &) const;
+
+                                    /**
+                                     * Exception
+                                     */
+    DeclException2 (ExcDimensionMismatch, int, int,
+                   << "used " << arg1 << "-d constructor for " << arg2 << "-d object");
+};
+
+
+/**
+ * Base class for finite elements in arbitrary dimensions. This class
+ * provides several fields which describe a specific finite element
+ * and which are filled by derived classes. It more or less only
+ * offers the fields and access functions which makes it possible to
+ * copy finite elements without knowledge of the actual type (linear,
+ * quadratic, etc).
+ *
+ * The implementation of this base class is split into two parts:
+ * those fields which are not common to all dimensions
+ * (#dofs_per_quad# for example are only useful for #dim>=2#) are put
+ * into the #FiniteElementData<dim># class which is explicitely
+ * specialized for all used dimensions, while those fields which may
+ * be formulated in a dimension-independent way are put into the
+ * present class.
+ *
+ * The different matrices are initialized with the correct size, such
+ * that in the derived (concrete) finite element classes, their
+ * entries only have to be filled in; no resizing is needed. If the
+ * matrices are not defined by a concrete finite element, they should
+ * be resized to zero. This way functions using them can find out,
+ * that they are missing. On the other hand, it is possible to use
+ * finite element classes without implementation of the full
+ * functionality, if only part of it is needed. The functionality
+ * under consideration here is hanging nodes constraints and grid
+ * transfer, respectively.
+ *
+ *
+ * \subsection{Finite elements in one dimension}
+ *
+ * Finite elements in one dimension need only set the #restriction#
+ * and #prolongation# matrices. The constructor of this class in one
+ * dimension presets the #interface_constraints# matrix to have
+ * dimension zero. Changing this behaviour in derived classes is
+ * generally not a reasonable idea and you risk getting into trouble.
+ * 
+ * \subsection{Finite elements in two dimensions}
+ * 
+ * In addition to the fields already present in 1D, a constraint
+ * matrix is needed, if the finite element has node values located on
+ * edges or vertices. These constraints are represented by a $m\times
+ * n$-matrix #interface_constraints#, where $n$ is the number of
+ * degrees of freedom on the refined side without the corner vertices
+ * (those dofs on the middle vertex plus those on the two lines), and
+ * $m$ is that of the unrefined side (those dofs on the two vertices
+ * plus those on the line). The matrix is thus a rectangular one.
+ *
+ * The mapping of the dofs onto the indices of the matrix on the
+ * unrefined side is as follows: let $d_v$ be the number of dofs on a
+ * vertex, $d_l$ that on a line, then $m=0...d_v-1$ refers to the dofs
+ * on vertex zero of the unrefined line, $m=d_v...2d_v-1$ to those on
+ * vertex one, $m=2d_v...2d_v+d_l-1$ to those on the line.
+ *
+ * Similarly, $n=0...d_v-1$ refers to the dofs on the middle vertex of
+ * the refined side (vertex one of child line zero, vertex zero of
+ * child line one), $n=d_v...d_v+d_l-1$ refers to the dofs on child
+ * line zero, $n=d_v+d_l...d_v+2d_l-1$ refers to the dofs on child
+ * line one.  Please note that we do not need to reserve space for the
+ * dofs on the end vertices of the refined lines, since these must be
+ * mapped one-to-one to the appropriate dofs of the vertices of the
+ * unrefined line.
+ *
+ * It should be noted that it is not possible to distribute a constrained
+ * degree of freedom to other degrees of freedom which are themselves
+ * constrained. Only one level of indirection is allowed. It is not known
+ * at the time of this writing whether this is a constraint itself.
+ *
+ * \subsection{Finite elements in three dimensions}
+ *
+ * For the interface constraints, almost the same holds as for the 2D case.
+ * The numbering for the indices $m$ on the mother face is obvious and keeps
+ * to the usual numbering of degrees of freedom on quadrilaterals.
+ *
+ * The numbering of the degrees of freedom on the interior of the refined
+ * faces for the index $n$ is as follows: let $d_v$ and $d_l$ be as above,
+ * and $d_q$ be the number of degrees of freedom per quadrilateral (and
+ * therefore per face), then $n=0...d_v-1$ denote the dofs on the vertex at
+ * the center, $n=d_v...5d_v-1$ for the dofs on the vertices at the center
+ * of the bounding lines of the quadrilateral,
+ * $n=5d_v..5d_v+4*d_l-1$ are for the degrees of freedom on
+ * the four lines connecting the center vertex to the outer boundary of the
+ * mother face, $n=5d_v+4*d_l...5d_v+4*d_l+8*d_l-1$ for the degrees of freedom
+ * on the small lines surrounding the quad,
+ * and $n=5d_v+12*d_l...5d_v+12*d_l+4*d_q-1$ for the dofs on the
+ * four child faces. Note the direction of the lines at the boundary of the
+ * quads, as shown below.
+ *
+ * The order of the twelve lines and the four child faces can be extracted
+ * from the following sketch, where the overall order of the different
+ * dof groups is depicted:
+ * \begin{verbatim}
+ *    *--13--3--14--*
+ *    |      |      |
+ *    16 20  7  19  12
+ *    |      |      |
+ *    4--8---0--6---2
+ *    |      |      |
+ *    15 17  5  18  11
+ *    |      |      |
+ *    *--9---1--10--*
+ * \end{verbatim}
+ * The numbering of vertices and lines, as well as the numbering of
+ * children within a line is consistent with the one described in
+ * @ref{Triangulation}. Therefore, this numbering is seen from the
+ * outside and inside, respectively, depending on the face.
+ *
+ * If of the cells adjacent to one line more than one is refined and
+ * there is at least one unrefined cell, then the degrees of freedom
+ * on the refined line are constrained from two cells. For example,
+ * consider the cell behind the face shown above is refined, while the
+ * one in front of the face is not refined; then the dofs on the lines
+ * numbered 9 and 10 are constrained. If there are two more cells
+ * below the ones just introduced, with a common face right below the
+ * one shown, and of these is one refined and one unrefined one, then
+ * the degrees on the two mentioned small lines are constrained a
+ * second time. Since these constraints must be unique, it follows
+ * that the constraints for the degrees of freedom on refined lines
+ * may only be in terms of the degrees of freedom on the unrefined
+ * line, not in terms of the other degrees of freedom on a face.
+ *
+ * Since the handling of constraints on degrees of freedom is mostly done
+ * by the #ConstraintMatrix# class, this class checks whether the constraints
+ * introduced from the two sides are unique; it is able to handle the fact
+ * that the constraints for some of the dofs are entered more than once.
+ *
+ * @author Wolfgang Bangerth, 1998, Guido Kanschat, 2001
+ */
+template <int dim>
+class FiniteElementBase : public Subscriptor,
+                         public FiniteElementData<dim>
+{
+  public:
+                                  /**
+                                   * Basis class for internal data.
+                                   * Adds data for second derivatives to
+                                   * @ref{Mapping::InternalDataBase}
+                                   *
+                                   * @author Guido Kanschat, 2001
+                                   */
+  class InternalDataBase : public Mapping<dim>::InternalDataBase
+    {
+      public:
+                                      /**
+                                       * Initialize @ref{FEValues}
+                                       * pointers for given element.
+                                       */
+      void initialize (const FiniteElement<dim>* element,
+                      const Mapping<dim>& mapping,
+                      const Quadrature<dim>& quadrature);
+      
+                                      /**
+                                       * Destructor. Needed to avoid
+                                       * memory leaks with difference
+                                       * quotients.
+                                       */
+      ~InternalDataBase ();
+
+                                      /**
+                                       * Storage for @p{FEValues}
+                                       * objects needed to
+                                       * approximate second
+                                       * derivatives.
+                                       *
+                                       * The ordering is @p{p+hx},
+                                       * @p{p+hy}, @p{p+hz},
+                                       * @p{p-hx}, @p{p-hy},
+                                       * @p{p-hz}, where unused
+                                       * entries in lower dimensions
+                                       * are missing.
+                                       */
+      std::vector<FEValues<dim>*> differences;
+
+
+    };
+  
+                                    /**
+                                     * Construct an object of this type.
+                                     * You have to set the
+                                     * matrices explicitely after calling
+                                     * this base class' constructor.
+                                     */
+    FiniteElementBase (const FiniteElementData<dim> &fe_data,
+                      const std::vector<bool> &restriction_is_additive_flags);
+    
+                                     /**
+                                     * Compute second differences.
+                                     */
+    void compute_2nd (const Mapping<dim> &mapping,
+                     const DoFHandler<dim>::cell_iterator &cell,
+                     const unsigned int offset,
+                     typename Mapping<dim>::InternalDataBase &mapping_internal,
+                     InternalDataBase& fe_internal,
+                     FEValuesData<dim>& data) const;
+
+                                    /**
+                                     * Projection from a fine grid
+                                     * space onto a coarse grid
+                                     * space. If this projection
+                                     * operator is associated with a
+                                     * matrix @p{P}, then the
+                                     * restriction of this matrix
+                                     * @p{P_i} to a single child cell
+                                     * is returned here.
+                                     *
+                                     * The matrix @p{P} is the
+                                     * concatenation or the sum of
+                                     * the cell matrices @p{P_i},
+                                     * depending on the
+                                     * @p{restriction_is_additive_flags}
+                                     * given to the constructor. This
+                                     * distinguishes interpolation
+                                     * (concatenation) and projection
+                                     * with respect to scalar
+                                     * products (summation).
+                                     *
+                                     * Row and column indices are
+                                     * related to coarse grid and
+                                     * fine grid spaces,
+                                     * respectively, consistent with
+                                     * the definition of the
+                                     * associated operator.
+                                     *
+                                     * If projection matrices are not
+                                     * implemented in the derived
+                                     * finite element class, this
+                                     * function aborts with
+                                     * @p{ExcProjectionVoid}.
+                                     */
+    const FullMatrix<double> & restrict (const unsigned int child) const;
+
+                                    /**
+                                     * Embedding matrix between grids.
+                                     * 
+                                     * The identity operator from a
+                                     * coarse grid space into a fine
+                                     * grid space is associated with
+                                     * a matrix @p{P}. The
+                                     * restriction of this matrix @p{P_i} to
+                                     * a single child cell is
+                                     * returned here.
+                                     *
+                                     * The matrix @p{P} is the
+                                     * concatenation, not the sum of
+                                     * the cell matrices
+                                     * @p{P_i}. That is, if the same
+                                     * non-zero entry @p{j,k} exists
+                                     * in in two different child
+                                     * matrices @p{P_i}, the value
+                                     * should be the same in both
+                                     * matrices and it is copied into
+                                     * the matrix @p{P} only once.
+                                     *
+                                     * Row and column indices are
+                                     * related to fine grid and
+                                     * coarse grid spaces,
+                                     * respectively, consistent with
+                                     * the definition of the
+                                     * associated operator.
+                                     *
+                                     * These matrices are used by
+                                     * routines assembling the
+                                     * prolongation matrix for
+                                     * multi-level methods.  Upon
+                                     * assembling the transfer matrix
+                                     * between cells using this
+                                     * matrix array, zero elements in
+                                     * the prolongation matrix are
+                                     * discarded and will not fill up
+                                     * the transfer matrix.
+                                     *
+                                     * If projection matrices are not
+                                     * implemented in the derived
+                                     * finite element class, this
+                                     * function aborts with
+                                     * @p{ExcEmbeddingVoid}.
+                                     */
+    const FullMatrix<double> & prolongate (const unsigned int child) const;
+
+                                    /**
+                                     * Return a readonly reference to the
+                                     * matrix which describes the constraints
+                                     * at the interface between a refined and
+                                     * an unrefined cell.
+                                     *
+                                     * The matrix is obviously empty in only
+                                     * one space dimension, since there are no
+                                     * constraints then.
+                                     */
+    const FullMatrix<double> & constraints () const;
+
+                                    /**
+                                     * Comparison operator. We also check for
+                                     * equality of the constraint matrix,
+                                     * which is quite an expensive operation.
+                                     * Do therefore
+                                     * use this function with care, if possible
+                                     * only for debugging purposes.
+                                     *
+                                     * Since this function is not that important,
+                                     * we avoid an implementational question
+                                     * about comparing arrays and do not compare
+                                     * the matrix arrays @p{restriction} and
+                                     * @p{prolongation}.
+                                     */
+    bool operator == (const FiniteElementBase<dim> &) const;
+
+                                    /**
+                                     * Compute system index from components.
+                                     */
+    unsigned int component_to_system_index (unsigned int component,
+                                           unsigned int component_index) const;
+  
+                                    /**
+                                     * Compute component and index from
+                                     * system index.
+                                     *
+                                     * Return value contains first
+                                     * component and second index in
+                                     * component.
+                                     */
+    std::pair<unsigned int,unsigned int>
+    system_to_component_index (unsigned int index) const; 
+    
+                                    /**
+                                     * Compute system index from components on a face.
+                                     */
+    unsigned int face_component_to_system_index (unsigned int component,
+                                                unsigned int component_index) const;
+  
+                                    /**
+                                     * Compute component and index from system
+                                     * index for a face.
+                                     *
+                                     * Return value contains first
+                                     * component and second index in
+                                     * component.
+                                     */
+    std::pair<unsigned int,unsigned int>
+    face_system_to_component_index (unsigned int index) const;
+    
+                                    /**
+                                     * The base element establishing a
+                                     * component.
+                                     *
+                                     * This table converts a
+                                     * component number to the
+                                     * @p{base_element} number. While
+                                     * component information contains
+                                     * multiplicity of base elements,
+                                     * the result allows access to
+                                     * shape functions of the base
+                                     * element.
+                                     */
+    unsigned int component_to_base(unsigned int index) const;
+
+                                    /**
+                                     * Access the @p{restriction_is_additive_flag}
+                                     * field. See there for more information on 
+                                     * its contents.
+                                     */
+    bool restriction_is_additive (const unsigned int component) const;
+
+                                    /**
+                                     * Determine an estimate for the
+                                     * memory consumption (in bytes)
+                                     * of this object.
+                                     *
+                                     * This function is not
+                                     * virtual. Use a
+                                     * @ref{FiniteElement} object to
+                                     * get the actual size of a
+                                     * concrete element.
+                                     */
+    unsigned int memory_consumption () const;
+
+                                    /**
+                                     * Exception
+                                     */
+    DeclException0 (ExcEmbeddingVoid);
+    
+                                    /**
+                                     * Exception
+                                     */
+    DeclException0 (ExcProjectionVoid);
+    
+                                    /**
+                                     * Exception
+                                     */
+    DeclException0 (ExcConstraintsVoid);
+    
+                                    /**
+                                     * Exception
+                                     */
+    DeclException2 (ExcWrongInterfaceMatrixSize,
+                   int, int,
+                   << "The interface matrix has a size of " << arg1
+                   << "x" << arg2
+                   << ", which is not reasonable in the present dimension.");
+    
+  protected:  
+                                    /**
+                                     * Array of projection
+                                     * matrices. See @p{restrict()}
+                                     * above.
+                                     *
+                                     * Matrices in this array are
+                                     * automatically initialized to
+                                     * correct size. If the derived
+                                     * finite element class does not
+                                     * implement these matrices, they
+                                     * should be resized to zero
+                                     * size.
+                                     */
+#if !((__GNUC__==2) && (__GNUC_MINOR__==95))
+    FullMatrix<double> restriction[GeometryInfo<dim>::children_per_cell];
+#else
+    FullMatrix<double> restriction[1 << dim];
+#endif
+
+                                    /**
+                                     * Array of embedding
+                                     * matrices. See @p{prolongate()}
+                                     * above.
+                                     *
+                                     * Matrices in this array are
+                                     * automatically initialized to
+                                     * correct size. If the derived
+                                     * finite element class does not
+                                     * implement these matrices, they
+                                     * should be resized to zero
+                                     * size.
+                                     */
+#if ! ((__GNUC__==2) && (__GNUC_MINOR__==95))
+    FullMatrix<double> prolongation[GeometryInfo<dim>::children_per_cell];
+#else
+    FullMatrix<double> prolongation[1 << dim];
+#endif
+                                    /**
+                                     * Specify the constraints which
+                                     * the dofs on the two sides of a
+                                     * cell interface underly if the
+                                     * line connects two cells of
+                                     * which one is refined once.
+                                     *
+                                     * For further details see the
+                                     * general description of the
+                                     * derived class.
+                                     *
+                                     * This field is obviously
+                                     * useless in one space dimension
+                                     * and has there a zero size.
+                                     */
+    FullMatrix<double> interface_constraints;
+
+                                    /**
+                                     * Map between linear dofs and
+                                     * component dofs.
+                                     */
+    std::vector< std::pair<unsigned int, unsigned int> > system_to_component_table;
+
+                                    /**
+                                     * Map between linear dofs and
+                                     * component dofs on face.
+                                     */
+    std::vector< std::pair<unsigned int, unsigned int> > face_system_to_component_table;
+
+                                    /**
+                                     * Map between component and
+                                     * linear dofs.
+                                     */
+    std::vector< std::vector<unsigned int> > component_to_system_table;
+
+                                    /**
+                                     * Map between component and
+                                     * linear dofs on a face.
+                                     */
+    std::vector< std::vector<unsigned int> > face_component_to_system_table;
+    
+                                    /**
+                                     * The base element establishing
+                                     * a component.
+                                     *
+                                     * This table converts a
+                                     * component number to the
+                                     * @p{base_element} number. While
+                                     * component information contains
+                                     * multiplicity of base elements,
+                                     * the result allows access to
+                                     * shape functions of the base
+                                     * element.
+                                     */
+    std::vector<unsigned int> component_to_base_table;
+
+                                    /**
+                                     * Projection matrices are
+                                     * concatenated or summed up.
+                                     *
+                                     * This flags decides on how the
+                                     * projection matrices of the
+                                     * children of the same father
+                                     * are put together to one
+                                     * operator. The possible modes
+                                     * are concatenation and
+                                     * summation.
+                                     *
+                                     * If the projection is defined
+                                     * by an interpolation operator,
+                                     * the child matrices are
+                                     * concatenated, i.e. values
+                                     * belonging to the same node
+                                     * functional are identified and
+                                     * enter the interpolated value
+                                     * only once. In this case, the
+                                     * flag must be @p{false}.
+                                     *
+                                     * For projections with respect
+                                     * to scalar products, the child
+                                     * matrices must be summed up to
+                                     * build the complete matrix. The
+                                     * flag should be @p{true}.
+                                     *
+                                     * There is one flag per
+                                     * component in vector valued
+                                     * elements.
+                                     */
+    const std::vector<bool> restriction_is_additive_flags;
+
+                                    /**
+                                     * Allow the FESystem class to
+                                     * access the restriction and
+                                     * prolongation matrices
+                                     * directly. Hence, FESystem has
+                                     * the possibility to see if
+                                     * these matrices are initialized
+                                     * without accessing these
+                                     * matrices through the
+                                     * @p{restrict} and
+                                     * @p{prolongate} functions. This
+                                     * is important as these
+                                     * functions include assertions
+                                     * that throw if the matrices are
+                                     * not already initialized.
+                                     */
+    friend class FESystem<dim>;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_dofs_per_vertex () const
+{
+  return dofs_per_vertex;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_dofs_per_line () const
+{
+  return dofs_per_line;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_dofs_per_quad () const
+{
+  return dofs_per_quad;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_dofs_per_hex () const
+{
+  return dofs_per_hex;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_dofs_per_face () const
+{
+  return dofs_per_face;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_dofs_per_cell () const
+{
+  return dofs_per_cell;
+};
+
+
+template <int dim>
+inline
+unsigned int 
+FiniteElementData<dim>::n_components () const
+{
+  return components;
+};
+
+
+template <int dim>
+inline
+unsigned int
+FiniteElementBase<dim>::component_to_system_index (unsigned int component,
+                                                  unsigned int component_index) const
+{
+  Assert(component<n_components(),
+        ExcIndexRange(component, 0, n_components()));
+  Assert(component_index<component_to_system_table[component].size(),
+        ExcIndexRange(component_index, 0,
+                      component_to_system_table[component].size()));
+  return component_to_system_table[component][component_index];
+}
+
+
+template <int dim>  
+inline
+std::pair<unsigned int,unsigned int>
+FiniteElementBase<dim>::system_to_component_index (unsigned int index) const
+{
+  Assert(index < system_to_component_table.size(),
+        ExcIndexRange(index, 0, system_to_component_table.size()));
+  return system_to_component_table[index];
+}
+
+
+template <int dim>
+inline
+unsigned int
+FiniteElementBase<dim>::face_component_to_system_index (unsigned int component,
+                                                       unsigned int component_index) const
+{
+  Assert(component<n_components(),
+        ExcIndexRange(component, 0, n_components()));
+  Assert(component_index<face_component_to_system_table[component].size(),
+        ExcIndexRange(component_index, 0,
+                      face_component_to_system_table[component].size()));
+  return face_component_to_system_table[component][component_index];
+}
+
+
+template <int dim>  
+inline
+std::pair<unsigned int,unsigned int>
+FiniteElementBase<dim>::face_system_to_component_index (unsigned int index) const
+{
+  Assert(index < face_system_to_component_table.size(),
+        ExcIndexRange(index, 0, face_system_to_component_table.size()));
+  return face_system_to_component_table[index];
+}
+
+
+template <int dim>  
+inline
+unsigned int
+FiniteElementBase<dim>::component_to_base (unsigned int index) const
+{
+  if (n_components() == 1)
+    return 0;
+  Assert(index < component_to_base_table.size(),
+        ExcIndexRange(index, 0, component_to_base_table.size()));
+  return component_to_base_table[index];
+}
+
+
+template <int dim>
+inline
+bool
+FiniteElementBase<dim>::restriction_is_additive (const unsigned int component) const
+{
+  Assert(component<n_components(),
+        ExcIndexRange(component, 0, n_components()));
+  return restriction_is_additive_flags[component];
+}
+
+
+#endif
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2f4f473f129885f14640cfc79119e43d4222a7cc 100644 (file)
@@ -0,0 +1,259 @@
+//---------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//---------------------------------------------------------------
+#ifndef __deal2__fe_dgq_h
+#define __deal2__fe_dgq_h
+
+#include <base/polynomial.h>
+#include <fe/fe.h>
+
+template <int dim> class TensorProductPolynomials;
+template <int dim> class MappingQ;
+
+/**
+ * Discontinuous tensor product elements based on equidistant support points.
+ */
+template <int dim>
+class FE_DGQ : public FiniteElement<dim>
+{
+  public:
+                                    /**
+                                     * Constructor for tensor product
+                                     * polynomials of degree @p{k}.
+                                     */
+    FE_DGQ (unsigned int k);
+                                    /**
+                                     * Destructor.
+                                     */
+    ~FE_DGQ ();
+
+                                    /**
+                                     * Return the support points of the
+                                     * trial functions on the unit cell.
+                                     *
+                                     * The order of points in
+                                     * the array matches that returned by
+                                     * the #cell->get_dof_indices# function, but:
+                                     *
+                                     * If the shape functions are not
+                                     * Lagrangian interpolants at some
+                                     * points, the size of the array
+                                     * will be zero. This is the standard behavior,
+                                     * if the function is not overloaded.
+                                     */
+    virtual void get_unit_support_points (std::vector<Point<dim> > &) const;    
+    
+                                    /**
+                                     * Return the support points of
+                                     * the trial functions on the
+                                     * first face of the unit cell.
+                                     *
+                                     * The order of points in
+                                     * the array matches that returned by
+                                     * the #cell->get_dof_indices# function.
+                                     *
+                                     * If the shape functions are not
+                                     * Lagrangian interpolants at some
+                                     * points, the size of the array
+                                     * will be zero. This is the standard behavior,
+                                     * if the function is not overloaded.
+                                     */
+    virtual void get_unit_face_support_points (std::vector<Point<dim-1> > &) const;
+
+                                    /**
+                                     * Determine an estimate for the
+                                     * memory consumption (in bytes)
+                                     * of this object.
+                                     *
+                                     * This function is made virtual,
+                                     * since finite element objects
+                                     * are usually accessed through
+                                     * pointers to their base class,
+                                     * rather than the class itself.
+                                     */
+    virtual unsigned int memory_consumption () const;
+
+  protected:
+
+                                    /**
+                                     * @p{clone} function instead of
+                                     * a copy constructor.
+                                     *
+                                     * This function is needed by the
+                                     * constructors of @p{FESystem}.
+                                     */
+    virtual FiniteElement<dim> *clone() const;
+  
+                                    /**
+                                     * Prepare internal data
+                                     * structures and fill in values
+                                     * independent of the cell.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Mapping<dim>& mapping,
+             const Quadrature<dim>& quadrature) const ;
+
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_values (const Mapping<dim> &mapping,
+                   const DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>                &quadrature,
+                   Mapping<dim>::InternalDataBase      &mapping_internal,
+                   Mapping<dim>::InternalDataBase      &fe_internal,
+                   FEValuesData<dim>& data) const;
+    
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_face_values (const Mapping<dim> &mapping,
+                        const DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int                    face_no,
+                        const Quadrature<dim-1>                &quadrature,
+                        Mapping<dim>::InternalDataBase      &mapping_internal,
+                        Mapping<dim>::InternalDataBase      &fe_internal,
+                        FEValuesData<dim>& data) const ;
+    
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_subface_values (const Mapping<dim> &mapping,
+                           const DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int                    face_no,
+                           const unsigned int                    sub_no,
+                           const Quadrature<dim-1>                &quadrature,
+                           Mapping<dim>::InternalDataBase      &mapping_internal,
+                           Mapping<dim>::InternalDataBase      &fe_internal,
+                           FEValuesData<dim>& data) const ;
+
+  private:
+                                    /**
+                                     * Only for internal use. Its
+                                     * full name is
+                                     * @p{get_dofs_per_object_vector}
+                                     * function and it creates the
+                                     * @p{dofs_per_object} vector that is
+                                     * needed within the constructor to
+                                     * be passed to the constructor of
+                                     * @p{FiniteElementData}.
+                                     */
+    static std::vector<unsigned int> get_dpo_vector(unsigned int degree);
+    
+                                    /**
+                                     * Compute flags for initial update only.
+                                     */
+    virtual UpdateFlags update_once (UpdateFlags flags) const;
+  
+                                    /**
+                                     * Compute flags for update on each cell.
+                                     */
+    virtual UpdateFlags update_each (UpdateFlags flags) const;
+  
+                                    /**
+                                     * Compute support points, only
+                                     * for @p{degree>0}.
+                                     */
+    static void compute_support_points (std::vector<Point<dim> >& support_points,
+                                       unsigned int degree);
+
+                                    /**
+                                     * Compute renumbering for rotation
+                                     * of degrees of freedom.
+                                     */
+    void rotate_indices (std::vector<unsigned int>& indices,
+                        const char direction = 'y') const;
+  
+                                    /**
+                                     * Degree of the polynomials.
+                                     */  
+    const unsigned int degree;
+
+                                    /**
+                                     * Vector of one-dimensional
+                                     * polynomials used.
+                                     */
+    std::vector<Polynomial<double> > polynomials;
+
+                                    /**
+                                     * Implementation of the tensor
+                                     * product of polynomials.
+                                     */
+    TensorProductPolynomials<dim>* poly;
+
+                                    /**
+                                     * Fields of cell-independent data.
+                                     */
+    class InternalData : public FiniteElementBase<dim>::InternalDataBase
+    {
+      public:
+                                      /**
+                                       * Destructor. Needed to avoid
+                                       * memory leaks with difference
+                                       * quotients.
+                                       */
+      ~InternalData ();
+
+                                        /**
+                                         * Array with shape function values
+                                         * in quadrature points. There is one
+                                         * vector for each shape function, containing
+                                         * values for each quadrature point.
+                                         */
+       std::vector<std::vector<double> > shape_values;
+                                        /**
+                                         * Array with shape function gradients
+                                         * in quadrature points. There is one
+                                         * vector for each shape function, containing
+                                         * values for each quadrature point.
+                                         */                                  
+       std::vector<std::vector<Tensor<1,dim> > > shape_gradients;
+
+                                      /**
+                                       * Storage for @p{FEValues}
+                                       * objects needed to
+                                       * approximate second
+                                       * derivatives.
+                                       *
+                                       * The ordering is @p{p+hx},
+                                       * @p{p+hy}, @p{p+hz},
+                                       * @p{p-hx}, @p{p-hy},
+                                       * @p{p-hz}, where unused
+                                       * entries in lower dimensions
+                                       * are missing.
+                                       */
+      std::vector<FEValues<dim>*> differences;
+    };
+    
+                                    /**
+                                     * Allow access from other dimensions.
+                                     */
+    template <int dim1> friend class FE_DGQ;
+
+                                    /**
+                                     * Allows @p{MappingQ} class to
+                                     * access to build_renumbering
+                                     * function.
+                                     */
+    friend class MappingQ<dim>;
+};
+
+#endif
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
deleted file mode 100644 (file)
index f11c685..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-//----------------------------  fe_lib.criss_cross.h  ---------------------------
-//    Version: $Name$
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.criss_cross.h  ---------------------------
-#ifndef __deal2__fe_lib_criss_cross_h
-#define __deal2__fe_lib_criss_cross_h
-
-
-#include <fe/fe.h>
-#include <base/quadrature.h>
-#include <cmath>
-
-
-/**
- * This class implements a rather unusual macro element, the so-called
- * criss-cross element. Its purpose is mostly to demonstrate the absence
- * of superconvergence effects on triangular meshes where at each vertex
- * more or less than six elements meet, but never exactly six.
- *
- * The construction of the element is best explained in 2d. Consider a
- * quadrilateral with basis functions at each vertex and one at the
- * crossing-point of the two diagonals. The element is divided by the
- * diagonals into four triangles and assume that each vertex basis
- * function has support only on the two triangles adjacent to the
- * respective vertex and is constant zero on the other two triangles;
- * they are linear on each of the triangles and globally continuous.
- * The center basis function lives on each of the four triangles, is
- * linear on each triangles and vanishes at the faces of the quadrilateral.
- *
- * Now, on the unit element, these basis functions are the same as for
- * a triangular trial space, namely the class of ${\cal P}_1$ Lagrange
- * elements. Due to the arrangement of the four triangles on the
- * quadrilateral, it is clear that considering the whole triangulation
- * of the domain, always four triangles meet at the points which
- * correspond with the centers of the quadrilaterals and $2*s$ triangles
- * meet at the vertices of the quadrilaterals, if $s$ is the number of
- * quadrilaterals meeting there. Thus, in most cases the number of
- * triangles meeting are four or eight, which effectively destroys
- * superconvergence at nodes.
- *
- * This element is not quite equivalent from beginning to the linear
- * triangular elements. The reason for this is that if we use a bilinear
- * mapping of the unit quadrilateral to the real cell, the diagonals will
- * in general not be straight lines. Therefore, the shape functions will
- * in general not be linear on the real cell, unlike for the linear
- * triangular element, which uses a linear mapping. The missing linearity
- * makes assemblage of matrices a bit more complicated, since the gradient
- * is not constant and we need more than one quadrature point, as well
- * as some other subtle difficulties. This problem can, however, be cured
- * using a trick: the usual transformation from unit coordinates $\vec\xi$
- * to real coordinates $\vec x(\vec\xi)$ looks like
- * $$
- *   \vec x(\vec\xi) = \sum_{i=0}^3 \phi_i^L(\vec\xi) \vec x_i
- * $$
- * with $\phi_i^L$ being the bilinear basis functions associated with the
- * vertices and $\vec x_i$ being the coordinates of the vertices in real
- * space. Now, we could also choose
- * $$
- *   \vec x(\vec\xi) = \sum_{i=0}^4 \phi_i(\vec\xi) \vec x_i
- * $$
- * with the basis functions $\phi_i$ of this element, the four vertices
- * in real space $\vec x_0..\vec x_3$ and an interior point in real space
- * $\vec x_4$. We can choose the interior point quite arbitrarily and it
- * will become clear in a moment how we have to do so. First let us note
- * that because the vertex basis functions are linear on the faces,
- * because they vanish on the two faces not adjacent to the associated
- * vertex and because the center basis function vanishes at the four
- * faces, the four sides of the unit cell are mapped to straight lines
- * in real space, just like for the bilinear mapping.
- *
- * Now, to ensure that the mapping of each of the four triangles to the
- * real space is linear, we have to require that the two diagonals are
- * mapped to straight lines. One necessary condition for this is, that the
- * center point of the unit cell is mapped to the crossing point of the
- * two diagonals in real space. Therefore, we choose $\vec x_4$ to be
- * this point. Then we note, that because the vertex basis functions vanish
- * on the diagonal not through the vertex and are constant zero beyond that,
- * the mapping of the line from the center to a vertex is described entirely
- * by the basis function of that vertex and the center basis function; but
- * because they both are linear on that line, the line is also a straight
- * one in real space. This proves that by this construction of the mapping
- * between unit and real cell, the mapping of each of the four triangles
- * is linear (note that this does not hold for the whole element; the
- * mapping of the quadrilaterals is only piecewise linear and globally
- * continuous). It also proves that the trial space using this element
- * is equivalent to the trial space using triangles and linear elements.
- *
- * Since in one space dimension, this element equals two linear elements,
- * i.e. a linear ansatz on a mesh once more refined than the present one,
- * this element is not implemented for one dimension. There may be an
- * analogue to the criss-cross element in more than two space dimensions,
- * but it is not implemented at present.
- *
- * As stated above, the element is not really a good one. It may, however,
- * serve to study superconvergence effects and also to satisfy the author's
- * curiosity. At least for the first of these two reasons, it is better
- * suited than using a genuine triangulation of the domain (i.e. using real
- * triangles rather than subdividing quadrilaterals as shown above), since
- * the construction of triangulations with four or eight cells meeting at
- * each vertex is certainly not feasible other than by hand, while the
- * decomposition of a domain using quadrilaterals is easier.
- *
- *
- * @sect2{Hanging nodes}
- *
- * Hanging nodes are handled exactly like for any other element. It should
- * however be noted that the support of basis functions get quite
- * complicated in the presence of hanging nodes, as the following figure
- * depicts:
- * @begin{verbatim}
- *   *-----------------*--------*----
- *   |                /|\       |
- *   |              /..|.\      |
- *   |            /....|...\    |
- *   |          /......|.....\  |
- *   |         /.......|.......\|
- *   |       /.........*--------*----
- *   |      /..........|......./|
- *   |    /............|....../ |
- *   |   /.............|..../   |
- *   | /...............|.....\  |
- *   |/................|.......\|
- *   *-----------------o--------*-----
- * @end{verbatim}
- * The dotted area is the support of the basis function associated with the
- * bottom middle vertex (denoted by @p{o}) after the hanging node in the center
- * of the `picture' was eliminated. This strange structure of the support
- * should not pose too many problems in practice, it is only note here for
- * completeness and for curiosity.
- *
- *
- * @sect2{Experience with the criss-cross element}
- *
- * Experience is that the error for the criss cross element shows
- * the same convergence rate as the linear Lagrange element ($h^2$ for the
- * $L^2$ error, $h$ for the $H^1$ error). The $L^2$ error is about the same
- * size for the same number of elements as for the linear element; since
- * the criss-cross elements has about twice as many degrees of freedom as
- * the linear element for the same triangulation, the $L^2$ error really
- * is about twice as large as a function of the number of degrees of freedom.
- *
- * Converse to that, the $H^1$ error is about a factor of 1.2 smaller for
- * the same number of degrees of freedoms.
- *
- * Apart from all this data, it must not be forgotten that we cannot
- * expect superconvergence neither in the Gauss points nor in the vertices.
- * Thus we may improve the accuracy of the solution obtained with the linear
- * element by a postprocess, while we can't do so for the criss-cross element.
- *
- * All given data refer to a Poisson equation with nonhomogeneous boundary
- * values on the unit disk (resp. a triangulation of that) and hanging nodes.
- *
- *
- * @sect2{Using quadrature formulae for this element}
- *
- * When using one of the usual quadrature formulae, a common problem is
- * that some of the quadrature points lie on the interfaces of the
- * triangles. For this reason, there is a family of quadrature formulae
- * defined below, names @ref{QCrissCross1} and higher order, which
- * resemble the quadrature formulae used on triangular domains, but
- * taken four-fold, i.e. for each of the four subtriangles.
- *
- *
- * @author Wolfgang Bangerth, 1998
- */
-template <int dim>
-class FECrissCross : public FiniteElement<dim> 
-{
-  public:
-                                    /**
-                                     * Constructor
-                                     */
-    FECrissCross ();
-    
-                                    /**
-                                     * Transforms the point @p{p} on
-                                     * the unit cell to the point
-                                     * @p{p_real} on the real cell
-                                     * @p{cell} and returns @p{p_real}.
-                                     */
-    virtual Point<dim> transform_unit_to_real_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                   const Point<dim> &p) const;
-    
-                                    /**
-                                     * Transforms the point @p{p} on
-                                     * the real cell to the point
-                                     * @p{p_unit} on the unit cell
-                                     * @p{cell} and returns @p{p_unit}.
-                                     */
-    virtual Point<dim> transform_real_to_unit_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                   const Point<dim> &p) const;
-
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{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;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     * Here, the (bi-)linear basis functions
-                                     * are meant, which are used for the
-                                     * computation of the transformation from
-                                     * unit cell to real space cell.
-                                     */
-    virtual double shape_value_transform (const unsigned int i,
-                                         const Point<dim> &p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     * Here, the (bi-)linear basis functions
-                                     * are meant, which are used for the
-                                     * computation of the transformation from
-                                     * unit cell to real space cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad_transform (const unsigned int i,
-                                               const Point<dim> &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * In two spatial dimensions, this function
-                                     * simply returns the length of the face.
-                                     */
-    virtual void get_face_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<double>      &face_jacobi_determinants) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * In two spatial dimensions, this function
-                                     * simply returns half the length of the
-                                     * whole face.
-                                     */
-    virtual void get_subface_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                       const unsigned int           subface_no,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       typename std::vector<double>      &face_jacobi_determinants) const;
-
-                                    /**
-                                     * Return the normal vectors to the
-                                     * face with number @p{face_no} of @p{cell}.
-                                     *
-                                     * For linear finite elements, this function
-                                     * is particularly simple since all normal
-                                     * vectors are equal and can easiliy be
-                                     * computed from the direction of the face
-                                     * without using the transformation (Jacobi)
-                                     * matrix, at least for two dimensions.
-                                     *
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int          face_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const;
-
-                                    /**
-                                     * Return the normal vectors to the
-                                     * subface with number @p{subface_no} of
-                                     * the face with number @p{face_no} of @p{cell}.
-                                     *
-                                     * For linear finite elements, this function
-                                     * is particularly simple since all normal
-                                     * vectors are equal and can easiliy be
-                                     * computed from the direction of the face
-                                     * without using the transformation (Jacobi)
-                                     * matrix, at least for two dimensions.
-                                     *
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int           face_no,
-                                    const unsigned int           subface_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const;    
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * For one dimensional elements, this
-                                     * function simply passes through to
-                                     * the one implemented in the base class.
-                                     * For higher dimensional finite elements
-                                     * we use multilinear mappings.
-                                     */
-    virtual void fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                const typename std::vector<Point<dim> >            &unit_points,
-                                typename std::vector<Tensor<2,dim> >               &jacobians,
-                                const bool              compute_jacobians,
-                                typename std::vector<Tensor<3,dim> > &jacobians_grad,
-                                const bool              compute_jacobians_grad,
-                                typename std::vector<Point<dim> >    &support_points,
-                                const bool              compute_support_points,
-                                typename std::vector<Point<dim> >    &q_points,
-                                const bool              compute_q_points,
-                                const FullMatrix<double>         &shape_values_transform,
-                                const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grad_transform) const;
-
-    DeclException0 (ExcNotUseful);
-};
-
-
-
-/**
- * Quadrature formula for the criss-cross element. This quadrature
- * formula uses one point at the barycenter of each of the four subtriangles.
- *
- * For the same reason as for the criss-cross element itself, this
- * formula is not implemented for one space dimension.
- */
-template <int dim>
-class QCrissCross1 : public Quadrature<dim> 
-{
-  public:
-    QCrissCross1 ();
-
-    DeclException0 (ExcNotUseful);
-};
-
-
-#endif
index 2a6178213661a5bf0e3721f2c38c3b27cbe1aaae..44403ed0aac37aa7243241131e4feb7935d60657 100644 (file)
-//----------------------------  fe_lib.dg.h  ---------------------------
+//---------------------------------------------------------------
+//    $Id$
 //    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 //    to the file deal.II/doc/license.html for the  text  and
 //    further information on this license.
 //
-//----------------------------  fe_lib.dg.h  ---------------------------
+//---------------------------------------------------------------
 #ifndef __deal2__fe_lib_dg_h
 #define __deal2__fe_lib_dg_h
 
 
-#include <fe/fe_lib.lagrange.h>
+#include<fe/fe_dgq.h>
 
-#define FEDGConstant FEDG_Q0
-#define FEDGLinear FEDG_Q1
-#define FEDGQuadraticSub FEDG_Q2
-#define FEDGCubicSub FEDG_Q3
-#define FEDGQuarticSub FEDG_Q4
 
-/**
- * Define a constant discontinuous finite element in @p{dim}
- * space dimensions, along with (bi-, tri-)linear
- * transforms from the unit cell to the real cell.
- * @author Ralf Hartmann, 1998
- */
-template <int dim>
-class FEDG_Q0 : public FEQ1Mapping<dim>
+template<int dim> class FEDG_Q0: public FE_DGQ<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_Q0 ();
-    
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-    
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{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;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
+    FEDG_Q0(): FE_DGQ<dim>(0) 
+      {};
 };
 
 
-/**
- * Define a (bi-, tri-, etc)linear finite element in @p{dim} space dimensions,
- * along with (bi-, tri-)linear (therefore isoparametric) transforms from the
- * unit cell to the real cell allowing discontinuous Galerkin methods.
- *
- * 
- * This class is derived from and provides substantially the same 
- * as the @p{FEQ1} class. The only difference is the new constructor that
- * calls @p{FEQ1::FEQ1(const int)}, the protected constructor of the
- * @p{FEQ1} class using a @p{FiniteElement} with no dofs in the vertices and 
- * $2^d$ dofs per cell. As now the cells do not share any vertex-dof with
- * a neighboring cell the $2^d$ dofs per cell can be choosen independently not
- * needing any constraints and allowing the use of discontinuous Galerkin
- * methods. Although the basis functions now are not longer associated 
- * with the vertices but with the cell they retain their shape. As already
- * explained no constraint matrices needed to be implemented.
- * To use this element you need to think about the jump terms in your 
- * weak formulation of your discontinuous Galerkin scheme.
- * @author Ralf Hartmann, 1998
- */
-template <int dim>
-class FEDG_Q1 : public FEQ1<dim>
+template<int dim> class FEDG_Q1: public FE_DGQ<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_Q1();
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
+    FEDG_Q1(): FE_DGQ<dim>(1) 
+      {};
 };
 
 
-/**
- * Define a (bi-, tri-, etc)quadratic finite element in @p{dim} space dimensions,
- * along with (bi-, tri-)linear transforms from the
- * unit cell to the real cell allowing discontinuous Galerkin methods.
- * 
- * This class is derived from and provides substantially the same 
- * as the @p{FEQ2} class. The only difference is the new constructor that
- * calls @p{FEQ2::FEQ2(const int)}, the protected constructor of the
- * @p{FEQ2} class using a @p{FiniteElement} with no dofs in the vertices, no dofs on the lines and 
- * $3^d$ dofs per cell. As now the cells do not share any vertex-dof with
- * a neighboring cell the $3^d$ dofs per cell can be choosen independently not
- * needing any constraints and allowing the use of discontinuous Galerkin
- * methods. Although the basis functions now are not longer associated 
- * with the vertices but with the cell they retain their shape. As already
- * explained no constraint matrices needed to be implemented.
- * To use this element you need to think about the jump terms in your 
- * weak formulation of your discontinuous Galerkin scheme.
- * @author Ralf Hartmann, 1998
- */
-template <int dim>
-class FEDG_Q2 : public FEQ2<dim>
+template<int dim> class FEDG_Q2: public FE_DGQ<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_Q2();
-                                
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
+    FEDG_Q2(): FE_DGQ<dim>(2) 
+      {};
 };
 
 
-/**
- * Define a (bi-, tri-, etc)cubic finite element in @p{dim} space dimensions,
- * along with (bi-, tri-)linear transforms from the
- * unit cell to the real cell allowing discontinuous Galerkin methods.
- * 
- * This class is derived from and provides substantially the same 
- * as the @p{FEQ3} class. The only difference is the new constructor that
- * calls @p{FEQ3::FEQ3(const int)}, the protected constructor of the
- * @p{FEQ3} class using a @p{FiniteElement} with no dofs in the vertices, no dofs on the lines and 
- * $4^d$ dofs per cell. As now the cells do not share any vertex-dof with
- * a neighboring cell the $4^d$ dofs per cell can be choosen independently not
- * needing any constraints and allowing the use of discontinuous Galerkin
- * methods. Although the basis functions now are not longer associated 
- * with the vertices but with the cell they retain their shape. As already
- * explained no constraint matrices needed to be implemented.
- * To use this element you need to think about the jump terms in your 
- * weak formulation of your discontinuous Galerkin scheme.
- * @author Ralf Hartmann, 1998
- */
-template <int dim>
-class FEDG_Q3 : public FEQ3<dim>
+template<int dim> class FEDG_Q3: public FE_DGQ<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_Q3();
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
+    FEDG_Q3(): FE_DGQ<dim>(3) 
+      {};
 };
 
 
-/**
- * Define a (bi-, tri-, etc)quartic finite element in @p{dim} space dimensions,
- * along with (bi-, tri-)linear transforms from the
- * unit cell to the real cell allowing discontinuous Galerkin methods.
- * 
- * This class is derived from and provides substantially the same 
- * as the @p{FEQ4} class. The only difference is the new constructor that
- * calls @p{FEQ4::FEQ4(const int)}, the protected constructor of the
- * @p{FEQ4} class using a @p{FiniteElement} with no dofs in the vertices, no dofs on the lines and 
- * $5^d$ dofs per cell. As now the cells do not share any vertex-dof with
- * a neighboring cell the $5^d$ dofs per cell can be choosen independently not
- * needing any constraints and allowing the use of discontinuous Galerkin
- * methods. Although the basis functions now are not longer associated 
- * with the vertices but with the cell they retain their shape. As already
- * explained no constraint matrices needed to be implemented.
- * To use this element you need to think about the jump terms in your 
- * weak formulation of your discontinuous Galerkin scheme.
- * @author Ralf Hartmann, 1998
- */
-template <int dim>
-class FEDG_Q4 : public FEQ4<dim>
+template<int dim> class FEDG_Q4: public FE_DGQ<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_Q4();
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
+    FEDG_Q4(): FE_DGQ<dim>(4) 
+      {};
 };
 
 
diff --git a/deal.II/deal.II/include/fe/fe_lib.dgp.h b/deal.II/deal.II/include/fe/fe_lib.dgp.h
deleted file mode 100644 (file)
index 4772133..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-//----------------------------  fe_lib.dgp.h  ---------------------------
-//    Version: $Name$
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.dgp.h  ---------------------------
-#ifndef __deal2__fe_lib_dgp_h
-#define __deal2__fe_lib_dgp_h
-
-
-/*----------------------------   fe_lib.dgp.h     ---------------------------*/
-
-
-#include <fe/q1_mapping.h>
-
-
-/**
- * Discontinuous P1-element on hypercubes.
- *
- * This is the implementation of a linear (sic) polynomial space on a
- * d-dimensional hypercube. The shape functions are the first @p{d+1}
- * of @p{1,x,y,z}. Later on, these should be exchanged for mutually
- * orthogonal, preferably by changing the unit cell to $[-1,1]^d$.
- *
- * @author Guido Kanschat, 2000
- */
-template <int dim>
-class FEDG_P1 : public FEQ1Mapping<dim>
-{
-  public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_P1 ();
-
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{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;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
-};
-
-
-
-
-/**
- * Discontinuous P2-element on hypercubes.
- *
- * This is the implementation of a quadratic (sic) polynomial space on a
- * d-dimensional hypercube. The shape functions are those of
- * @p{1,x,y,z, x*x, x*y, x*z, y*y, y*z, z*z} applying to the space
- * dimension. Later on, these should be exchanged for mutually
- * orthogonal, preferably by changing the unit cell to $[-1,1]^d$.
- *
- * @author Guido Kanschat, 2000
- */
-template <int dim>
-class FEDG_P2 : public FEQ1Mapping<dim>
-{
-  public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_P2 ();
-
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
-};
-
-
-
-
-/**
- * Discontinuous P3-element on hypercubes.
- *
- * This is the implementation of a cubic (sic) polynomial space on a
- * d-dimensional hypercube. The shape functions are the basis
- * polynomials spanning the space of cubic polynomials. Later on,
- * they should be exchanged for mutually orthogonal, preferably by
- * changing the unit cell to $[-1,1]^d$.
- *
- * @author Guido Kanschat, 2000
- */
-template <int dim>
-class FEDG_P3 : public FEQ1Mapping<dim>
-{
-  public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_P3 ();
-
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
-};
-
-
-
-
-/**
- * Discontinuous P3-element on hypercubes.
- *
- * This is the implementation of a quartic (sic) polynomial space on a
- * d-dimensional hypercube. The shape functions are the basis
- * polynomials spanning the space of cubic polynomials. Later on,
- * they should be exchanged for mutually orthogonal, preferably by
- * changing the unit cell to $[-1,1]^d$.
- *
- * @author Guido Kanschat, 2000
- */
-template <int dim>
-class FEDG_P4 : public FEQ1Mapping<dim>
-{
-  public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEDG_P4 ();
-
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on what this function does.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
-};
-
-
-/*----------------------------   fe_lib.dgp.h     ---------------------------*/
-
-#endif
-/*----------------------------   fe_lib.dgp.h     ---------------------------*/
-
-
index 33aeac0b11aa5f51b4781084dade0eb9a617d2e9..65e79a8ef8073a0b047cf98b9cb99f3b4cb35707 100644 (file)
-//----------------------------  fe_lib.lagrange.h  ---------------------------
+//---------------------------------------------------------------
+//    $Id$
 //    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 //    to the file deal.II/doc/license.html for the  text  and
 //    further information on this license.
 //
-//----------------------------  fe_lib.lagrange.h  ---------------------------
+//---------------------------------------------------------------
 #ifndef __deal2__fe_lib_lagrange_h
 #define __deal2__fe_lib_lagrange_h
 
 
-/*----------------------------   fe_lib.h     ---------------------------*/
-
+#include<fe/fe_q.h>
 
-#include <fe/q1_mapping.h>
 
-/**
- * Isoparametric Q1 finite element in @p{dim} space dimensions.
- *
- * The linear, isoparametric mapping from a point $\vec \xi$ on the unit cell
- * to a point $\vec x$ on the real cell is defined as
- * $$ \vec x(\vec \xi)  = \sum_j {\vec p_j} N_j(\xi) $$
- * where $\vec p_j$ is the vector to the $j$th corner point of the cell in
- * real space and $N_j(\vec \xi)$ is the value of the basis function associated
- * with the $j$th corner point, on the unit cell at point $\vec \xi$. The sum
- * over $j$ runs over all corner points.
- *
- * The number of degrees of freedom equal the number of the respective vertex
- * of the cell
- *
- * @author Wolfgang Bangerth, 1998, 1999
- */
-template <int dim>
-class FEQ1 : public FEQ1Mapping<dim>
+template<int dim> class FEQ1: public FE_Q<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEQ1 ();
-  protected:
-                                    /**
-                                     * Constructor that is called by the
-                                     * constructor of the derived
-                                     * @p{FEDG_Q1} class.
-                                     * It uses  no dofs in the vertices and 
-                                     * $2^d$ dofs per cell. No constraint
-                                     * matrices are build.
-                                     * For more detail see class @p{FEDGLinear}.
-                                     */
-    FEQ1 (const int);
-    
-  public:
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{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;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
+    FEQ1(): FE_Q<dim>(1) 
+      {};
 };
 
 
-/**
- * Subparametric Q2 finite element in @p{dim} space dimensions.
- * A Q1 mapping from the unit cell
- * to the real cell is implemented.
- *
- * The numbering of the degrees of freedom is as follows:
- * @begin{itemize}
- * @item 1D case:
- *   @begin{verbatim}
- *      0---2---1
- *   @end{verbatim}
- *
- * @item 2D case:
- *   @begin{verbatim}
- *      3---6---2
- *      |       |
- *      7   8   5
- *      |       |
- *      0---4---1
- *   @end{verbatim}
- *
- * @item 3D case:
- *   @begin{verbatim}
- *         7--14---6        7--14---6
- *        /|       |       /       /|
- *      19 |       13     19      1813
- *      /  15      |     /       /  |
- *     3   |       |    3---10--2   |
- *     |   4--12---5    |       |   5
- *     |  /       /     |       9  /
- *    11 16      17     11      | 17
- *     |/       /       |       |/
- *     0---8---1        0---8---1
- *
- *         *-------*        *-------*
- *        /|       |       /       /|
- *       / |  21   |      /  24   / |
- *      /  |       |     /       /  |
- *     *   |       |    *-------*   |
- *     |25 *-------*    |       |23 *
- *     |  /       /     |   20  |  /
- *     | /  22   /      |       | /
- *     |/       /       |       |/
- *     *-------*        *-------* 
- *   @end{verbatim}
- *   The center vertex has number 26.
- *
- *   The respective coordinate values of the support points of the degrees
- *   of freedom are as follows:
- *   @begin{itemize}
- *   @item Index 0: @p{[0, 0, 0]};
- *   @item Index 1: @p{[1, 0, 0]};
- *   @item Index 2: @p{[1, 0, 1]};
- *   @item Index 3: @p{[0, 0, 1]};
- *   @item Index 4: @p{[0, 1, 0]};
- *   @item Index 5: @p{[1, 1, 0]};
- *   @item Index 6: @p{[1, 1, 1]};
- *   @item Index 7: @p{[0, 1, 1]};
- *   @item Index 8: @p{[1/2, 0, 0]};
- *   @item Index 9: @p{[1, 0, 1/2]};
- *   @item Index 10: @p{[1/2, 0, 1]};
- *   @item Index 11: @p{[0, 0, 1/2]};
- *   @item Index 12: @p{[1/2, 1, 0]};
- *   @item Index 13: @p{[1, 1, 1/2]};
- *   @item Index 14: @p{[1/2, 1, 1]};
- *   @item Index 15: @p{[0, 1, 1/2]};
- *   @item Index 16: @p{[0, 1/2, 0]};
- *   @item Index 17: @p{[1, 1/2, 0]};
- *   @item Index 18: @p{[1, 1/2, 1]};
- *   @item Index 19: @p{[0, 1/2, 1]};
- *   @item Index 20: @p{[1/2, 0, 1/2]};
- *   @item Index 21: @p{[1/2, 1, 1/2]};
- *   @item Index 22: @p{[1/2, 1/2, 0]};
- *   @item Index 23: @p{[1, 1/2, 1/2]};
- *   @item Index 24: @p{[1/2, 1/2, 1]};
- *   @item Index 25: @p{[0, 1/2, 1/2]};
- *   @item Index 26: @p{[1/2, 1/2, 1/2]}; 
- *   @end{itemize}
- * @end{itemize}
- *
- * @author Wolfgang Bangerth, 1998, 1999
- */
-template <int dim>
-class FEQ2 : public FEQ1Mapping<dim>
+template<int dim> class FEQ2: public FE_Q<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEQ2 ();
-  protected:
-                                    /**
-                                     * Constructor that is called by the
-                                     * constructor of the derived
-                                     * @p{FEDGQuadraticSub} class.
-                                     * It uses no dofs in the vertices, no
-                                     * dofs in the lines and 
-                                     * $3^d$ dofs per cell. No constraint
-                                     * matrices are build.
-                                     * For more detail see class 
-                                     * @p{FEDGQuadraticSub}.
-                                     */
-    FEQ2 (const int);
-    
-  public:
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
+    FEQ2(): FE_Q<dim>(2) 
+      {};
 };
 
 
-/**
- * Subparametric Q3 finite element in @p{dim} space dimensions.
- * A Q1 mapping from the unit cell
- * to the real cell is implemented.
- *
- * The numbering of degrees of freedom in one spatial dimension is as follows:
- * @begin{verbatim}
- *   0--2--3--1
- * @end{verbatim}
- *
- * The numbering of degrees of freedom in two spatial dimension is as follows:
- * @begin{verbatim}
- *   3--8--9--2
- *   |        |
- *   11 15 14 7
- *   |        |
- *   10 12 13 6
- *   |        |
- *   0--4--5--1
- * @end{verbatim}
- * Note the reverse ordering of degrees of freedom on the left and upper
- * line and the counterclockwise numbering of the interior degrees of
- * freedom.
- *
- * @author Wolfgang Bangerth, 1998
- */
-template <int dim>
-class FEQ3 : public FEQ1Mapping<dim>
+template<int dim> class FEQ3: public FE_Q<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEQ3 ();
-
-  protected:
-                                    /**
-                                     * Constructor that is called by the
-                                     * constructor of the derived
-                                     * @p{FEDGCubicSub} class.
-                                     * It uses  no dofs in the vertices and 
-                                     * $4^d$ dofs per cell. No constraint
-                                     * matrices are build.
-                                     * For more detail see class
-                                     * @p{FEDGCubicSub}.
-                                     */
-    FEQ3 (const int);
-
-  public:
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
+    FEQ3(): FE_Q<dim>(3) 
+      {};
 };
 
 
-/**
- * Subparametric Q4 finite element in @p{dim} space dimensions.
- * A linear (subparametric) mapping from the unit cell
- * to the real cell is implemented.
- *
- * The numbering of degrees of freedom in one spatial dimension is as follows:
- * @begin{verbatim}
- *   0--2--3--4--1
- * @end{verbatim}
- *
- * The numbering of degrees of freedom in two spatial dimension is as follows:
- * @begin{verbatim}
- *   3--10-11-12-2
- *   |           |
- *   15 19 22 18 9
- *   |           |
- *   14 23 24 21 8
- *   |           |
- *   13 16 20 17 7
- *   |           |
- *   0--4--5--6--1
- * @end{verbatim}
- * Note the reverse ordering of degrees of freedom on the left and upper
- * line and the numbering of the interior degrees of
- * freedom.
- *
- * @author Wolfgang Bangerth, 1998
- */
-template <int dim>
-class FEQ4 : public FEQ1Mapping<dim>
+template<int dim> class FEQ4: public FE_Q<dim>
 {
   public:
-                                    /**
-                                     * Constructor
-                                     */
-    FEQ4 ();
-
-  protected:
-                                    /**
-                                     * Constructor that is called by the
-                                     * constructor of the derived
-                                     * @p{FEDGQuarticSub} class.
-                                     * It uses  no dofs in the vertices and 
-                                     * $5^d$ dofs per cell. No constraint
-                                     * matrices are build.
-                                     * For more detail see class
-                                     * @p{FEDGQuarticSub}.
-                                     */
-    FEQ4 (const int);
-
-  public:
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
-                                    /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on what this function does.
-                                     *
-                                     * Please note that as allowed in the
-                                     * documentation of the base class,
-                                     * this function does not implement
-                                     * the setting up of the local mass
-                                     * matrix in three space dimensions
-                                     * because of too high computational
-                                     * costs. The specified exception
-                                     * is thrown instead.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-  private:
-
-                                    /**
-                                     * This function is simply singled out of
-                                     * the constructor; it sets up the
-                                     * @p{restriction} and @p{prolongation}
-                                     * matrices. Since we have two constructors
-                                     * which need this functionality, we
-                                     * provide a single function for this.
-                                     */
-    void initialize_matrices ();
+    FEQ4(): FE_Q<dim>(4) 
+      {};
 };
 
 
-/*----------------------------   fe_lib.h     ---------------------------*/
-
 #endif
-/*----------------------------   fe_lib.h     ---------------------------*/
-
-
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a603519233840176d57336e1afe82154e35d8e13 100644 (file)
@@ -0,0 +1,306 @@
+//---------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//---------------------------------------------------------------
+#ifndef __deal2__fe_q_h
+#define __deal2__fe_q_h
+
+#include <base/polynomial.h>
+#include <fe/fe.h>
+
+template <int dim> class TensorProductPolynomials;
+template <int dim> class MappingQ;
+
+/**
+ * Tensor product elements based on equidistant support points.
+ */
+template <int dim>
+class FE_Q : public FiniteElement<dim>
+{
+  public:
+                                    /**
+                                     * Constructor for tensor product
+                                     * polynomials of degree @p{k}.
+                                     */
+    FE_Q (unsigned int k);
+                                    /**
+                                     * Destructor.
+                                     */
+    ~FE_Q ();
+
+                                    /**
+                                     * Compute flags for initial
+                                     * update only.
+                                     */
+    virtual UpdateFlags update_once (UpdateFlags flags) const;
+  
+                                    /**
+                                     * Compute flags for update on
+                                     * each cell.
+                                     */
+    virtual UpdateFlags update_each (UpdateFlags flags) const;
+
+                                    /**
+                                     * Return the support points of the
+                                     * trial functions on the unit cell.
+                                     *
+                                     * The order of points in
+                                     * the array matches that returned by
+                                     * the #cell->get_dof_indices# function, but:
+                                     *
+                                     * If the shape functions are not
+                                     * Lagrangian interpolants at some
+                                     * points, the size of the array
+                                     * will be zero. This is the standard behavior,
+                                     * if the function is not overloaded.
+                                     */
+    virtual void get_unit_support_points (std::vector<Point<dim> > &) const;    
+    
+                                    /**
+                                     * Return the support points of
+                                     * the trial functions on the
+                                     * first face of the unit cell.
+                                     *
+                                     * The order of points in
+                                     * the array matches that returned by
+                                     * the #cell->get_dof_indices# function.
+                                     *
+                                     * If the shape functions are not
+                                     * Lagrangian interpolants at some
+                                     * points, the size of the array
+                                     * will be zero. This is the standard behavior,
+                                     * if the function is not overloaded.
+                                     */
+    virtual void get_unit_face_support_points (std::vector<Point<dim-1> > &) const;
+
+                                    /**
+                                     * Read-only access to the
+                                     * renumber vector.
+                                     */
+    const std::vector<unsigned int> &get_renumber() const;
+
+    
+                                    /**
+                                     * Determine an estimate for the
+                                     * memory consumption (in bytes)
+                                     * of this object.
+                                     *
+                                     * This function is made virtual,
+                                     * since finite element objects
+                                     * are usually accessed through
+                                     * pointers to their base class,
+                                     * rather than the class itself.
+                                     */
+    virtual unsigned int memory_consumption () const;
+
+  protected:
+
+                                    /**
+                                     * @p{clone} function instead of
+                                     * a copy constructor.
+                                     *
+                                     * This function is needed by the
+                                     * constructors of @p{FESystem}.
+                                     */
+    virtual FiniteElement<dim> *clone() const;
+  
+                                    /**
+                                     * Prepare internal data
+                                     * structures and fill in values
+                                     * independent of the cell.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Mapping<dim>& mapping,
+             const Quadrature<dim>& quadrature) const ;
+
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_values (const Mapping<dim> &mapping,
+                   const DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>                &quadrature,
+                   Mapping<dim>::InternalDataBase      &mapping_internal,
+                   Mapping<dim>::InternalDataBase      &fe_internal,
+                   FEValuesData<dim>& data) const;
+    
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_face_values (const Mapping<dim> &mapping,
+                        const DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int                    face_no,
+                        const Quadrature<dim-1>                &quadrature,
+                        Mapping<dim>::InternalDataBase      &mapping_internal,
+                        Mapping<dim>::InternalDataBase      &fe_internal,
+                        FEValuesData<dim>& data) const ;
+    
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_subface_values (const Mapping<dim> &mapping,
+                           const DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int                    face_no,
+                           const unsigned int                    sub_no,
+                           const Quadrature<dim-1>                &quadrature,
+                           Mapping<dim>::InternalDataBase      &mapping_internal,
+                           Mapping<dim>::InternalDataBase      &fe_internal,
+                           FEValuesData<dim>& data) const ;
+
+  private:
+                                    /**
+                                     * Only for internal use. Its
+                                     * full name is
+                                     * @p{get_dofs_per_object_vector}
+                                     * function and it creates the
+                                     * @p{dofs_per_object} vector that is
+                                     * needed within the constructor to
+                                     * be passed to the constructor of
+                                     * @p{FiniteElementData}.
+                                     */
+    static std::vector<unsigned int> get_dpo_vector(unsigned int degree);
+    
+                                    /**
+                                     * Map tensor product data to shape
+                                     * function numbering.
+                                     *
+                                     * The node values are ordered such
+                                     * that vertices are first,
+                                     * followed by lines,
+                                     * quadrilaterals and
+                                     * hexahedra. Furthermore, the
+                                     * ordering inside each group may
+                                     * be confused, too. Therefore,
+                                     * this function computes a mapping
+                                     * from lexicographic ordering
+                                     * (x,y,z) to the shape function
+                                     * structure.
+                                     *
+                                     * This function is made
+                                     * static. This allows other
+                                     * classes (like e.g. @p{MappingQ})
+                                     * to call this functions without a
+                                     * need to create a
+                                     * FiniteElement. This function
+                                     * needs some data from the base
+                                     * class @p{FiniteElementData} of
+                                     * this @p{FE_Q} class. But this
+                                     * data cannot be accessed to by a
+                                     * static function. Hence this
+                                     * function needs an additional
+                                     * @p{FiniteElementData} argument.
+                                     */
+    static void build_renumbering (const FiniteElementData<dim> &fe_data,
+                                  unsigned int degree,
+                                  std::vector<unsigned int>& numbering);
+
+                                    /**
+                                     * Map tensor product data to shape function
+                                     * numbering on first face.
+                                     *
+                                     * This function does the same as
+                                     * @p{build_renumbering}, only on
+                                     * the first face.
+                                     *
+                                     * It is used to compute the
+                                     * order of face support points.
+                                     */
+    static void build_face_renumbering (const FiniteElementData<dim-1> &fe_data,
+                                       unsigned int degree,
+                                       std::vector<unsigned int>& numbering);
+
+                                    /**
+                                     * Compute support points.
+                                     */
+    static void compute_support_points (std::vector<Point<dim> >& support_points,
+                                       unsigned int degree,
+                                       const std::vector<unsigned int>& renumber);
+
+                                    /**
+                                     * Degree of the polynomials.
+                                     */  
+    const unsigned int degree;
+                                    /**
+                                     * Mapping from lexicographic to
+                                     * shape function numbering.
+                                     */
+    std::vector<unsigned int> renumber;
+                                    /**
+                                     * Mapping from lexicographic to
+                                     * shape function numbering on first face.
+                                     */
+    std::vector<unsigned int> face_renumber;
+                                    /**
+                                     * Vector of one-dimensional
+                                     * polynomials used.
+                                     */
+    std::vector<LagrangeEquidistant> polynomials;
+
+                                    /**
+                                     * Implementation of the tensor
+                                     * product of polynomials.
+                                     */
+    TensorProductPolynomials<dim>* poly;
+
+                                    /**
+                                     * Fields of cell-independent data.
+                                     */
+    class InternalData : public FiniteElementBase<dim>::InternalDataBase
+    {
+      public:
+                                        /**
+                                         * Array with shape function values
+                                         * in quadrature points. There is one
+                                         * vector for each shape function, containing
+                                         * values for each quadrature point.
+                                         */
+       std::vector<std::vector<double> > shape_values;
+                                        /**
+                                         * Array with shape function gradients
+                                         * in quadrature points. There is one
+                                         * vector for each shape function, containing
+                                         * values for each quadrature point.
+                                         */                                  
+       std::vector<std::vector<Tensor<1,dim> > > shape_gradients;
+    };
+    
+                                    /**
+                                     * Allow access from other dimensions.
+                                     */
+    template <int dim1> friend class FE_Q;
+  
+                                    /**
+                                     * Allows @p{MappingQ} class to
+                                     * access to build_renumbering
+                                     * function.
+                                     */
+    friend class MappingQ<dim>;
+};
+
+#endif
+
+
+template<int dim>
+inline
+const std::vector<unsigned int> &
+FE_Q<dim>::get_renumber() const
+{
+  return renumber;
+}
index 660540401b30715b02e0a206c607290d7fb0e255..da1d97d857134027bf091e23b60d13a34116add3 100644 (file)
@@ -1,5 +1,9 @@
 //----------------------------  fe_system.h  ---------------------------
+//    $Id$
 //    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 //    to the file deal.II/doc/license.html for the  text  and
 
 
 /**
- * This class provides an interface to group several equal elements together
- * into one. To the outside world, the resulting object looks just like
- * a usual finite element object, which is composed of several other finite
- * elements of the same class each.
- *
- * Basically, this composed finite element has @p{N} times as many degrees of
- * freedom (and therefore also @p{N} times as many shape functions) as a single
- * object of the underlying finite element would have had. Among these,
- * always @p{N} have the same properties, i.e. are represented by the same
- * shape functions. These @p{N} shape functions for each degree of freedom
- * of the basic finite element are numbered consecutively, i.e. for
- * the common case of a velocity @p{(u,v,w)}, the sequence of basis functions
- * will be @p{u1, v1, w1, u2, v2, w2, ..., uN, vN, wN} compared to
- *  @p{u1, ..., uN, v1, ..., vN, w1, ...wN}.
+ * This class provides an interface to group several elements together
+ * into one. To the outside world, the resulting object looks just
+ * like a usual finite element object, which is composed of several
+ * other finite elements that are possibly of different type.
+
+ * The overall numbering of degrees of freedom is as follows: for each
+ * subobject (vertex, line, quad, or hex), the degrees of freedom are
+ * numbered such that we run over all subelements first, before
+ * turning for the next dof on this subobject or for the next
+ * subobject. For example, for a element of three components in one
+ * space dimension, the first two components being cubic lagrange
+ * elements and the third being a quadratic lagrange element, the
+ * ordering for the system @p{s=(u,v,p)} is:
  *
- * Using this scheme, the overall numbering of degrees of freedom is as
- * follows: for each subobject (vertex, line, quad, or hex), the degrees
- * of freedom are numbered such that we run over all subelements first,
- * before turning for the next dof on this subobject or for the next subobject.
- * For example, for the bicubic element in one space dimension, and for
- * two subobjects grouped together by this class, the ordering for
- * the system @p{s=(u,v)} is:
  * @begin{itemize}
- * @item First vertex: @p{u0, v0 = s0, s1}
- * @item Second vertex: @p{u1, v1 = s2, s3}
- * @item First degree of freedom on the line (=cell):
- *   @p{u2, v2 = s3, s4}
- * @item Second degree of freedom on the line:
- *   @p{u3, v3 = s5, s6}.
+ * @item First vertex: @p{u0, v0, p0 = s0, s1, s2}
+ * @item Second vertex: @p{u1, v1, p1 = s3, s4, s5}
+ * @item First component on the line:
+ *   @p{u2, u3 = s4, s5}
+ * @item Second component on the line:
+ *   @p{v2, v3 = s6, s7}.
+ * @item Third component on the line:
+ *   @p{p2 = s8}.
  * @end{itemize}
+ * Do not rely on this numbering in your application as these
+ * internals might change in future. Rather use the functions
+ * @p{system_to_component_index} and @p{component_to_system_index},
+ * instead.
  *
  * In the most cases, the composed element behaves as if it were a usual element
  * with more degrees of freedom. However the underlying structure is visible in
  * coupled to @p{u} at the vertices and the line on the larger cell next to this
  * vertex, there is no interaction with @p{v} and @p{w} of this or the other cell.
  *
- * Likewise, the matrix computed by the @p{get_local_mass_matrix} function, which
- * originally is defined to be $m_{ij} = \int_K \phi_i \phi_j dx$ contains
- * only those $m_{ij}$ for which the respective shape functions belong to the
- * same subobject, all other entries are set to zero. The matrix therefore is
- * a block matrix, where each block is a diagonal matrix with entries equal to
- * the entry at this block's position in the local mass matrix of a single
- * finite element object. This behaviour is consistent with one common use
- * of the mass matrix, which is in projecting functions onto the grid; in this
- * case, one wants to project each component of the function (here it is a vector
- * function) to the respective component of the finite element, without interaction
- * of the different components.
- *
- * @author Wolfgang Bangerth, Guido Kanschat, 1999
+ * @author Wolfgang Bangerth, Guido Kanschat, 1999, reimplementation Ralf Hartmann 2001.
  */
 template <int dim>
 class FESystem : public FiniteElement<dim>
@@ -104,8 +94,7 @@ class FESystem : public FiniteElement<dim>
                                      * class needs to be of the same dimension
                                      * as is this object.
                                      */
-    template <class FE>
-    FESystem (const FE &fe, const unsigned int n_elements);
+    FESystem (const FiniteElement<dim> &fe, const unsigned int n_elements);
 
                                     /** 
                                      * Constructor for mixed
@@ -114,282 +103,158 @@ class FESystem : public FiniteElement<dim>
                                      *
                                      * See the other constructor.
                                      */
-    template <class FE1, class FE2>
-    FESystem (const FE1 &fe1, const unsigned int n1,
-             const FE2 &fe2, const unsigned int n2);
+    FESystem (const FiniteElement<dim> &fe1, const unsigned int n1,
+             const FiniteElement<dim> &fe2, const unsigned int n2);
 
-                                    /** 
+                                    /** 
                                      * Constructor for mixed
                                      * discretizations with three
                                      * base elements.
                                      *
                                      * See the other constructor.
                                      */
-    template <class FE1, class FE2, class FE3>
-    FESystem (const FE1 &fe1, const unsigned int n1,
-             const FE2 &fe2, const unsigned int n2,
-             const FE3 &fe3, const unsigned int n3);
+    FESystem (const FiniteElement<dim> &fe1, const unsigned int n1,
+             const FiniteElement<dim> &fe2, const unsigned int n2,
+             const FiniteElement<dim> &fe3, const unsigned int n3);
 
                                     /**
                                      * Destructor.
                                      */
     virtual ~FESystem ();
 
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     *
-                                     * For an element composed of @p{N}
-                                     * subelements, the first @p{N} shape
-                                     * functions refer to the zeroth shape
-                                     * function of the underlying object,
-                                     * the shape functions @p{N..2N-1} refer
-                                     * to the base shape function with
-                                     * number @p{1}, and so on. The @p{i} shape
-                                     * function therefore equals the
-                                     * @p{i/N} the shape function of the
-                                     * base object.
-                                     */
-    virtual double shape_value(const unsigned int i,
-                              const Point<dim>  &p) const;
-
                                     /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     *
-                                     * For the ordering of shape functions
-                                     * refer to the @p{shape_value} function.
+                                     * Compute flags for initial update only.
                                      */
-    virtual Tensor<1,dim> shape_grad(const unsigned int i,
-                                    const Point<dim>& p) const;
-
+    virtual UpdateFlags update_once (UpdateFlags flags) const;
+  
                                     /**
-                                     * Return the tensor of second derivatives
-                                     * of the @p{i}th shape function at
-                                     * point @p{p} on the unit cell.
-                                     *
-                                     * For the ordering of shape functions
-                                     * refer to the @p{shape_value} function.
+                                     * Compute flags for update on each cell.
                                      */
-    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
-                                          const Point<dim>   &p) const;
+    virtual UpdateFlags update_each (UpdateFlags flags) const;
 
                                     /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
+                                     * Return the support points of the
+                                     * trial functions on the unit cell.
                                      *
-                                     * For the ordering of shape functions
-                                     * refer to the @p{shape_value} function.
-                                     */
-    virtual void get_unit_support_points (typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
+                                     * The order of points in the
+                                     * array matches that returned by
+                                     * the @p{cell->get_dof_indices}
+                                     * function, but:
                                      *
-                                     * For the ordering of shape functions
-                                     * refer to the @p{shape_value} function.
+                                     * If the shape functions of one
+                                     * of the base elements are not
+                                     * Lagrangian interpolants at
+                                     * some points, the size of the
+                                     * array will be zero after
+                                     * calling this function.
                                      */
-    virtual void get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    typename std::vector<Point<dim> > &support_points) const;
+    virtual void get_unit_support_points (typename std::vector<Point<dim> > &) const;    
 
                                     /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                         typename std::vector<Point<dim> > &support_points) const;
-
-                                    /**
-                                     * Fill the local mass matrix. The elements
-                                     * of this matrix are the integrals
-                                     * $\int_K \phi_i \phi_j dx$ over a given
-                                     * cell $K$. However, here only those
-                                     * elements of the matrix are set for which
-                                     * the shape functions $\phi_i$ and
-                                     * $\phi_j$ belong to the same component,
-                                     * i.e. the resulting matrix is a block
-                                     * diagonal matrix where each block is a
-                                     * matrix with values equal to
-                                     * the respective entry of the local mass
-                                     * matrix for the underlying finite element
-                                     * class. This definition of the mass
-                                     * matrix for systems of finite elements
-                                     * is consistent with the use of the matrix
-                                     * for the projection of initial values and
-                                     * the like, where the components are not
-                                     * coupled to each other. Also in most
-                                     * other cases you will not want the
-                                     * coupling terms to appear in the mass
-                                     * matrix.
+                                     * Return the support points of
+                                     * the trial functions on the
+                                     * first face of the unit cell.
                                      *
-                                     * If the shape functions of this element
-                                     * were numbered such that the first
-                                     * numbers are for the shape functions of
-                                     * the first component, then those for
-                                     * the second component, and so on, then
-                                     * the mass matrix generated by this
-                                     * function would be a block diagonal
-                                     * matrix with each block being the mass
-                                     * matrix of the base finite element as
-                                     * described above. However, this is
-                                     * not the numbering used by the
-                                     * @p{FESystem} class, so the block
-                                     * structure is usually lost for
-                                     * the @em{local} mass matrices, but
-                                     * can be recovered in the global
-                                     * matrix by suitable renumbering
-                                     * of global DoF numbers.
+                                     * The order of points in the
+                                     * array matches that returned by
+                                     * the @p{cell->get_dof_indices}
+                                     * function, but:
                                      *
-                                     * Refer to the base class for more
-                                     * information on this function.
-                                     */
-    virtual void get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const;
-
-                                    /**
-                                     * Transforms the point @p{p} on
-                                     * the unit cell to the point
-                                     * @p{p_real} on the real cell
-                                     * @p{cell} and returns
-                                     * @p{p_real}. As the
-                                     * transformation mapping of each
-                                     * @p{FiniteElement} of this
-                                     * @p{FESystem} should be the
-                                     * same, this function just calls
-                                     * the @p{transform} function of
-                                     * @p{base_element(0)}.
+                                     * If the shape functions of one
+                                     * of the base elements are not
+                                     * Lagrangian interpolants at some
+                                     * points, the size of the array
+                                     * will be zero.
                                      */
-    virtual Point<dim> transform_unit_to_real_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                   const Point<dim> &p) const;
-
+    virtual void get_unit_face_support_points (typename std::vector<Point<dim-1> > &) const;    
+  
+  protected:
                                     /**
-                                     * Transforms the point @p{p} on
-                                     * the real cell to the point
-                                     * @p{p_unit} on the unit cell
-                                     * @p{cell} and returns
-                                     * @p{p_unit}. As the
-                                     * transformation mapping of each
-                                     * @p{FiniteElement} of this
-                                     * @p{FESystem} should be the
-                                     * same, this function just calls
-                                     * the @p{transform} function of
-                                     * @p{base_element(0)}.
+                                     * @p{clone} function instead of
+                                     * a copy constructor.
+                                     *
+                                     * This function is needed by the
+                                     * constructors of @p{FESystem}.
                                      */
-    virtual Point<dim> transform_real_to_unit_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                   const Point<dim> &p) const;
-
+    virtual FiniteElement<dim> *clone() const;
+  
                                     /**
-                                     * Return the value of the @p{i}th shape
-                                     * function of the transformation mapping
-                                     * from unit cell to real cell. Since
-                                     * the transform functions are not
-                                     * touched when clustering several finite
-                                     * element objects together using this
-                                     * class, this function simply passes down
-                                     * the call to the respective function of
-                                     * the underlying element.
+                                     * Prepare internal data
+                                     * structures and fill in values
+                                     * independent of the cell.
                                      */
-    virtual double shape_value_transform (const unsigned int i,
-                                         const Point<dim> &p) const;
+    virtual typename Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Mapping<dim>& mapping,
+             const Quadrature<dim>& quadrature) const ;
 
                                     /**
-                                     * Same as above: return gradient of the
-                                     * @p{i}th shape function for the mapping
-                                     * from unit to real cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad_transform (const unsigned int i,
-                                               const Point<dim> &p) const;
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_values (const Mapping<dim>                   &mapping,
+                   const typename DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>                &quadrature,
+                   Mapping<dim>::InternalDataBase      &mapping_data,
+                   Mapping<dim>::InternalDataBase      &fe_data,
+                   FEValuesData<dim>                    &data) const;
 
                                     /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Since this function is only about the
-                                     * mapping from unit to real cell, it
-                                     * is not affected by putting several
-                                     * equal elements together, so this
-                                     * function simply passes down to the
-                                     * underlying object.
-                                     */
-    virtual void get_face_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<double>      &face_jacobi_determinants) const;
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */    
+    virtual void
+    fill_fe_face_values (const Mapping<dim>                   &mapping,
+                        const typename DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int                    face_no,
+                        const Quadrature<dim-1>              &quadrature,
+                        typename Mapping<dim>::InternalDataBase      &mapping_data,
+                        typename Mapping<dim>::InternalDataBase      &fe_data,
+                        FEValuesData<dim>                    &data) const ;
 
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * Since this function is only about the
-                                     * mapping from unit to real cell, it
-                                     * is not affected by putting several
-                                     * equal elements together, so this
-                                     * function simply passes down to the
-                                     * underlying object.
-                                     */
-    virtual void get_subface_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                       const unsigned int           subface_no,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       typename std::vector<double>      &face_jacobi_determinants) const;
-
-                                    /**
-                                     * Return the normal vectors to the
-                                     * face with number @p{face_no} of @p{cell}.
-                                     *
-                                     * Since this function is only about the
-                                     * mapping from unit to real cell, it
-                                     * is not affected by putting several
-                                     * equal elements together, so this
-                                     * function simply passes down to the
-                                     * underlying object.
-                                     *
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int          face_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const;
+                                    /**
+                                     * Implementation of the same
+                                     * function in
+                                     * @ref{FiniteElement}.
+                                     */
+    virtual void
+    fill_fe_subface_values (const Mapping<dim>                   &mapping,
+                           const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int                    face_no,
+                           const unsigned int                    sub_no,
+                           const Quadrature<dim-1>              &quadrature,
+                           typename Mapping<dim>::InternalDataBase      &mapping_data,
+                           typename Mapping<dim>::InternalDataBase      &fe_data,
+                           FEValuesData<dim>                    &data) const ;
+    
 
                                     /**
-                                     * Return the normal vectors to the
-                                     * subface with number @p{subface_no} of
-                                     * the face with number @p{face_no} of @p{cell}.
-                                     *
-                                     * Since this function is only about the
-                                     * mapping from unit to real cell, it
-                                     * is not affected by putting several
-                                     * equal elements together, so this
-                                     * function simply passes down to the
-                                     * underlying object.
-                                     *
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int           face_no,
-                                    const unsigned int           subface_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const;
+                                     * Calles (among other things)
+                                     * @p{fill_fe_([sub]face)_values}
+                                     * of the base elements. Calles
+                                     * @p{fill_fe_values} if
+                                     * @p{face_no==-1} and
+                                     * @p{sub_no==-1}; calles
+                                     * @p{fill_fe_face_values} if
+                                     * @p{face_no==-1} and
+                                     * @p{sub_no!=-1}; and calles
+                                     * @p{fill_fe_subface_values} if 
+                                     * @p{face_no!=-1} and
+                                     * @p{sub_no!=-1}.
+                                     */
+    template <int dim_1>
+    void compute_fill (const Mapping<dim>                   &mapping,
+                      const typename DoFHandler<dim>::cell_iterator &cell,
+                      const unsigned int                    face_no,
+                      const unsigned int                    sub_no,
+                      const Quadrature<dim_1>              &quadrature,
+                      typename Mapping<dim>::InternalDataBase      &mapping_data,
+                      typename Mapping<dim>::InternalDataBase      &fe_data,
+                      FEValuesData<dim>                    &data) const ;
 
-                                    /**
-                                     * Implementation of the
-                                     * corresponding function of
-                                     * @p{FiniteElement}.
-                                     */
-    virtual void fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                const typename std::vector<Point<dim> >            &unit_points,
-                                typename std::vector<Tensor<2,dim> >               &jacobians,
-                                const bool              compute_jacobians,
-                                typename std::vector<Tensor<3,dim> > &jacobians_grad,
-                                const bool              compute_jacobians_grad,
-                                typename std::vector<Point<dim> > &support_points,
-                                const bool           compute_support_points,
-                                typename std::vector<Point<dim> > &q_points,
-                                const bool           compute_q_points,
-                                const FullMatrix<double>  &shape_values_transform,
-                                const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grad_transform) const;
-    
                                     /** 
                                      * Number of different base
                                      * elements of this object.
@@ -486,7 +351,7 @@ class FESystem : public FiniteElement<dim>
                          const FiniteElementData<dim> &fe2,
                          const unsigned int            N2);
 
-                                    /**
+                                    /**
                                      * Same as above for mixed elements
                                      * with three different sub-elements.
                                      */
@@ -511,7 +376,7 @@ class FESystem : public FiniteElement<dim>
     compute_restriction_is_additive_flags (const FiniteElement<dim> &fe,
                                           const unsigned int        N);
     
-                                    /**
+                                    /**
                                      * Same as above for mixed elements
                                      * with two different sub-elements.
                                      */
@@ -521,7 +386,7 @@ class FESystem : public FiniteElement<dim>
                                           const FiniteElement<dim> &fe2,
                                           const unsigned int        N2);
 
-                                    /**
+                                    /**
                                      * Same as above for mixed elements
                                      * with three different sub-elements.
                                      */
@@ -562,11 +427,143 @@ class FESystem : public FiniteElement<dim>
                                      * Used by @p{initialize}.
                                      */
     void build_interface_constraints ();
-    
+
                                     /**
-                                     *Exception.
-                                     */
-    DeclException0(ExcElementTransformNotEqual);
+                                     * Usually: Fields of
+                                     * cell-independent data.
+                                     *
+                                     * But for @p{FESystem} this
+                                     * @p{InternalData} class does
+                                     * not itself store the data but
+                                     * only pointers to
+                                     * @p{InternalDatas} of the base
+                                     * elements.
+                                     */
+    class InternalData : public FiniteElementBase<dim>::InternalDataBase
+    {
+      public:
+                                        /**
+                                         * Constructor. Is called by
+                                         * the @p{get_data}
+                                         * function. Sets the size of
+                                         * the @p{base_fe_datas}
+                                         * vector to
+                                         * @p{n_base_elements}.
+                                         */
+       InternalData(const unsigned int n_base_elements);
+       
+                                        /**
+                                         * Destructor. Deletes all
+                                         * @p{InternalDatas} whose
+                                         * pointers are stored by the
+                                         * @p{base_fe_datas}
+                                         * vector.
+                                         */
+       ~InternalData();
+
+                                        /**
+                                         * Flag for computation of
+                                         * second derivatives.
+                                         */
+       bool second_flag;
+       
+                                        /**
+                                         * Gives write-access to the
+                                         * pointer to a
+                                         * @p{InternalData} of the
+                                         * @p{base_no}th base
+                                         * element.
+                                         */
+       void set_fe_data(unsigned int base_no,
+                        typename FiniteElementBase<dim>::InternalDataBase *);
+
+                                        /**
+                                         * Gives read-access to the
+                                         * pointer to a
+                                         * @p{InternalData} of the
+                                         * @p{base_no}th base element.
+                                         */    
+       typename FiniteElementBase<dim>::InternalDataBase &get_fe_data(unsigned int base_no) const;
+
+
+                                        /**
+                                         * Gives write-access to the
+                                         * pointer to a
+                                         * @p{FEValuesData} for the
+                                         * @p{base_no}th base
+                                         * element.
+                                         */
+       void set_fe_values_data(unsigned int base_no,
+                               FEValuesData<dim> *);
+
+                                        /**
+                                         * Gives read-access to the
+                                         * pointer to a
+                                         * @p{FEValuesData} for the
+                                         * @p{base_no}th base element.
+                                         */    
+       FEValuesData<dim> &get_fe_values_data(unsigned int base_no) const;
+
+                                        /**
+                                         * Deletes the
+                                         * @p{FEValuesData} the
+                                         * @p{fe_datas[base_no]}
+                                         * pointer is pointing
+                                         * to. Sets
+                                         * @p{fe_datas[base_no]} to
+                                         * zero.
+                                         *
+                                         * This function is used to
+                                         * delete @p{FEValuesData}
+                                         * that are needed only on
+                                         * the first cell but not any
+                                         * more afterwards.  This is
+                                         * the case for
+                                         * e.g. Lagrangian elements
+                                         * (see e.g. @p{FE_Q}
+                                         * classes).
+                                         */
+       void delete_fe_values_data(unsigned int base_no);
+       
+      private:
+       
+                                        /**
+                                         * Pointers to the
+                                         * @p{InternalDatas} of the
+                                         * base elements. They are
+                                         * accessed to by the
+                                         * @p{set_} and
+                                         * @p{get_fe_data}
+                                         * functions.
+                                         *
+                                         * The size of this vector is
+                                         * set to @p{n_base_elements}
+                                         * by the InternalData
+                                         * constructor.  It is
+                                         * filled by the @p{get_data}
+                                         * function.
+                                         */
+       typename std::vector<FiniteElementBase<dim>::InternalDataBase *> base_fe_datas;
+
+                                        /**
+                                         * Pointers to the
+                                         * @p{FEValuesDatas}
+                                         * that are given to the
+                                         * @p{fill_fe_values}
+                                         * function of the base
+                                         * elements. They are
+                                         * accessed to by the
+                                         * @p{set_} and
+                                         * @p{get_fe_values_data}
+                                         * functions.
+                                         *
+                                         * The size of this vector is
+                                         * set to @p{n_base_elements}
+                                         * by the InternalData
+                                         * constructor.
+                                         */
+       typename std::vector<FEValuesData<dim> *> base_fe_values_datas;
+    };
 };
 
 
@@ -581,44 +578,38 @@ FESystem<dim>::n_base_elements() const
 
 
 template <int dim>
-template <class FE>
-FESystem<dim>::FESystem (const FE &fe, const unsigned int n_elements) :
+FESystem<dim>::FESystem (const FiniteElement<dim> &fe, const unsigned int n_elements) :
                FiniteElement<dim> (multiply_dof_numbers(fe, n_elements),
                                    compute_restriction_is_additive_flags (fe, n_elements)),
   base_elements(1)
 {
-  base_elements[0] = ElementPair(new FE, n_elements);
+  base_elements[0] = ElementPair(fe.clone(), n_elements);
   base_elements[0].first -> subscribe ();
   initialize ();
 };
 
 
 template <int dim>
-template <class FE1, class FE2>
-FESystem<dim>::FESystem (const FE1 &fe1, const unsigned int n1,
-                        const FE2 &fe2, const unsigned int n2)
+FESystem<dim>::FESystem (const FiniteElement<dim> &fe1, const unsigned int n1,
+                        const FiniteElement<dim> &fe2, const unsigned int n2)
                :
                FiniteElement<dim> (multiply_dof_numbers(fe1, n1, fe2, n2),
                                    compute_restriction_is_additive_flags (fe1, n1,
                                                                           fe2, n2)),
   base_elements(2)
 {
-  Assert(fe1.n_transform_functions() == fe2.n_transform_functions(),
-        ExcElementTransformNotEqual());
-  
-  base_elements[0] = ElementPair(new FE1, n1);
+  base_elements[0] = ElementPair(fe1.clone(), n1);
   base_elements[0].first -> subscribe ();
-  base_elements[1] = ElementPair(new FE2, n2);
+  base_elements[1] = ElementPair(fe2.clone(), n2);
   base_elements[1].first -> subscribe ();
   initialize ();
 };
 
 
 template <int dim>
-template <class FE1, class FE2, class FE3>
-FESystem<dim>::FESystem (const FE1 &fe1, const unsigned int n1,
-                        const FE2 &fe2, const unsigned int n2,
-                        const FE3 &fe3, const unsigned int n3)
+FESystem<dim>::FESystem (const FiniteElement<dim> &fe1, const unsigned int n1,
+                        const FiniteElement<dim> &fe2, const unsigned int n2,
+                        const FiniteElement<dim> &fe3, const unsigned int n3)
                :
                FiniteElement<dim> (multiply_dof_numbers(fe1, n1,
                                                         fe2, n2,
@@ -628,16 +619,11 @@ FESystem<dim>::FESystem (const FE1 &fe1, const unsigned int n1,
                                                                           fe3, n3)),
   base_elements(3)
 {
-  Assert(fe1.n_transform_functions() == fe2.n_transform_functions(),
-        ExcElementTransformNotEqual());
-  Assert(fe1.n_transform_functions() == fe3.n_transform_functions(),
-        ExcElementTransformNotEqual());
-  
-  base_elements[0] = ElementPair(new FE1, n1);
+  base_elements[0] = ElementPair(fe1.clone(), n1);  
   base_elements[0].first -> subscribe ();
-  base_elements[1] = ElementPair(new FE2, n2);
+  base_elements[1] = ElementPair(fe2.clone(), n2);
   base_elements[1].first -> subscribe ();
-  base_elements[2] = ElementPair(new FE3, n3);
+  base_elements[2] = ElementPair(fe3.clone(), n3);
   base_elements[2].first -> subscribe ();
   initialize ();
 };
@@ -663,6 +649,68 @@ FESystem<dim>::base_element(unsigned int index) const
 }
 
 
+template <int dim>
+inline FiniteElementBase<dim>::InternalDataBase &
+FESystem<dim>::
+InternalData::get_fe_data(unsigned int base_no) const
+{
+  Assert(base_no<base_fe_datas.size(),
+        ExcIndexRange(base_no,0,base_fe_datas.size()));
+  return *base_fe_datas[base_no];
+}
+
+
+
+template <int dim>
+inline void
+FESystem<dim>::
+InternalData::set_fe_data(unsigned int base_no,
+                         FiniteElementBase<dim>::InternalDataBase *ptr)
+{
+  Assert(base_no<base_fe_datas.size(),
+        ExcIndexRange(base_no,0,base_fe_datas.size()));
+  base_fe_datas[base_no]=ptr;
+}
+
+
+template <int dim>
+inline FEValuesData<dim> &
+FESystem<dim>::
+InternalData::get_fe_values_data(unsigned int base_no) const
+{
+  Assert(base_no<base_fe_values_datas.size(),
+        ExcIndexRange(base_no,0,base_fe_values_datas.size()));
+  Assert(base_fe_values_datas[base_no]!=0, ExcInternalError());
+  return *base_fe_values_datas[base_no];
+}
+
+
+
+template <int dim>
+inline void
+FESystem<dim>::
+InternalData::set_fe_values_data(unsigned int base_no,
+                                FEValuesData<dim> *ptr)
+{
+  Assert(base_no<base_fe_values_datas.size(),
+        ExcIndexRange(base_no,0,base_fe_values_datas.size()));
+  base_fe_values_datas[base_no]=ptr;
+}
+
+
+template <int dim>
+inline void
+FESystem<dim>::
+InternalData::delete_fe_values_data(unsigned int base_no)
+{
+  Assert(base_no<base_fe_values_datas.size(),
+        ExcIndexRange(base_no,0,base_fe_values_datas.size()));
+  Assert(base_fe_values_datas[base_no]!=0, ExcInternalError());
+  delete base_fe_values_datas[base_no];
+  base_fe_values_datas[base_no]=0;
+}
+
+
 /*----------------------------  fe_lib.system.h  ---------------------------*/
 
 #endif
index 96e9d39c1deb60e5649c5fcfa47ee5055b4ef312..eebf55604831d5281c400f4ca9ec6301e1624226 100644 (file)
  *
  * The following flags are declared:
  * @begin{itemize}
- *   @item @p{update_default  = 0}: Default: update nothing.
- *   @item @p{update_values = 1}: Compute the values of the shape
+ *   @item @p{update_default}: Default: update nothing.
+ *   @item @p{update_values}: Compute the values of the shape
  *     functions at the quadrature points on the real space cell. For the
  *     usual Lagrange elements, these values are equal to the values of
  *     the shape functions at the quadrature points on the unit cell, but
  *     they are different for more complicated elements, such as BDM or
  *     Raviart-Thomas elements.
- *   @item @p{update_q_points = 2}: Compute quadrature points in real
+ *   @item @p{update_q_points}: Compute quadrature points in real
  *     space (not on unit cell).
- *   @item @p{update_gradients = 4}: Transform gradients on unit cell to
+ *   @item @p{update_gradients}: Transform gradients on unit cell to
  *     gradients on real cell.
- *   @item @p{update_jacobians = 8}: Compute jacobian matrices of the
+ *   @item @p{update_jacobians}: Compute jacobian matrices of the
  *     transform between unit and real cell
  *     in the evaluation points.
- *   @item @p{update_JxW_values = 16}: Compute the JxW values (Jacobian
+ *   @item @p{update_JxW_values}: Compute the JxW values (Jacobian
  *     determinant at the quadrature point
  *     times the weight of this point).
- *   @item @p{update_support_points = 32}: Compute the points on the real cell
- *     on which the trial functions are located.
- *     Giving this flag to the
- *     @p{FESubfaceValues} class will result
- *     in an error, since support points are
- *     not useful in that case.
- *   @item @p{update_normal_vectors = 64}: Update the outward normal vectors
+ *   @item @p{update_normal_vectors}: Update the outward normal vectors
  *     to the face relative to this cell.
  *     This flag is only evaluated by
  *     the @p{FEFaceValues} class.
  *     @p{FEValues} class will result in
  *     an error, since normal vectors are
  *     not useful in that case.
- *   @item @p{update_second_derivatives = 128}: Update the second derivatives of the
+ *   @item @p{update_second_derivatives}: Update the second derivatives of the
  *     shape functions on the real cell.
  * @end{itemize}
  *
- * @author Wolfgang Bangerth, 1998, 1999
+ * @author Wolfgang Bangerth, Guido Kanschat, 1998, 1999, 2000, 2001
  */
-enum UpdateFlags
-{
-      update_default            = 0,
-      update_values             = 1,
-      update_q_points           = 2,
-      update_gradients          = 4,
-      update_jacobians          = 8,
-      update_JxW_values         = 16,
-      update_support_points     = 32,
-      update_normal_vectors     = 64,
-      update_second_derivatives = 128
+enum UpdateFlags {
+                                      /**
+                                       * Default: update nothing.
+                                       */
+      update_default  = 0,
+                                      /**
+                                       * Compute quadrature points in real
+                                       * space (not on unit cell).
+                                       */
+      update_q_points = 0x0001,
+
+                                      /**
+                                       * Compute the JxW values (Jacobian
+                                       * determinant at the quadrature point
+                                       * times the weight of this point).
+                                       */
+      update_JxW_values = 0x0002,
+
+                                      /**
+                                       * Update boundary forms on the face.
+                                       * This flag is only evaluated by
+                                       * the #FEFaceValues# class.
+                                       *
+                                       * Giving this flag to the
+                                       * #FEValues# class will result in
+                                       * an error, since boundary
+                                       * forms only exist on the boundary.
+                                       */
+      update_boundary_forms = 0x0004,
+
+                                      /**
+                                       * Compute the values of the
+                                       * shape functions at the
+                                       * quadrature points on the
+                                       * real space cell. For the
+                                       * usual Lagrange elements,
+                                       * these values are equal to
+                                       * the values of the shape
+                                       * functions at the quadrature
+                                       * points on the unit cell, but
+                                       * they are different for more
+                                       * complicated elements, such
+                                       * as BDM or Raviart-Thomas
+                                       * elements.
+                                       */
+      update_values = 0x0010,
+                                      /**
+                                       * Transform gradients on unit cell to
+                                       * gradients on real cell.
+                                       */
+      update_gradients = 0x0020,
+
+                                      /**
+                                       * Update the second derivatives of the
+                                       * shape functions on the real cell.
+                                       */
+      update_second_derivatives = 0x0040,
+
+                                      /**
+                                       * Compute jacobian matrices of the
+                                       * transform between unit and real cell
+                                       * in the evaluation points.
+                                       */
+      update_jacobians = 0x0080,
+
+                                      /**
+                                       * Update co-variant
+                                       * transformation.  This flag
+                                       * is used internally to tell
+                                       * Mapping objects to compute
+                                       * the transformation matrices
+                                       * for co-variant vectors.
+                                       */
+      update_covariant_transformation = 0x0100,
+
+                                      /**
+                                       * Update contra-variant
+                                       * transformation.  This flag
+                                       * is used internally to tell
+                                       * Mapping objects to compute
+                                       * the transformation matrices
+                                       * for contra-variant vectors.
+                                       */
+      update_contravariant_transformation = 0x0200,
+
+                                      /**
+                                       * Update gradients of the jacobian.
+                                       * These are used to compute second
+                                       * derivatives.
+                                       */
+      update_jacobian_grads = 0x0400,
+
+                                      /**
+                                       * Update shape function values
+                                       * of the transformation.
+                                       */
+
+      update_transformation_values = 0x0800,
+
+                                      /** Update gradients of
+                                       * transformation shape
+                                       * functions.
+                                       */
+      update_transformation_gradients = 0x1000,
+
+                                      /**
+                                       * Compute the points on the real cell
+                                       * on which the trial functions are
+                                       * located.
+                                       *
+                                       * Giving this flag to the
+                                       * #FESubfaceValues# class will result
+                                       * in an error, since support points are
+                                       * not useful in that case.
+                                       */
+      update_support_points = 0x2000,
+
+                                      /**
+                                       * Update the outward normal vectors
+                                       * to the face relative to this cell.
+                                       * This flag is only evaluated by
+                                       * the #FEFaceValues# class.
+                                       *
+                                       * Giving this flag to the
+                                       * #FEValues# class will result in
+                                       * an error, since normal vectors are
+                                       * not useful in that case.
+                                       */
+      update_normal_vectors = 0x4000
 };
 
 
+inline
+UpdateFlags&
+operator |= (UpdateFlags& f1, const UpdateFlags& f2)
+{
+  return ((UpdateFlags) (((int)f1) |= f2));
+}
+
+
+inline
+UpdateFlags
+operator | (const UpdateFlags& f1, const UpdateFlags& f2)
+{
+  UpdateFlags result = f1;
+  result |= f2;
+  return result;
+}
+
+inline
+UpdateFlags&
+operator &= (UpdateFlags& f1, const UpdateFlags& f2)
+{
+  return ((UpdateFlags) (((int)f1) &= f2));
+}
+
+
+inline
+UpdateFlags
+operator & (const UpdateFlags& f1, const UpdateFlags& f2)
+{
+  UpdateFlags result = f1;
+  result &= f2;
+  return result;
+}
+
 #endif
index 269dd9f4a9fe929320f399376d43a6c71ec3c41e..6f14488593789f33ec73952109f4a2a752777586 100644 (file)
@@ -1,5 +1,9 @@
 //----------------------------  fe_values.h  ---------------------------
+//    $Id$
 //    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 //    to the file deal.II/doc/license.html for the  text  and
 
 #include <base/exceptions.h>
 #include <base/subscriptor.h>
-#include <lac/full_matrix.h>
-#include <dofs/dof_handler.h>
 #include <base/point.h>
 #include <base/tensor.h>
+#include <base/quadrature.h>
+#include <lac/full_matrix.h>
 #include <grid/tria.h>
+#include <grid/tria_iterator.h>
+#include <dofs/dof_handler.h>
+#include <dofs/dof_accessor.h>
 #include <fe/fe_update_flags.h>
+#include <fe/mapping.h>
 
 template <int dim> class Quadrature;
 
 
 /**
- *  This class offers a multitude of arrays and other fields which are used by
- *  the derived classes @p{FEValues}, @p{FEFaceValues} and @p{FESubfaceValues}.
- *  In principle, it is the
- *  back end of the front end for the unification of a certain finite element
- *  and a quadrature formula which evaluates certain aspects of the finite
- *  element at quadrature points.
- *  
- *  This class is an optimization which avoids evaluating the shape functions
- *  at the quadrature points each time a quadrature takes place. Rather, the
- *  values and gradients (and possibly higher order derivatives in future
- *  versions of this library) are evaluated once and for all on the unit
- *  cell or face before doing the quadrature itself. Only the Jacobian matrix of
- *  the transformation from the unit cell or face to the real cell or face and
- *  the integration points in real space are calculated each time we move on
- *  to a new face.
- *
- *  Actually, this class does none of the evaluations at startup itself; this is
- *  all done by the derived classes. It only offers the basic functionality,
- *  like providing those fields that are common to the derived classes and
- *  access to these fields. Any computations are in the derived classes. See there
- *  for more information.
- *
- *  It has support for the restriction of finite elements to faces of cells or
- *  even to subfaces (i.e. refined faces). For this purpose, it offers an array
- *  of matrices of trial function values, rather than one. Since the value of
- *  a function at a quadrature point is an invariant under the transformation
- *  from the unit cell to the real cell, it is only evaluated once upon startup.
- *  However, when considering the restriction of a finite element to a face of
- *  a cell (using a given quadrature rule), we may be tempted to compute the
- *  restriction to all faces at startup (thus ending in four array of trial
- *  function values in two dimensions, one per face, and even more in higher
- *  dimensions) and let the respective @p{reinit} function of the derived classes
- *  set a number which of the fields is to be taken when the user requests the
- *  function values. This is done through the @p{selected_dataset} variable. See
- *  the derived classes and the @p{get_values} function for the exact usage of
- *  this variable.
- *
- *  For many of the actual computations done by the @p{fill_fe_*} functions of
- *  the @p{FiniteElement} class and its decendants, the values and gradients of
- *  the transformation functions are needed. For example, for the computation
- *  of the real location of a quadrature point from the location on the unit
- *  cell, the values are needed, while for the computation of the Jacobian
- *  matrix the gradient is needed. While for linear elements the transformation
- *  functions coincide with the trial functions, this does not hold for higher
- *  order elements with subparametric mappings and for other types of elements
- *  such as non-conforming ones, etc, such that the precomputed values and
- *  gradients of the trial functions (@p{unit_shape_values} and
- *  @p{unit_shape_grads}) cannot be used for the present purpose.
- *  In principle, these values could be computed each time the @p{fill_fe_*}
- *  function is called; however, this computation is highly redundant, since
- *  only the values on the unit cell and only at the quadrature points are
- *  needed, i.e. they are the same for each cell that @p{fill_fe_*} is called.
- *  Therefore, two additional arrays, @p{unit_shape_values_transform} and
- *  @p{unit_shape_grads_transform} are provided, which are filled upon construction
- *  of an object of this type, which the actual finite element may or may not
- *  use. Later on, the @p{fill_fe_*} functions are passed pointers to these
- *  arrays, which they may use to extract the values and gradients of the
- *  transform functions. If a concrete finite element choses not to use this
- *  field, it shall set its field @p{transform_functions} to zero.
- *
- *  The @p{unit_shape_grads_transform} array is provided by the derived classes
- *  to allow for the inclusion of multiple faces, etc.
- *
+ * Contains all data vectors for @p{FEValues}.
  *
- *  @sect3{Definitions}
+ * This class has been extracted from @p{FEValuesBase} to be handed
+ * over to the fill functions of @p{Mapping} and
+ * @p{FiniteElement}. All data fields are public, but this is not
+ * critical, because access to this object is private in @p{FEValues}.
  *
- *  The Jacobian matrix is defined to be
- *  $$ J_{ij} = {d\xi_i \over dx_j} $$
- *  where the $\xi_i$ are the coordinates on the unit cell and the $x_i$ are
- *  the coordinates on the real cell.
- *  This is the form needed to compute the gradient on the real cell from
- *  the gradient on the unit cell. If we want to transform the area element
- *  $dx dy$ from the real to the unit cell, we have to take the determinant of
- *  the inverse matrix, which is the reciprocal value of the determinant of the
- *  matrix defined above.
- *
- *  The Jacobi matrix is always that of the transformation of unit to real cell.
- *  This applies also to the case where the derived class handles faces or
- *  subfaces, in which case also the transformation of unit to real cell is
- *  needed. However, the Jacobi matrix of the full transformation is always
- *  needed if we want to get the values of the gradients, which need to be
- *  transformed with the full Jacobi matrix, while we only need the
- *  transformation from unit to real face to compute the determinant of the
- *  Jacobi matrix to get the scaling of the surface element $do$.
- *
- *  The question whether to compute the Jacobi matrix as the inverse of another
- *  matrix M (which we can compute from the transformation, while we can't do
- *  so for the Jacobi matrix itself) or its transpose is a bit delicate. It
- *  should be kept in mind that when we compute the gradients in real space
- *  from those on the unit cell, we multiply with the Jacobi matrix
- *  \textit{from the right}; the whole situation is a bit confusing and it
- *  either takes deep though or trial-and-error to do it right. Some more
- *  information on this can be found in the source code documentation for the
- *  @p{FEQ1Mapping<dim>::fill_fe_values} function, where also a small test
- *  program is presented.
- *
- *  The derivatives of the Jacobi matrices at the quadrature points with respect
- *  to unit cell coordinates is stored in the field names
- *  @p{jacobi_matrices_grad}. Since the gradient of a shape function is given by
- *  $\partial_i \phi = \sum_k  \hat\partial_k \hat\phi  J_{ki}$, where
- *  $\hat\partial$ denotes differentiation on the unit cell, the second
- *  derivative of a function is given by
- *  $\partial_j \partial i \phi
- *   =
- *   \hat\partial_l [ (\hat \partial_k \hat\phi) J_{ki} ] J_{lj}
- *   =
- *   (\hat\partial_k \hat\partial_l \hat\phi) J_{ki} J_{lj}
- *   +
- *   (\hat \partial_l \hat\phi) (\hat\partial_l J_{ki}) J_{lj}$.
- *  While we already have access to the Jacobian matrix, the derivatives are
- *  stored in the named field.
- *
- *  
- *  @sect3{Member functions}
+ * @author Guido Kanschat, 2000
+ */
+template <int dim>
+class FEValuesData
+{
+  public:
+                                    /**
+                                     * Initialize all vectors to correct size.
+                                     */
+    void initialize (const unsigned int n_quadrature_points,
+                    unsigned int n_shapes,
+                    const UpdateFlags flags);
+
+                                    /**
+                                     * Storage type for shape values.
+                                     */
+    typedef FullMatrix<double> ShapeVector;
+
+                                    /**
+                                     * Storage type for gradients.
+                                     */
+    typedef typename std::vector<typename std::vector<Tensor<1,dim> > > GradientVector;
+    
+                                    /**
+                                     * Store the values of the shape functions
+                                     * at the quadrature points. Rows in the
+                                     * matrices denote the values of a single
+                                     * shape function at the different points,
+                                     * columns are for a single point with the
+                                     * different shape functions.
+                                     */
+    ShapeVector shape_values;
+
+                                    /**
+                                     * Store the gradients of the shape
+                                     * functions at the quadrature points.
+                                     * For each shape function, there is a vector
+                                     * of the gradients in each quadrature point.
+                                     */
+    GradientVector shape_gradients;
+
+                                    /**
+                                     * Store the 2nd derivatives of the shape
+                                     * functions at the quadrature points.
+                                     * For each shape function, there is a vector
+                                     * of the 2nd gradients in each quadrature point.
+                                     */
+    typename std::vector<typename std::vector<Tensor<2,dim> > >  shape_2nd_derivatives;
+
+                                    /**
+                                     * Store an array of weights times the
+                                     * Jacobi determinant at the quadrature
+                                     * points. This function is reset each time
+                                     * @p{reinit} is called. The Jacobi determinant
+                                     * is actually the reciprocal value of the
+                                     * Jacobi matrices stored in this class,
+                                     * see the general documentation of this
+                                     * class for more information.
+                                     */
+    std::vector<double>       JxW_values;
+
+                                    /**
+                                     * Array of quadrature points. This array
+                                     * is set up upon calling @p{reinit} and
+                                     * contains the quadrature points on the
+                                     * real element, rather than on the
+                                     * reference element.
+                                     */
+    std::vector<Point<dim> >  quadrature_points;
+
+                                    /**
+                                     * List of outward normal vectors at the
+                                     * quadrature points. This field is filled
+                                     * in by the finite element class.
+                                     */
+    std::vector<Point<dim> >  normal_vectors;
+
+                                     /**
+                                     * List of boundary forms at the
+                                     * quadrature points. This field is filled
+                                     * in by the finite element class.
+                                     */
+    std::vector<Tensor<1,dim> >  boundary_forms;
+
+                                     /**
+                                     * Original update flags handed
+                                     * to the constructor of
+                                     * @p{FEValues}.
+                                     */
+    UpdateFlags          update_flags;
+};
+
+
+/**
+ * Common features of @p{FEValues*} classes.
+ *
+ * @p{FEValues*} objects are programming interfaces to finite element
+ * and mapping classes on the one hand side, to cells and quadrature
+ * rules on the other side. The reason for their existence is possible
+ * optimization. Depending on the type of finite element and mapping,
+ * some values can be computed once on the unit cell. Others must be
+ * computed on each cell, but maybe computation of several values at
+ * the same time offers ways for optimization. Since this interlay may
+ * be complex and depends on the actual finite element, it cannot be
+ * left to the applications programmer.
+ *
+ * @p{FEValues*} provides only data handling: computations are left to
+ * objects of type @ref{Mapping} and @ref{FiniteElement}. These
+ * provide functions @p{get_*_data} and @p{fill_*_values} which are
+ * called by the constructor and @p{reinit} functions of
+ * @p{FEValues*}, respectively.
+ *
+ * \subsection{General usage}
+ *
+ * Usually, an object of @p{FEValues*} is used in integration loops
+ * over all cells of a triangulation. To take full advantage of the
+ * optimization features, it should be constructed before the
+ * loop. Then, it must be re-initialized for each grid cell. This is
+ * like a magnifying glass being used to look at one item after the
+ * other. A typical piece of code looks like this:
+ *
+ * \begin{verbatim}
+ * FEValues values (mapping, finite_element, quadrature, flags);
+ * for (cell = dof_handler.begin_active();
+ *      cell != dof_handler.end();
+ *      ++cell)
+ *   {
+ *     values.reinit(cell);
+ *     ...
+ *   }
+ * \end{verbatim}
+ *
+ *
+ *  \subsection{Member functions}
  *
  *  The functions of this class fall into different cathegories:
- *  @begin{itemize}
- *  @item @p{shape_value}, @p{shape_grad}, etc: return one of the values
- *    of this object at a time. In many cases you will want to get
- *    a whole bunch at a time for performance or convenience reasons,
- *    then use the @p{get_*} functions.
+ *  \begin{itemize}
+ *  \item @p{shape_value}, @p{shape_grad}, etc: return one of the values
+ *    of this object at a time. These functions are inlined, so this
+ *    is the suggested access to all finite element values. There should be
+ *    no loss in performance with an optimizing compiler.
  *   
- *  @item @p{get_shape_values}, @p{get_shape_grads}, etc: these return
+ *  \item @p{get_shape_values}, @p{get_shape_grads}, etc: these return
  *    a reference to a whole field. Usually these fields contain
  *    the values of all trial functions at all quadrature points.
  *
- *  @item @p{get_function_values}, @p{get_function_grads}, @p{...}: these
- *    functions offer a simple way to avoid the detour of the
- *    trial functions, if you have a finite element solution (resp. the
- *    vector of values associated with the different trial functions.)
- *    Then you may want to get information from the restriction of
- *    the finite element function to a certain cell, e.g. the values
- *    of the function at the quadrature points or the values of its
- *    gradient. These two functions provide the information needed:
- *    you pass it a vector holding the finite element solution and the
- *    functions return the values or gradients of the finite element
- *    function restricted to the cell which was given last time the
- *    @p{reinit} function was given. The same applies for the functions
- *    returning higher derivatives of the solution.
- *   
- *    Though possible in principle, these functions do not call the
- *    @p{reinit} function, you have to do so yourself beforehand. On the
- *    other hand, a copy of the cell iterator is stored which was used
- *    last time the @p{reinit} function was called. This frees us from
- *    the need to pass the cell iterator again to these two functions,
- *    which guarantees that the cell used here is in sync with that used
- *    for the @p{reinit} function. You should, however, make sure that
- *    nothing substantial happens to the @ref{DoFHandler} object or any
- *    other involved instance between the @p{reinit} and the @p{get_function_*}
- *    functions are called.
+ *  \item @p{get_function_values}, @p{get_function_grads}, @p{...}:
+ *    Compute a finite element function or its derivative
+ *    in quadrature points.
  *
- *  @item @p{reinit}: initialize the @p{FEValues} object for a certain cell.
+ *  \item @p{reinit}: initialize the @p{FEValues} object for a certain cell.
  *    This function is not in the present class but only in the derived
  *    classes and has a variable call syntax. 
  *    See the docs for the derived classes for more information.
- * @end{itemize}
- *
+ * \end{itemize}
  *
- * @sect3{Implementational issues}
  *
- * The @p{FEValues} object keeps track of those fields which really need to
- * be computed, since the computation of the gradients of the trial functions
- * and of other values on each real cell can be quite an expensive thing
- * if it is not needed. The
- * object knows about which fields are needed by the @p{UpdateFlags} object
- * passed through the constructor. In debug mode, the accessor functions, which
- * return values from the different fields, check whether the required field
- * was initialized, thus avoiding use of unitialized data.
+ * \subsection{UpdateFlags}
  *
- * Functions should not assume that one flag is needed for another object as
- * well. For example, the computation of the Jacobi determinant usually
- * requires the computation of the Jacobi matrix. However, functions shall
- * not assume that someone who wants to get the @p{JxW_values} must set the
- * @p{update_jacobians} flag besides the @p{update_JxW_values} flag.
+ * The @ref{UpdateFlags} object handed to the constructor is used to
+ * determine, which of the data fields to compute. This way, it is
+ * possible to avoid expensive computations of useless derivatives.
+ * In the beginning, these flags are processed through the functions
+ * @p{update_once} and @p{update_each} of @ref{Mapping} and
+ * @p{FiniteElement}. All the results are bit-wise or'd and determine
+ * the fields actually computed. This enables @ref{Mapping} and
+ * @p{FiniteElement} to schedule auxiliary data fields for
+ * updating. Still, it is recommended to give ALL needed update flags
+ * to @p{FEValues}.
  *
- * It is also forbidden that the constructor of a class set the
- * @p{update_jacobians} flag if the user specifies @p{update_JxW_values}. This is
- * since derived classes may be able to compute the @p{JxW_values} field without
- * the Jacobian matrices, but need to do the latter since they can't know who
- * set the @p{update_jacobians} flag.
- *
- * @author Wolfgang Bangerth, 1998
+ * @author Wolfgang Bangerth, 1998, Guido Kanschat, 2001
  */
 template <int dim>
-class FEValuesBase
+class FEValuesBase : protected FEValuesData<dim>
 {
   public:
-        
                                     /**
                                      * Number of quadrature points.
                                      */
     const unsigned int n_quadrature_points;
 
                                     /**
-                                     * Total number of shape functions
+                                     * Number of shape functions
                                      * per cell. If we use this base class
                                      * to evaluate a finite element on
                                      * faces of cells, this is still the
@@ -226,49 +229,47 @@ class FEValuesBase
                                      */
     const unsigned int dofs_per_cell;
 
-                                    /**
-                                     * Number of basis functions for the
-                                     * transformation from the unit cell
-                                     * to the real cell. See the docs for
-                                     * more information on this field.
-                                     */
-    const unsigned int n_transform_functions;
     
                                     /**
-                                     * Constructor. Set up the array sizes
-                                     * with @p{n_q_points} quadrature points,
-                                     * @p{n_support_points} support points (on
-                                     * the cell or face), @p{n_dof} trial
-                                     * functions per cell and with the
-                                     * given pattern to update the fields
-                                     * when the @p{reinit} function of the
+                                     * Constructor. Set up the array
+                                     * sizes with @p{n_q_points}
+                                     * quadrature points, @p{n_dof}
+                                     * trial functions per cell and
+                                     * with the given pattern to
+                                     * update the fields when the
+                                     * @p{reinit} function of the
                                      * derived classes is called. The
-                                     * fields themselves are not set up,
-                                     * this must happen in the derived
-                                     * class's constructor, only the sizes
-                                     * are set correctly.
+                                     * fields themselves are not set
+                                     * up, this must happen in the
+                                     * constructor of the derived
+                                     * class.
                                      */
     FEValuesBase (const unsigned int n_q_points,
-                 const unsigned int n_support_points,
                  const unsigned int dofs_per_cell,
-                 const unsigned int n_transform_functions,
                  const unsigned int n_values_array,
                  const UpdateFlags         update_flags,
+                 const Mapping<dim>       &mapping,
                  const FiniteElement<dim> &fe);
 
 
                                     /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at the @p{j} quadrature point
-                                     * on the cell, face or subface selected
-                                     * the last time the @p{reinit} function
-                                     * of the derived class was called.
+                                     * Destructor.
+                                     */
+    ~FEValuesBase ();
+    
+                                    /**
+                                     * Value of the @p{function_no}th shape
+                                     * function at the @p{point_no}th quadrature
+                                     * point on the cell, face or
+                                     * subface selected the last time
+                                     * the @p{reinit} function of the
+                                     * derived class was called.
                                      */
-    double shape_value (const unsigned int function,
-                       const unsigned int quadrature_point) const;
+    double shape_value (const unsigned int function_no,
+                       const unsigned int point_no) const;
 
                                     /**
-                                     * Return a pointer to the matrix holding
+                                     * Pointer to the matrix holding
                                      * all values of shape functions at all
                                      * integration points, on the present cell,
                                      * face or subface selected
@@ -276,11 +277,13 @@ class FEValuesBase
                                      * of the derived class was called.
                                      * For the format of this matrix, see the
                                      * documentation for the matrix itself.
+                                     *
+                                     * Use of this function is deprecated.
                                      */
-    const FullMatrix<double> & get_shape_values () const;
+    const typename FEValuesData<dim>::ShapeVector & get_shape_values () const;
 
                                     /**
-                                     * Return the values of the finite
+                                     * Values of the finite
                                      * element function characterized
                                      * by @p{fe_function} restricted to
                                      * the cell, face or subface selected
@@ -301,7 +304,7 @@ class FEValuesBase
                                      *
                                      * The function assumes that the
                                      * @p{values} object already has the
-                                     * right size.
+                                     * correct size. 
                                      *
                                      * The actual data type of the
                                      * input vector may be either a
@@ -310,16 +313,17 @@ class FEValuesBase
                                      * @p{BlockVector<double,...>}.
                                      */
     template <class InputVector, typename number>
-    void get_function_values (const InputVector &fe_function,
-                             typename std::vector<number>    &values) const;
+    void get_function_values (const InputVectorfe_function,
+                             typename std::vector<number>values) const;
 
                                     /**
                                      * Access to vector valued finite
                                      * element functions.
                                      *
                                      * This function does the same as
-                                     * the other @p{get_function_values},
-                                     * but applied to multi-component
+                                     * the other
+                                     * @p{get_function_values}, but
+                                     * applied to multi-component
                                      * elements.
                                      *
                                      * The actual data type of the
@@ -333,32 +337,39 @@ class FEValuesBase
                              typename std::vector<Vector<number> > &values) const;
 
                                     /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at the @p{j} quadrature point.
-                                     * If you want to get the derivative in
-                                     * one of the coordinate directions, use
-                                     * the appropriate function of the @p{Tensor}
-                                     * class to extract one component. Since
-                                     * only a reference to the gradient's value
-                                     * is returned, there should be no major
+                                     * Gradient of the @p{i}th shape
+                                     * function at the @p{j} quadrature
+                                     * point with respect to real
+                                     * cell coordinates.  If you want
+                                     * to get the derivative in one
+                                     * of the coordinate directions,
+                                     * use the appropriate function
+                                     * of the @pref{Tensor} class to
+                                     * extract one component. Since
+                                     * only a reference to the
+                                     * gradient's value is returned,
+                                     * there should be no major
                                      * performance drawback.
-                                     * The function returns the gradient on the
-                                     * real element, not the reference element.
                                      */
     const Tensor<1,dim> & shape_grad (const unsigned int function,
                                      const unsigned int quadrature_point) const;
 
                                     /** 
-                                     * Return a pointer to the matrix holding
-                                     * all gradients of shape functions at all
-                                     * integration points, on the present cell.
-                                     * For the format of this matrix, see the
-                                     * documentation for the matrix itself.
-                                     */
-    const typename std::vector<typename std::vector<Tensor<1,dim> > > & get_shape_grads () const;
+                                     * Pointer to the matrix holding
+                                     * all gradients of shape
+                                     * functions at all integration
+                                     * points, on the present cell.
+                                     * For the format of this matrix,
+                                     * see the documentation for the
+                                     * matrix itself.
+                                     *
+                                     * Use of this function is
+                                     deprecated.
+                                    */
+    const typename FEValuesData<dim>::GradientVector & get_shape_grads () const;
 
                                     /**
-                                     * Return the gradients of the finite
+                                     * Gradients of the finite
                                      * element function characterized
                                      * by @p{fe_function} restricted to
                                      * @p{cell} at the quadrature points.
@@ -411,28 +422,25 @@ class FEValuesBase
                             typename std::vector<typename std::vector<Tensor<1,dim> > > &gradients) const;
 
                                     /**
-                                     * Return the 2nd derivatives of
-                                     * the @p{i}th shape function at
-                                     * the @p{j} quadrature point. If
-                                     * you want to get the derivatives
-                                     * in one of the coordinate
-                                     * directions, use the
-                                     * appropriate function of the
-                                     * @p{Tensor} class to extract one
-                                     * component. Since only a
-                                     * reference to the derivatives'
-                                     * values is returned, there
-                                     * should be no major performance
-                                     * drawback.  The function
-                                     * returns the derivatives on the
-                                     * real element, not the
-                                     * reference element.
-                                     */
-    const Tensor<2,dim> & shape_2nd_derivative (const unsigned int function,
-                                               const unsigned int quadrature_point) const;
-
-                                    /**
-                                     * Return a pointer to the
+                                     * 2nd derivatives of
+                                     * the @p{function_no}th shape function at
+                                     * the @p{point_no}th quadrature point
+                                     * with respect to real cell
+                                     * coordinates. If you want to
+                                     * get the derivatives in one of
+                                     * the coordinate directions, use
+                                     * the appropriate function of
+                                     * the @p{Tensor} class to
+                                     * extract one component. Since
+                                     * only a reference to the
+                                     * derivative values is returned,
+                                     * there should be no major
+                                     * performance drawback.  */
+    const Tensor<2,dim> & shape_2nd_derivative (const unsigned int function_no,
+                                               const unsigned int point_no) const;
+
+                                    /**
+                                     * Pointer to the
                                      * matrix holding all 2nd
                                      * derivatives of shape functions
                                      * at all integration points, on
@@ -444,15 +452,16 @@ class FEValuesBase
     const typename std::vector<typename std::vector<Tensor<2,dim> > > & get_shape_2nd_derivatives () const;
     
                                     /**
-                                     * Return the tensor of second
-                                     * derivatives of the finite
-                                     * element function characterized
-                                     * by @p{fe_function} restricted to
-                                     * @p{cell} at the quadrature points.
+                                     * Tensor of second derivatives
+                                     * of the finite element function
+                                     * characterized by
+                                     * @p{fe_function} restricted to
+                                     * @p{cell} at the quadrature
+                                     * points.
                                      *
                                      * The function assumes that the
-                                     * @p{second_derivatives} object already has
-                                     * the right size.
+                                     * @p{second_derivatives} object
+                                     * already has the correct size.
                                      *
                                      * The actual data type of the
                                      * input vector may be either a
@@ -461,8 +470,8 @@ class FEValuesBase
                                      * @p{BlockVector<double,...>}.
                                      */
     template <class InputVector>
-    void get_function_2nd_derivatives (const InputVector      &fe_function,
-                                      typename std::vector<Tensor<2,dim> > &second_derivatives) const;
+    void get_function_2nd_derivatives (const InputVectorfe_function,
+                                      typename std::vector<Tensor<2,dim> >second_derivatives) const;
 
     
                                     /**
@@ -492,17 +501,8 @@ class FEValuesBase
                                       typename std::vector<typename std::vector<Tensor<2,dim> > > &second_derivatives) const;
     
                                     /**
-                                     * Return the position of the @p{i}th
+                                     * Position of the @p{i}th
                                      * quadrature point in real space.
-                                     *
-                                     * If this object is used to evaluate
-                                     * finite elements on faces of cells,
-                                     * and for curved boundary cells, using
-                                     * biquadratic or higher mappings
-                                     * of the unit cell to the real cell,
-                                     * these points may not be on the
-                                     * plane submannifold on which the
-                                     * vertices of the face lie.
                                      */
     const Point<dim> & quadrature_point (const unsigned int i) const;
 
@@ -513,72 +513,41 @@ class FEValuesBase
     const typename std::vector<Point<dim> > & get_quadrature_points () const;
 
                                     /**
-                                     * Return the point in real space where
-                                     * the @p{i}th trial function is located
-                                     * (location is in the sense of where it
-                                     * assumes its nominal properties, e.g. at
-                                     * the vertex of a cell, at the center of
-                                     * a line, etc).
-                                     *
-                                     * This function is needed for the
-                                     * interpolation problem: if we want to
-                                     * transfer a continuous function to a
-                                     * finite element function by interpolation
-                                     * we have to take the continuous
-                                     * function's value at the trial function
-                                     * locations.
-                                     *
-                                     * For the evaluation of finite elements on
-                                     * faces of cells, @p{i} is the number
-                                     * of the trial function on the face, not
-                                     * on the cell.
-                                     */
-    const Point<dim> & support_point (const unsigned int i) const;
-
-                                    /**
-                                     * Return a pointer to the vector of points
-                                     * denoting the location of the trial
-                                     * functions.
-                                     */
-    const typename std::vector<Point<dim> > & get_support_points () const;
-    
-                                    /**
-                                     * Return the Jacobi determinant times
-                                     * the weight of the @p{i}th quadrature
-                                     * point.
+                                     * Mapped quadrature weight. This
+                                     * is the Jacobi determinant
+                                     * times the weight of the
+                                     * @p{i}th unit quadrature point.
                                      *
-                                     * If faces of cells are concerned,
-                                     * the jacobi determinant is that of the
-                                     * transformation of the unit face to
-                                     * the present face, not of the unit
-                                     * cell to the real cell (unlike for
-                                     * the @p{jacobi_matrix} array of the
-                                     * derived classes which store the cell
-                                     * transformation's Jacobi matrix in
-                                     * all cases).
+                                     * On faces, this is the mapped
+                                     * surface element.
                                      */
     double JxW (const unsigned int quadrature_point) const;
 
                                     /**
-                                     * Return a pointer to the array holding
+                                     * Pointer to the array holding
                                      * the Jacobi determinant times the
                                      * quadrature weight at the different
                                      * quadrature points.
                                      */
     const std::vector<double> & get_JxW_values () const;
+    
+                                    /**
+                                     * Return the present cell.
+                                     */
+    const typename DoFHandler<dim>::cell_iterator & get_cell() const;
 
                                     /**
-                                     * Return a constant reference to the
-                                     * selected finite element object. This
-                                     * function is inline, so it should
-                                     * be reasonably fast.
+                                     * Constant reference to the
+                                     * selected mapping object.
                                      */
-    const FiniteElement<dim> & get_fe () const;
+    const Mapping<dim> & get_mapping () const;
 
                                     /**
-                                     * Return the present cell.
+                                     * Constant reference to the
+                                     * selected finite element
+                                     * object.
                                      */
-    const typename DoFHandler<dim>::cell_iterator & get_cell() const;
+    const FiniteElement<dim> & get_fe () const;
 
                                     /**
                                      * Determine an estimate for the
@@ -609,10 +578,6 @@ class FEValuesBase
                                     /**
                                      * Exception
                                      */
-    DeclException0 (ExcInternalError);
-                                    /**
-                                     * Exception
-                                     */
     DeclException0 (ExcInvalidUpdateFlag);
                                     /**
                                      * Exception
@@ -621,229 +586,67 @@ class FEValuesBase
     
   protected:
                                     /**
-                                     * Store the values of the shape functions
-                                     * at the quadrature points. Rows in the
-                                     * matrices denote the values of a single
-                                     * shape function at the different points,
-                                     * columns are for a single point with the
-                                     * different shape functions.
-                                     *
-                                     * For cell values, the vector contains
-                                     * only one entry, representing the
-                                     * restriction of the finite element trial
-                                     * space to a cell. For face values, the
-                                     * vector contains as many elements as
-                                     * there are faces, for subfaces the same
-                                     * applies. Which of the matrices is active
-                                     * is determined by the @p{selected_dataset}
-                                     * variable.
-                                     */
-    std::vector<FullMatrix<double> >     shape_values;
-
-                                    /**
-                                     * Store the gradients of the shape
-                                     * functions at the quadrature points.
-                                     * Since unfortunately the full matrix
-                                     * classes of DEAL are not templated,
-                                     * we have to store them in an
-                                     * archetypic style.
-                                     *
-                                     * This field is reset each time
-                                     * @p{reinit} is called and contains the
-                                     * gradients on the real element, rather
-                                     * than on the reference element.
-                                     */
-    typename std::vector<typename std::vector<Tensor<1,dim> > >  shape_gradients;
-
-                                    /**
-                                     * Store the 2nd derivatives of the shape
-                                     * functions at the quadrature points.
-                                     *
-                                     * This field is reset each time
-                                     * @p{reinit} is called and contains the
-                                     * gradients on the real element, rather
-                                     * than on the reference element.
-                                     */
-    typename std::vector<typename std::vector<Tensor<2,dim> > >  shape_2nd_derivatives;
-
-                                    /**
-                                     * Store an array of the weights of the
-                                     * quadrature points. This array is
-                                     * set up upon construction.
-                                     *
-                                     * If faces rather than cells are
-                                     * considered, the weights are stored
-                                     * only once still, since they are
-                                     * not transformed and are thus the same
-                                     * for all faces.
-                                     */
-    std::vector<double>       weights;
-
-                                    /**
-                                     * Store an array of weights times the
-                                     * Jacobi determinant at the quadrature
-                                     * points. This function is reset each time
-                                     * @p{reinit} is called. The Jacobi determinant
-                                     * is actually the reciprocal value of the
-                                     * Jacobi matrices stored in this class,
-                                     * see the general documentation of this
-                                     * class for more information.
-                                     */
-    std::vector<double>       JxW_values;
-
-                                    /**
-                                     * Array of quadrature points. This array
-                                     * is set up upon calling @p{reinit} and
-                                     * contains the quadrature points on the
-                                     * real element, rather than on the
-                                     * reference element.
-                                     */
-    typename std::vector<Point<dim> >  quadrature_points;
-
-                                    /**
-                                     * Array of points denoting the off-point
-                                     * of the trial functions. In real space
-                                     * (no-one seems to need the off-point
-                                     * on the unit cell, so no function is
-                                     * provided for this).
-                                     */
-    typename std::vector<Point<dim> >  support_points;
-    
-                                    /**
-                                     * Store the jacobi matrices at the
-                                     * different quadrature points. This field
-                                     * is set each time @p{reinit} is called.
-                                     *
-                                     * If faces rather than cells are considered
-                                     * this is the Jacobi matrix of the
-                                     * transformation of the unit cell to the
-                                     * real cell, not of the unit face to the
-                                     * face. We need this full matrix for the
-                                     * transformation of the gradients to the
-                                     * real cell.
+                                     * Store the cell selected last time
+                                     * the @p{reinit} function was called
+                                     * to make access
+                                     * to the @p{get_function_*} functions
+                                     * safer.
                                      */
-    typename std::vector<Tensor<2,dim> > jacobi_matrices;
+    DoFHandler<dim>::cell_iterator present_cell;
 
                                     /**
-                                     * Store the derivatives of the jacobi
-                                     * matrices. If @p{J[j][k]} is the jacobi
-                                     * matrix, then the index @p{[i][j][k]}
-                                     * of this field denotes the derivation
-                                     * of @p{J[j][k]} with respect to the
-                                     * @p{i}th variable.
-                                     *
-                                     * The same general remarks apply as for
-                                     * @p{jacobi_matrices}.
+                                     * Storage for the mapping object.
                                      */
-    typename std::vector<Tensor<3,dim> > jacobi_matrices_grad;
+    const SmartPointer<const Mapping<dim> > mapping;
     
                                     /**
-                                     * Store the values of the basis functions
-                                     * of the transformation from unit cell
-                                     * to real cell at the quadrature points.
-                                     *
-                                     * This field stores some data which is not
-                                     * really needed for the assemblage of
-                                     * matrices and vectors but makes that
-                                     * operation much faster. Each time the
-                                     * @p{FEValues::reinit} function calls
-                                     * the @p{FiniteElemenet::fill_fe_values}
-                                     * function, this and the next array are
-                                     * passed. The @p{fill_fe_values} function
-                                     * may or may not use this field.
-                                     *
-                                     * The element @p{(i,j)} denotes the value
-                                     * of the @p{i}th transfer basis function
-                                     * at the @p{j}th quadrature point.
+                                     * Store the finite element for later use.
                                      */
-    std::vector<FullMatrix<double> >     shape_values_transform;
+    const SmartPointer<const FiniteElement<dim> > fe;
 
-                                    /**
-                                     * Store which of the data sets in the
-                                     * @p{shape_values} array is presently
-                                     * active. This variable is set by the
-                                     * @p{reinit} functions of the derived
-                                     * classes. For the exact meaning see
-                                     * there and in the doc for this class.
-                                     */
-    unsigned int         selected_dataset;
     
                                     /**
-                                     * Store which fields are to be updated by
-                                     * the reinit function.
+                                     * Internal data of mapping.
                                      */
-    UpdateFlags          update_flags;
+    SmartPointer<typename Mapping<dim>::InternalDataBase> mapping_data;
 
                                     /**
-                                     * Store the cell selected last time
-                                     * the @p{reinit} function was called
-                                     * to make access
-                                     * to the @p{get_function_*} functions
-                                     * safer.
+                                     * Internal data of finite element.
                                      */
-    typename DoFHandler<dim>::cell_iterator present_cell;
-
-                                    /**
-                                     * Store the finite element for later use.
-                                     */
-    const SmartPointer<const FiniteElement<dim> > fe;
+    SmartPointer<typename Mapping<dim>::InternalDataBase> fe_data;
+    
 };
 
 
 
 /**
- * Represent a finite element evaluated with a specific quadrature rule on
- * a cell.
- *
- * The unit cell is defined to be the tensor product of the interval $[0,1]$
- * in the present number of dimensions. In part of the literature, the convention
- * is used that the unit cell be the tensor product of the interval $[-1,1]$,
- * which is to distinguished properly.
- *
- * Objects of this class store a multitude of different values needed to
- * do the assemblage steps on real cells rather than on the unit cell. Among
- * these values are the values and gradients of the shape functions at the
- * quadrature points on the real and the unit cell, the location of the
- * quadrature points on the real and on the unit cell, the weights of the
- * quadrature points, the Jacobian matrices of the mapping from the unit to
- * the real cell at the quadrature points and so on.
+ * Finite element evaluated in quadrature points of a cell.
  *
- * @author Wolfgang Bangerth, 1998  
+ * This function implements the initialization routines for
+ * @ref{FEValuesBase}, if values in quadrature points of a cell are
+ * needed. For further documentation see this class.
+ * 
+ * @author Wolfgang Bangerth, 1998, Guido Kanschat, 2001
  */
 template <int dim>
 class FEValues : public FEValuesBase<dim>
 {
   public:
-
-
                                     /**
-                                     * Constructor. Fill all arrays with the
-                                     * values of the shape functions of the
-                                     * specified finite element using the
-                                     * quadrature points of the given
-                                     * quadrature rule.
-                                     *
-                                     * This function actually only fills
-                                     * the fields related to the unit face,
-                                     * the fields related to a real face (like
-                                     * gradients, true quadrature points, etc.)
-                                     * need to be initialized using the
-                                     * @p{reinit} function.
-                                     *
-                                     * UPDATE!
-                                     *
-                                     * This function needs a boundary object
-                                     * passed, since this class needs to know
-                                     * how to handle faces which are located
-                                     * on the boundary of the domain. In that
-                                     * case, faces may be curved and the
-                                     * calculation of quadrature points,
-                                     * gradients and the like may need
-                                     * additional effort, depending on the
-                                     * mapping from the unit to the real cell
-                                     * (linear mappings use straight boundary
-                                     * segments, but higher order elements
-                                     * may use other ways.)
+                                     * Constructor. Gets cell
+                                     * independent data from mapping
+                                     * and finite element objects,
+                                     * matching the quadrature rule
+                                     * and update flags.
+                                     */
+    FEValues (const Mapping<dim>       &mapping,
+             const FiniteElement<dim> &fe,
+             const Quadrature<dim>    &quadrature,
+             const UpdateFlags         update_flags);
+
+                                     /**
+                                     * Constructor. Uses @ref{MappingQ1}
+                                     * implicitly.
                                      */
     FEValues (const FiniteElement<dim> &fe,
              const Quadrature<dim>    &quadrature,
@@ -865,109 +668,23 @@ class FEValues : public FEValuesBase<dim>
 
   private:
                                     /**
-                                     * Store the gradients of the shape
-                                     * functions at the quadrature points on
-                                     * the unit cell.
-                                     * This field is set up upon construction
-                                     * of the object and contains the gradients
-                                     * on the reference element.
-                                     */
-    typename std::vector<typename std::vector<Tensor<1,dim> > > unit_shape_gradients;
-
-                                    /**
-                                     * Store the 2nd derivatives of the shape
-                                     * functions at the quadrature points on
-                                     * the unit cell.
-                                     * This field is set up upon construction
-                                     * of the object and contains the
-                                     * derivatives on the reference element.
-                                     */
-    typename std::vector<typename std::vector<Tensor<2,dim> > > unit_shape_2nd_derivatives;
-    
-                                    /**
-                                     * Gradients of the basis
-                                     * functions of the transformation.
-                                     * Analogous to the @p{shape_values_transform}
-                                     * array of the base class.
+                                     * Store the quadrature formula here.
                                      */
-    typename std::vector<typename std::vector<Tensor<1,dim> > > unit_shape_gradients_transform;
-    
-                                    /**
-                                     * Array of quadrature points in the unit
-                                     * cell. This array is set up upon
-                                     * construction and contains the quadrature
-                                     * points on the reference element.
-                                     */
-    typename std::vector<Point<dim> >  unit_quadrature_points;    
+    const Quadrature<dim> quadrature;    
 };
 
 
 /**
- *  This class provides for the data elements needed for the restriction of
- *  finite elements to faces or subfaces. It does no real computations, apart
- *  from initialization of the fields with the right size. It more or
- *  less is only a base class to the @p{FEFaceValues} and @p{FESubfaceValues}
- *  classes which do the real computations. See there for descriptions of
- *  what is really going on.
- *
- *  Since many of the concepts are the same whether we restrict a finite element
- *  to a face or a subface (i.e. the child of the face of a cell), we describe
- *  those common concepts here, rather than in the derived classes.
- *
+ * Extend the interface of @ref{FEValuesBase} by surface values.
  *
- *  @sect3{Technical issues}
+ * On surfaces of mesh cells, normal vectors and boundary forms are
+ * additional values that can be computed. This class provides the
+ * interface to access those. Implementations are in derived classes
+ * @p{FEFaceValues} and @p{FESubfaceValues}.
  *
- *  The unit face is defined to be the tensor product of the interval $[0,1]$
- *  in the present number of dimensions minus one. In part of the literature,
- *  the convention is used that the unit cell/face be the tensor product of the
- *  interval $[-1,1]$, which is to distinguished properly. A subface is the
- *  child of a face; they are numbered in the way laid down in the
- *  @ref{Triangulation} class.
+ * @see{FEValuesBase}
  *
- *  Just like in the @p{FEValues} class, function values and gradients on the unit
- *  face or subface are evaluated at the quadrature points only once, and stored
- *  by the common base class. Being a tensor of rank zero, the function values
- *  remain the same when we want them at the quadrature points on the real cell,
- *  while we get the gradients (a tensor of rank one) by multiplication with the
- *  Jacobi matrix of the transformation, which we need to compute for each cell
- *  and each quadrature point.
- *
- *  However, while in the @p{FEValues} class the quadrature points are always the
- *  same, here we deal with more than one (sub)face. We therefore store the values
- *  and gradients of the trial functions on the unit cell in an array with as
- *  many elements as there are (sub)faces on a cell. The same applies for the
- *  quadrature points on the (sub)faces: for each (sub)face we store the position
- *  on the cell. This way we still need to evaluate unit gradients and function
- *  values only once and only recompute the gradients on the real (sub)face by
- *  multiplication of the unit gradients on the presently selected (sub)face
- *  with the Jacobi matrix.
- *
- *  
- *  When the @p{reinit} function of a derived class is called, only those
- *  gradients, quadrature points etc are transformed to the real cell which
- *  belong to the selected face or subface. The number of the selected face
- *  or subface is stored in the @p{selected_dataset} variable of the base class
- *  such that the @p{shape_value} function can return the shape function's
- *  values on the (sub)face which was last selected by a call to the @p{reinit}
- *  function.
- *
- *  In addition to the complications described above, we need two different
- *  Jacobi matrices and determinants in this context: one for the transformation
- *  of the unit cell to the real cell (this Jacobi matrix is needed to
- *  compute the restriction of the real gradient to the given face) and one
- *  for the transformation of the unit face to the real face or subface
- *  (needed to compute the weight factors for integration along faces). These two
- *  concepts have to be carefully separated.
- *
- *  Finally, we will often need the outward normal to a cell at the quadrature
- *  points. While this could in principle be easily done using the Jacobi
- *  matrices at the quadrature points and the normal vectors to the unit cell
- *  (also easily derived, since they have an appealingly simple form for the unit
- *  cell ;-), it is more efficiently done by the finite element class itself.
- *  For example for (bi-, tri-)linear mappings the normal vector is readily
- *  available without complicated matrix-vector-multiplications.
- *    
- *  @author Wolfgang Bangerth, 1998
+ *  @author Wolfgang Bangerth, 1998, Guido Kanschat, 2000, 2001
  */
 template <int dim>
 class FEFaceValuesBase : public FEValuesBase<dim>
@@ -992,14 +709,14 @@ class FEFaceValuesBase : public FEValuesBase<dim>
                                      * per face.
                                      */
     FEFaceValuesBase (const unsigned int n_q_points,
-                     const unsigned int n_support_points,
                      const unsigned int dofs_per_cell,
-                     const unsigned int n_transform_functions,
                      const unsigned int n_faces_or_subfaces,
                      const UpdateFlags         update_flags,
-                     const FiniteElement<dim> &fe);
-    
-                                    /**
+                     const Mapping<dim>       &mapping,
+                     const FiniteElement<dim> &fe,
+                     const Quadrature<dim-1>& quadrature);
+
+                                    /**
                                      * Return the outward normal vector to
                                      * the cell at the @p{i}th quadrature
                                      * point. The length of the vector
@@ -1007,6 +724,25 @@ class FEFaceValuesBase : public FEValuesBase<dim>
                                      */
     const Point<dim> & normal_vector (const unsigned int i) const;
     
+                                    /**
+                                     * Boundary form of the
+                                     * transformation of the cell at
+                                     * the @p{i}th quadrature point.
+                                     *
+                                     * The boundary form is the cross
+                                     * product of the images of the
+                                     * unit tangential
+                                     * vectors. Therefore, it is the
+                                     * unit normal vector multiplied
+                                     * with the surface
+                                     * element. Since it may be
+                                     * cheaper to compute the
+                                     * boundary form immediately, use
+                                     * this value to integrate
+                                     * @p{n.ds}.
+                                     */
+    const Tensor<1,dim> & boundary_form (const unsigned int i) const;
+    
                                     /**
                                      * Return the list of outward normal
                                      * vectors to the cell at the
@@ -1015,87 +751,22 @@ class FEFaceValuesBase : public FEValuesBase<dim>
     const typename std::vector<Point<dim> > & get_normal_vectors () const;
 
                                     /**
-                                     * Return the present
-                                     * face.
+                                     * Return the list of outward normal
+                                     * vectors times quadrature weights.
                                      */
-    typename DoFHandler<dim>::face_iterator get_face() const;
+    const std::vector<Tensor<1,dim> > & get_boundary_forms () const;
 
                                     /**
-                                     * Determine an estimate for the
-                                     * memory consumption (in bytes)
-                                     * of this object.
+                                     * Return the present
+                                     * face.
                                      */
-    unsigned int memory_consumption () const;
-
+    typename DoFHandler<dim>::face_iterator get_face() const;
 
   protected:
                                     /**
-                                     * Store the gradients of the shape
-                                     * functions at the quadrature points on
-                                     * the unit cell.
-                                     * This field is set up upon construction
-                                     * of the object and contains the gradients
-                                     * on the reference element.
-                                     *
-                                     * There is one element for each face or
-                                     * subface, with indices like that:
-                                     * @p{unit_shape_gradients[face][dof][q_point]}
-                                     */
-    typename std::vector<typename std::vector<typename std::vector<Tensor<1,dim> > > > unit_shape_gradients;
-    
-                                    /**
-                                     * Store the 2nd derivatives of the shape
-                                     * functions at the quadrature points on
-                                     * the unit cell for each face.
-                                     * This field is set up upon construction
-                                     * of the object and contains the
-                                     * derivatives on the reference element.
-                                     */
-    typename std::vector<typename std::vector<typename std::vector<Tensor<2,dim> > > > unit_shape_2nd_derivatives;
-
-                                    /**
-                                     * Gradients of the basis
-                                     * functions of the transformation.
-                                     * Analogous to the @p{shape_values_transform}
-                                     * array of the base class.
-                                     */
-    typename std::vector<typename std::vector<typename std::vector<Tensor<1,dim> > > > unit_shape_gradients_transform;
-
-                                    /**
-                                     * Array of quadrature points on the
-                                     * unit face. This is a copy of the
-                                     * alike field of the quadrature formula
-                                     * passed upon construction.
-                                     */
-    typename std::vector<Point<dim-1> > unit_face_quadrature_points;
-    
-                                    /**
-                                     * Array of quadrature points in the unit
-                                     * cell. This array is set up upon
-                                     * construction and contains the quadrature
-                                     * points on the reference element.
-                                     *
-                                     * There is one element for each face or
-                                     * subface. The points are computed from
-                                     * those on the unit face, but are stored
-                                     * as coordinates on the unit cell.
-                                     */
-    typename std::vector<typename std::vector<Point<dim> > > unit_quadrature_points;
-    
-                                    /**
-                                     * List of values denoting the determinant
-                                     * of the transformation from the unit face
-                                     * to the real face or subface. Needed to
-                                     * actually compute the JxW values.
-                                     */
-    std::vector<double>       face_jacobi_determinants;
-
-                                    /**
-                                     * List of outward normal vectors at the
-                                     * quadrature points. This field is filled
-                                     * in by the finite element class.
+                                     * Store the quadrature formula here.
                                      */
-    typename std::vector<Point<dim> >  normal_vectors;
+    const Quadrature<dim-1> quadrature;
 
                                     /**
                                      * Stores the face or subface,
@@ -1108,66 +779,42 @@ class FEFaceValuesBase : public FEValuesBase<dim>
 };
 
 
-
 /**
- * Represent a finite element evaluated with a specific quadrature rule on
- * the face of a cell.
+ * Finite element evaluated in quadrature points on a face.
+ *
+ * This class adds the functionality of @ref{FEFaceValuesBase} to
+ * @ref{FEValues}; see there for more documentation.
+ *
+ * Since finite element functions and their derivatives may be
+ * discontinuous at cell boundaries, there is no restriction of this
+ * function to a mesh face. But, there are limits of these values
+ * approaching the face from either of the neighboring cells.
  *
- * This class is very similar to the @p{FEValues} class; see there for more
- * documentation. It is, however, a bit more involved: since we want to
- * compute the restriction of finite element functions (here: the basis
- * functions, but a finite element function is obtained by multiplication
- * with the nodal values and summation) to the face of a cell and since
- * finite element functions and especially their gradients need not be
- * continuous at faces, we can not compute the wanted information from
- * the face and a finite element class on the unit cell alone, but we
- * need the real cell as well. In addition, we need to know what number
- * the face is in the set of faces of the cell we want to restrict.
- * Finally, since we may want to use higher order elements with unit cell
- * to real cell mappings of higher than first order, thus applying curved
- * boundaries, we need to know an object describing the boundary of the
- * domain.
- *    
- * @author Wolfgang Bangerth, 1998
+ * @author Wolfgang Bangerth, 1998, Guido Kanschat, 2000, 2001
  */
 template <int dim>
 class FEFaceValues : public FEFaceValuesBase<dim>
 {
   public:
                                     /**
-                                     * Constructor. Fill all arrays with the
-                                     * values of the shape functions of the
-                                     * specified finite element using the
-                                     * quadrature points of the given
-                                     * quadrature rule for the face, which
-                                     * has a dimension one less than the
-                                     * cell.
-                                     *
-                                     * This function actually only fills
-                                     * the fields related to the unit face,
-                                     * the fields related to a real face (like
-                                     * gradients, true quadrature points, etc.)
-                                     * need to be initialized using the
-                                     * @p{reinit} function.
-                                     *
-                                     * UPDATE!
-                                     *
-                                     * This function needs a boundary object
-                                     * passed, since this class needs to know
-                                     * how to handle faces which are located
-                                     * on the boundary of the domain. In that
-                                     * case, faces may be curved and the
-                                     * calculation of quadrature points,
-                                     * gradients and the like may need
-                                     * additional effort, depending on the
-                                     * mapping from the unit to the real cell
-                                     * (linear mappings use straight boundary
-                                     * segments, but higher order elements
-                                     * may use other ways.)
-                                     */
-    FEFaceValues (const FiniteElement<dim> &,
-                 const Quadrature<dim-1> &,
-                 const UpdateFlags);
+                                     * Constructor. Gets cell
+                                     * independent data from mapping
+                                     * and finite element objects,
+                                     * matching the quadrature rule
+                                     * and update flags.
+                                     */
+    FEFaceValues (const Mapping<dim>& mapping,
+                 const FiniteElement<dim>& fe,
+                 const Quadrature<dim-1>& quadrature,
+                 const UpdateFlags update_flags);
+
+                                     /**
+                                     * Constructor. Uses @ref{MappingQ1}
+                                     * implicitly.
+                                     */
+    FEFaceValues (const FiniteElement<dim>& fe,
+                 const Quadrature<dim-1>& quadrature,
+                 const UpdateFlags update_flags);
 
                                     /**
                                      * Reinitialize the gradients, Jacobi
@@ -1181,128 +828,45 @@ class FEFaceValues : public FEFaceValuesBase<dim>
 
 
 /**
- * Represent a finite element evaluated with a specific quadrature rule on
- * the child of the face of a cell.
+ * Finite element evaluated in quadrature points on a face.
  *
- * This class is very similar to the @p{FEFaceValues} class; see there for
- * more documentation. It serves the computation of interface integrals
- * where the cells on both sides of the face have different refinement
- * levels. This is useful for example when we want to integrate the jump
- * of the gradient of the finite element solution along the boundary of
- * a cell to estimate the error. Now, this is not so much of a problem
- * if all neighbors of the cell have the same refinement level, then we
- * will use the @p{FEFaceValues} class, but it gets trickier if one of the
- * cells is more refined than the other.
+ * This class adds the functionality of @ref{FEFaceValuesBase} to
+ * @ref{FEValues}; see there for more documentation.
  *
- * To this end, there seem to be two ways which may be applicable:
- * @begin{itemize}
- * @item Prolong the coarser cell to the finer refinement level: we could
- *   compute the prolongation of the finite element functions to the
- *   child cells and consider the subface a face of one of the child cells.
- *   This approach seems clear and rather simple to implement, however it
- *   has two major drawbacks: first, the finite element space on the
- *   refined (child) cells may not be included in the space of the unrefined
- *   cell, in which case the prolongation would alter information and thus
- *   make computations worthless in the worst case. The second reason is
- *   a practical one, namely that by refining the cell virtually, we would
- *   end up with child cells which do not exist in real and can thus not be
- *   represented in terms of iterators. This would mean that we had to change
- *   the whole interface to the @p{FE*Values} classes to accept cell corner
- *   points by value, etc, instead of relying on appropriate iterators. This
- *   seems to be clumsy and not very suitable to maintain an orthogonal
- *   programming style. Apart from that, we already have iterators, why
- *   shouldn't we use them?
- *   
- * @item Use 'different' quadrature formulae: this second approach is the
- *   way we chose here. The idea is to evaluate the finite element trial
- *   functions on the two cells restricted to the face in question separately,
- *   by restricting the trial functions on the less refined cell to its
- *   face and the functions on the more refined cell to its face as well,
- *   the second face being a child to the first one. Now, if we would use
- *   the same quadrature formula for both restrictions, we would end up with
- *   the same number of quadrature points, but at different locations since
- *   they were evaluated on faces of different size. We therefore use the
- *   original quadrature formula for the refined cell and a modified one for
- *   the coarse cell, the latter being modified in such a way that the
- *   locations of the quadrature points match each other.
+ * This class is used for faces lying on a refinement edge. In this
+ * case, the neighboring cell is refined. To be able to compute
+ * differences between interior and exterior function values, the
+ * refinement of the neighboring cell must be simulated on this
+ * cell. This is achieved by applying a quadrature rule that simulates
+ * the refinement. The resulting data fields are split up to reflect
+ * the refinement structure of the neighbor: a subface number
+ * corresponds to the number of the child of the neighboring face.
  *
- *   An example may shed more light onto this: assume we are in two dimension,
- *   we have a cell of which we want to evaluate a finite element function on
- *   face zero, and neighbor zero is refined (then so is face zero). The
- *   quadrature formula shall be the Simpson rule with quadrature points
- *   $0$, $0.5$ and $1$. The present cell shall be the unit cell, without
- *   loss of generality. Then the face in question is the line $(0,0)$ to
- *   $(1,0)$, subdivided into two subfaces. We will then compute the
- *   restriction of the present cell to the common subface $(0,0)$ to
- *   $(0.5,5)$ by using a modified quadrature formulae with quadrature
- *   points $(0,0)$, $(0.25,0)$ and $(0.5,0)$ (coordinates on the cell)
- *   which is not symmetric as was the original quadrature rule for a line.
- *   This modified quadrature rule is computed by projection onto the subface
- *   using the @p{QProjector<dim>::project_to_subface()} function. The neighboring
- *   cell, being refined once more than the present is evaluated with the
- *   quadrature formula projected to the common face, but using the original
- *   quadrature formula. This way, the locations of the quadrature points
- *   on both sides of the common face match each other.
- * @end{itemize}
- *
- * For a use of this mechanism, take a look of the code in the error
- * estimation hierarchy, since there often the jump of a finite element
- * function's gradient across cell boundaries is computed.
- *
- *
- * @sect3{Other implementational subjects}
- *
- * It does not seem useful to ask for the off-points of the trial functions
- * (name @p{support_points} in the @p{FEValuesBase} class) for subfaces. These are
- * therefore not supported for this class and should throw an error if
- * accessed. Specifying @p{update_support_points} for the @p{UpdateFlags} in the
- * constructor is disallowed.
- *
- * The values of the trial functions on the subfaces are stored as an array
- * of matrices, each matrix representing the values of the trial functions at
- * the quadrature points at one subface. The ordering is as follows: the values
- * of the trial functions at face @p{face}, subface @p{subface} are stored in
- * @p{shape_values[face*(1<<(dim-1))+subface]}. The same order applies for the
- * quadrature points on the unit cell, which are stored in the
- * @p{unit_quadrature_points} array. Note that @p{1<<(dim-1)} is the number of
- * subfaces per face.
- *
- * One subtle problem is that if a face is at the boundary, then computation
- * of subfaces may be a bit tricky, since we do not know whether the user
- * intends to better approximate the boundary by the subfaces or only wants
- * to have the subfaces be one part of the mother face. However, it is hardly
- * conceivable what someone wants when using this class for faces at the
- * boundary, in the end this class was invented to facilitate integration
- * along faces with cells of different refinement levels on both sides,
- * integration along the boundary of the domain is better done through
- * the @p{FEFaceValues} class. For this reason, calling @p{reinit} with a
- * boundary face will result in an error.
- * 
- * @author Wolfgang Bangerth, 1998
+ * @author Wolfgang Bangerth, 1998, Guido Kanschat, 2000, 2001
  */
 template <int dim>
 class FESubfaceValues : public FEFaceValuesBase<dim>
 {
   public:
                                     /**
-                                     * Constructor. Fill all arrays with the
-                                     * values of the shape functions of the
-                                     * specified finite element using the
-                                     * quadrature points of the given
-                                     * quadrature rule for the face, which
-                                     * has a dimension one less than the
-                                     * cell.
-                                     *
-                                     * This function actually only fills
-                                     * the fields related to the unit face,
-                                     * the fields related to a real face (like
-                                     * gradients, true quadrature points, etc.)
-                                     * need to be initialized using the
-                                     * @p{reinit} function.
+                                     * Constructor. Gets cell
+                                     * independent data from mapping
+                                     * and finite element objects,
+                                     * matching the quadrature rule
+                                     * and update flags.
                                      */
-    FESubfaceValues (const FiniteElement<dim> &fe,
-                    const Quadrature<dim-1>  &face_quadrature,
-                    const UpdateFlags         update_flags);
+    FESubfaceValues (const Mapping<dim>& mapping,
+                    const FiniteElement<dim>& fe,
+                    const Quadrature<dim-1>& face_quadrature,
+                    const UpdateFlags update_flags);
+
+                                     /**
+                                     * Constructor. Uses @ref{MappingQ1}
+                                     * implicitly.
+                                     */
+    FESubfaceValues (const FiniteElement<dim>& fe,
+                    const Quadrature<dim-1>& face_quadrature,
+                    const UpdateFlags update_flags);
 
                                     /**
                                      * Reinitialize the gradients, Jacobi
@@ -1332,68 +896,56 @@ class FESubfaceValues : public FEFaceValuesBase<dim>
 
 template <int dim>
 inline
-const FullMatrix<double> & FEValuesBase<dim>::get_shape_values () const
+double
+FEValuesBase<dim>::shape_value (const unsigned int i,
+                               const unsigned int j) const
 {
   Assert (update_flags & update_values, ExcAccessToUninitializedField());
-  Assert (selected_dataset<shape_values.size(),
-         ExcIndexRange (selected_dataset, 0, shape_values.size()));
-  return shape_values[selected_dataset];
-};
-
+  return shape_values(i,j);
+}
 
 
 template <int dim>
 inline
-const typename std::vector<typename std::vector<Tensor<1,dim> > > &
-FEValuesBase<dim>::get_shape_grads () const
+const Tensor<1,dim> &
+FEValuesBase<dim>::shape_grad (const unsigned int i,
+                              const unsigned int j) const
 {
+  Assert (i<shape_gradients.size(),
+         ExcIndexRange (i, 0, shape_gradients.size()));
+  Assert (j<shape_gradients[i].size(),
+         ExcIndexRange (j, 0, shape_gradients[i].size()));
   Assert (update_flags & update_gradients, ExcAccessToUninitializedField());
-  return shape_gradients;
-};
-
 
-
-template <int dim>
-inline
-const typename std::vector<typename std::vector<Tensor<2,dim> > > &
-FEValuesBase<dim>::get_shape_2nd_derivatives () const
-{
-  Assert (update_flags & update_second_derivatives, ExcAccessToUninitializedField());
-  return shape_2nd_derivatives;
+  return shape_gradients[i][j];
 };
 
 
 
 template <int dim>
 inline
-const typename std::vector<Point<dim> > &
-FEValuesBase<dim>::get_quadrature_points () const
+const Tensor<2,dim> &
+FEValuesBase<dim>::shape_2nd_derivative (const unsigned int i,
+                                        const unsigned int j) const
 {
-  Assert (update_flags & update_q_points, ExcAccessToUninitializedField());
-  return quadrature_points;
-};
-
-
+  Assert (i<shape_2nd_derivatives.size(),
+         ExcIndexRange (i, 0, shape_2nd_derivatives.size()));
+  Assert (j<shape_2nd_derivatives[i].size(),
+         ExcIndexRange (j, 0, shape_2nd_derivatives[i].size()));
+  Assert (update_flags & update_second_derivatives, ExcAccessToUninitializedField());
 
-template <int dim>
-inline
-const typename std::vector<Point<dim> > &
-FEValuesBase<dim>::get_support_points () const
-{
-  Assert (update_flags & update_support_points, ExcAccessToUninitializedField());
-  return support_points;
-};
+  return shape_2nd_derivatives[i][j];
+}
 
 
 
 template <int dim>
 inline
-const std::vector<double> &
-FEValuesBase<dim>::get_JxW_values () const
+const typename DoFHandler<dim>::cell_iterator &
+FEValuesBase<dim>::get_cell() const
 {
-  Assert (update_flags & update_JxW_values, ExcAccessToUninitializedField());
-  return JxW_values;
-};
+  return present_cell;
+}
 
 
 
@@ -1403,32 +955,33 @@ const FiniteElement<dim> &
 FEValuesBase<dim>::get_fe () const
 {
   return *fe;
-};
-
+}
 
 
 template <int dim>
 inline
-const typename DoFHandler<dim>::cell_iterator &
-FEValuesBase<dim>::get_cell() const
+const Mapping<dim> & 
+FEValuesBase<dim>::get_mapping () const
 {
-  return present_cell;
-};
+  return *mapping;
+}
+
 
 /*------------------------ Inline functions: FEFaceValuesBase --------------------*/
 
+
 template <int dim>
-inline
-const typename std::vector<Point<dim> > &
-FEFaceValuesBase<dim>::get_normal_vectors () const
+const Point<dim> &
+FEFaceValuesBase<dim>::normal_vector (const unsigned int i) const
 {
+  Assert (i<normal_vectors.size(), ExcIndexRange(i, 0, normal_vectors.size()));
   Assert (update_flags & update_normal_vectors,
-         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-  return normal_vectors;
+         FEValuesBase<dim>::ExcAccessToUninitializedField());
+  
+  return normal_vectors[i];
 };
 
 
-
 template <int dim>
 inline
 typename DoFHandler<dim>::face_iterator
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fed9d47ca019f9419857d58aaa030951685e49b3 100644 (file)
@@ -0,0 +1,372 @@
+//----------------------------  mapping.h  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  mapping.h  ---------------------------
+#ifndef __deal2__mapping_h
+#define __deal2__mapping_h
+
+
+#include <cmath>
+#include <base/point.h>
+#include <base/subscriptor.h>
+#include <grid/tria.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_update_flags.h>
+
+template <int dim> class Quadrature;
+template <int dim> class FEValuesData;
+template <int dim> class FEValues;
+
+/**
+ * Abstract basis class for mapping classes.
+ *
+ * The interface for filling the tables of @ref{FEValues} is provided.
+ * Everything else has to happen in derived classes.
+ *
+ * The following paragraph applies to the implementation of
+ * @ref{FEValues}. Usage of the class is as follows: first, call the
+ * functionss @p{update_once} and @p{update_each} with the update
+ * flags you need.  Then call @p{get_*_data} and with the result of
+ * @p{update_once}. This will initialize some internal data
+ * structures.  On the first cell, call @p{fill_fe_*_values} with the
+ * result of @p{update_once}. Finally, on each cell, use
+ * @p{fill_fe_*_values} with the result of @p{update_each} to compute
+ * values for a special cell.
+ * 
+ * @author Guido Kanschat, 2000
+ */
+template <int dim>
+class Mapping : public Subscriptor
+{
+  public:
+                                  /**
+                                   * Class for internal data of finite
+                                   * element and mapping objects.
+                                   */
+    class InternalDataBase: public Subscriptor
+    {
+      public:
+                                      /**
+                                       * Constructor. Sets
+                                       * @p{UpdateFlags} to
+                                       * @p{update_default} and
+                                       * @p{first_cell} to @p{true}.
+                                       */
+        InternalDataBase ();
+      
+                                        /**
+                                         * Virtual destructor for
+                                         * derived classes
+                                         */
+       virtual ~InternalDataBase ();
+
+                                        /**
+                                         * Values updated by the constructor or
+                                         * by reinit.
+                                         */
+       UpdateFlags          update_flags;
+       
+                                        /**
+                                         * Values computed by
+                                         * constructor.
+                                         */
+       UpdateFlags          update_once;
+
+                                        /**
+                                         * Values updated on each
+                                         * cell by reinit.
+                                         */
+       UpdateFlags          update_each;
+
+                                        /**
+                                         * If @p{first_cell==true}
+                                         * this function returns
+                                         * @p{update_flags},
+                                         * i.e. @p{update_once|update_each}.
+                                         * If @p{first_cell==false}
+                                         * it returns
+                                         * @p{update_each}.
+                                         */
+       UpdateFlags  current_update_flags() const;
+
+                                        /**
+                                         * Determine if this is the first
+                                         * cell visited. Then, we need to
+                                         * use @p{update_once} to fill
+                                         * cell-independent fields.
+                                         */
+       bool first_cell;
+    };
+    
+    
+                                    /**
+                                     * Virtual destructor.
+                                     */
+    virtual ~Mapping ();
+                                    /**
+                                     * Prepare internal data
+                                     * structures and fill in values
+                                     * independent of the cell.
+                                     */
+    virtual InternalDataBase*
+    get_data (const UpdateFlags,
+             const Quadrature<dim>& quadrature) const = 0;
+
+                                    /**
+                                     * Prepare internal data
+                                     * structure for transformation
+                                     * of faces and fill in values
+                                     * independent of the cell.
+                                     */
+    virtual InternalDataBase*
+    get_face_data (const UpdateFlags flags,
+                  const Quadrature<dim-1>& quadrature) const = 0;
+                                    /**
+                                     * Prepare internal data
+                                     * structure for transformation
+                                     * of children of faces and fill
+                                     * in values independent of the
+                                     * cell.
+                                     */
+    virtual InternalDataBase*
+    get_subface_data (const UpdateFlags flags,
+                     const Quadrature<dim-1>& quadrature) const = 0;
+
+
+                                    /**
+                                     * Fill the transformation fields
+                                     * of @p{FEValues}.  Given a grid
+                                     * cell and the quadrature points
+                                     * on the unit cell, it computes
+                                     * all values specified by
+                                     * @p{flags}. The arrays to be
+                                     * filled have to have the
+                                     * correct size.
+                                     *
+                                     * Values are split into three
+                                     * groups: first,
+                                     * @p{quadrature_points} and
+                                     * @p{JxW_values} are
+                                     * filled with the quadrature
+                                     * rule transformed to the
+                                     * cell in physical space.
+                                     *
+                                     * The second group contains the
+                                     * matrices needed to transform
+                                     * vector-valued functions,
+                                     * namely
+                                     * @p{covariant_transformation},
+                                     * @p{contravariant_transformation} and the 
+                                     * derivatives
+                                     * @p{covariant_grads}.
+                                     *
+                                     */
+    virtual void
+    fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>& quadrature,
+                   InternalDataBase& internal,
+                   std::vector<Point<dim> >        &quadrature_points,
+                   std::vector<double>             &JxW_values) const = 0;
+
+                                    /**
+                                     * Performs the same as @p{fill_fe_values}
+                                     * on a face.
+                                     * Additionally, @p{boundary_form} and
+                                     * @p{normal_vectors} can be
+                                     * computed on surfaces. The
+                                     * boundary form is the vector
+                                     * product of the image of
+                                     * coordinate vectors on the
+                                     * surface of the unit
+                                     * cell. It is a
+                                     * vector normal to the surface,
+                                     * pointing outwards and having
+                                     * the length of the surface
+                                     * element.
+                                     * Therefore, it is more economic
+                                     * to use the boundary form
+                                     * instead of the product of the
+                                     * unit normal and the
+                                     * transformed quadrature weight.
+                                     */
+    virtual void
+    fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int face_no,
+                        const Quadrature<dim-1>& quadrature,
+                        InternalDataBase& internal,
+                        std::vector<Point<dim> >        &quadrature_points,
+                        std::vector<double>             &JxW_values,
+                        std::vector<Tensor<1,dim> >        &boundary_form,
+                        std::vector<Point<dim> >        &normal_vectors) const = 0;
+
+                                    /**
+                                     * See above.
+                                     */
+    virtual void
+    fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int face_no,
+                           const unsigned int sub_no,
+                           const Quadrature<dim-1>& quadrature,
+                           InternalDataBase& internal,
+                           std::vector<Point<dim> >        &quadrature_points,
+                           std::vector<double>             &JxW_values,
+                           std::vector<Tensor<1,dim> >        &boundary_form,
+                           std::vector<Point<dim> >        &normal_vectors) const = 0;
+
+
+                                    /**
+                                     * Tranform a field of covariant vectors.
+                                     * There must be one vector for each quadrature
+                                     * point. Alternatively, for faces and subfaces,
+                                     * the first quadrature point can be
+                                     * given as additional argument.
+                                     */
+    virtual void transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                                     const std::vector<Tensor<1,dim> > &src,
+                                     const InternalDataBase& internal,
+                                     const unsigned int src_offset) const = 0;
+    
+                                    /**
+                                     * Tranform a field of contravariant vectors.
+                                     * There must be one vector for each quadrature
+                                     * point. Alternatively, for faces and subfaces,
+                                     * the first quadrature point can be
+                                     * given as additional argument.
+                                     */
+    virtual void transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                                         const std::vector<Tensor<1,dim> > &src,
+                                         const InternalDataBase& internal,
+                                     const unsigned int src_offset) const = 0;
+    
+                                    /**
+                                     * Tranform a field of covariant vectors.
+                                     * There must be one vector for each quadrature
+                                     * point. Alternatively, for faces and subfaces,
+                                     * the first quadrature point can be
+                                     * given as additional argument.
+                                     */
+    virtual void transform_covariant (std::vector<Point<dim> >       &dst,
+                                     const std::vector<Point<dim> > &src,
+                                     const InternalDataBase& internal,
+                                     const unsigned int src_offset) const = 0;
+    
+                                    /**
+                                     * Tranform a field of contravariant vectors.
+                                     * There must be one vector for each quadrature
+                                     * point. Alternatively, for faces and subfaces,
+                                     * the first quadrature point can be
+                                     * given as additional argument.
+                                     */
+    virtual void transform_contravariant (std::vector<Point<dim> >       &dst,
+                                         const std::vector<Point<dim> > &src,
+                                         const InternalDataBase& internal,
+                                         const unsigned int src_offset) const = 0;
+
+                                    /**
+                                     * Transforms the point @p{p} on
+                                     * the unit cell to the point
+                                     * @p{p_real} on the real cell
+                                     * @p{cell} and returns @p{p_real}.
+                                     *
+                                     * Give pointer @p{m_data} if the
+                                     * shape values at point @p{p}
+                                     * and the mapping support points
+                                     * of the cell are computed
+                                     * earlier. This pointer is
+                                     * mainly for internal use (used
+                                     * by the
+                                     * @p{transform_real_to_unit_cell}
+                                     * function). As default this
+                                     * pointer is set to 0 and the
+                                     * shape values and the mapping
+                                     * support points are compute
+                                     * within this function.
+                                     */
+    virtual Point<dim> transform_unit_to_real_cell (
+      const typename Triangulation<dim>::cell_iterator cell,
+      const Point<dim> &p,
+      const InternalDataBase *const m_data=0) const=0;
+    
+                                    /**
+                                     * Transforms the point @p{p} on
+                                     * the real cell to the point
+                                     * @p{p_unit} on the unit cell
+                                     * @p{cell} and returns @p{p_unit}.
+                                     */
+    virtual Point<dim> transform_real_to_unit_cell (
+      const typename Triangulation<dim>::cell_iterator cell,
+      const Point<dim> &p) const=0;
+
+                                    /**
+                                     * Indicate fields to be updated in the
+                                     * constructor of @ref{FEValues}. Especially,
+                                     * fields not asked for by @ref{FEValues}, but
+                                     * computed for efficiency reasons will be
+                                     * notified here.
+                                     */
+    virtual UpdateFlags update_once (const UpdateFlags) const = 0;
+    
+                                    /**
+                                     * The same as @p{update_once},
+                                     * but for the flags to be updated for
+                                     * each grid cell.
+                                     */
+    virtual UpdateFlags update_each (const UpdateFlags) const = 0;
+    
+                                    /**
+                                     * Exception
+                                     */
+    DeclException0 (ExcInvalidData);
+
+  protected:
+                                    /**
+                                     * Vector of unit normal
+                                     * directions. The entry divided by
+                                     * 2 determines the non-zero
+                                     * component of the normal vector:
+                                     * 0 means x, 1 means y and 2 means
+                                     * z. The entry modulo 2 determines
+                                     * the orientation of the first
+                                     * tangential vector in the
+                                     * corss-product. This has to be
+                                     * chosen such that the normal
+                                     * vector points outwards.
+                                     *
+                                     * This variable is purely for
+                                     * internal use and its values are
+                                     * determined by its usage in the
+                                     * source code.
+                                     */
+    static const unsigned int normal_directions[2*dim];    
+};
+
+
+
+
+template <int dim>
+inline
+UpdateFlags
+Mapping<dim>::InternalDataBase::current_update_flags() const
+{
+  if (first_cell)
+    {
+      Assert(update_flags==(update_once|update_each), ExcInternalError());
+      return update_flags;
+    }
+  else
+    return update_each;
+  
+  return update_default;
+}
+
+
+
+#endif
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..be6c2e2374161c2b3cc7bcd8da0dead0149097ed 100644 (file)
@@ -0,0 +1,258 @@
+//----------------------------  mapping_Cartesian.h  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  mapping_Cartesian.h  ---------------------------
+#ifndef __deal2__mapping_cartesian_h
+#define __deal2__mapping_cartesian_h
+
+
+#include <cmath>
+#include <fe/mapping.h>
+
+/**
+ * Mapping of an axis-parallel cell.
+ *
+ * This class maps the unit cell to a grid cell with surfaces parallel
+ * to the coordinate lines/planes. It is specifically developed for
+ * cartesian meshes. Apply this mapping to a general mesh to get
+ * strange results.
+ *
+ * @author Guido Kanschat, 2001
+ */
+template <int dim>
+class MappingCartesian : public Mapping<dim>
+{
+  public:
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Quadrature<dim>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_face_data (const UpdateFlags flags,
+                  const Quadrature<dim-1>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_subface_data (const UpdateFlags flags,
+                     const Quadrature<dim-1>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_values (const DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>& quadrature,
+                   Mapping<dim>::InternalDataBase &mapping_data,
+                   std::vector<Point<dim> >        &quadrature_points,
+                   std::vector<double>             &JxW_values) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int face_no,
+                        const Quadrature<dim-1>& quadrature,
+                        typename Mapping<dim>::InternalDataBase &mapping_data,
+                        std::vector<Point<dim> >        &quadrature_points,
+                        std::vector<double>             &JxW_values,
+                        std::vector<Tensor<1,dim> >        &boundary_form,
+                        std::vector<Point<dim> >        &normal_vectors) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int face_no,
+                           const unsigned int sub_no,
+                           const Quadrature<dim-1>& quadrature,
+                           typename Mapping<dim>::InternalDataBase &mapping_data,
+                           std::vector<Point<dim> >        &quadrature_points,
+                           std::vector<double>             &JxW_values,
+                           std::vector<Tensor<1,dim> >        &boundary_form,
+                           std::vector<Point<dim> >        &normal_vectors) const ;
+
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                        const std::vector<Tensor<1,dim> > &src,
+                        const Mapping<dim>::InternalDataBase &mapping_data,
+                        const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                            const std::vector<Tensor<1,dim> > &src,
+                            const Mapping<dim>::InternalDataBase &mapping_data,
+                            const unsigned int src_offset) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_covariant (std::vector<Point<dim> >       &dst,
+                        const std::vector<Point<dim> > &src,
+                        const Mapping<dim>::InternalDataBase &mapping_data,
+                        const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_contravariant (std::vector<Point<dim> >       &dst,
+                            const std::vector<Point<dim> > &src,
+                            const Mapping<dim>::InternalDataBase &mapping_data,
+                            const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Transforms the point @p{p} on
+                                     * the unit cell to the point
+                                     * @p{p_real} on the real cell
+                                     * @p{cell} and returns @p{p_real}.
+                                     */
+    virtual Point<dim> transform_unit_to_real_cell (
+      const typename Triangulation<dim>::cell_iterator cell,
+      const Point<dim> &p,
+      const typename Mapping<dim>::InternalDataBase *const mdata=0) const;
+
+                                    /**
+                                     * Transforms the point @p{p} on
+                                     * the real cell to the point
+                                     * @p{p_unit} on the unit cell
+                                     * @p{cell} and returns @p{p_unit}.
+                                     *
+                                     * Uses Newton iteration and the
+                                     * @p{transform_unit_to_real_cell}
+                                     * function.
+                                     */
+    virtual Point<dim> transform_real_to_unit_cell (
+      const typename Triangulation<dim>::cell_iterator cell,
+      const Point<dim> &p) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual UpdateFlags update_once (const UpdateFlags) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual UpdateFlags update_each (const UpdateFlags) const;
+    
+                                    /**
+                                     * Exception
+                                     */
+    DeclException0 (ExcInvalidData);
+
+  protected:
+                                    /**
+                                     * Implementation of the
+                                     * covariant transformation.
+                                     */
+    template <typename tensor_>
+    void covariant_transformation (std::vector<tensor_>       &dst,
+                                  const std::vector<tensor_> &src,
+                                  const Mapping<dim>::InternalDataBase &mapping_data,
+                                  const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the
+                                     * contravariant transformation.
+                                     */
+    template <typename tensor_>
+    void contravariant_transformation (std::vector<tensor_>       &dst,
+                                      const std::vector<tensor_> &src,
+                                      const Mapping<dim>::InternalDataBase &mapping_data,
+                                      const unsigned int src_offset) const;
+
+                                    /** 
+                                     * Storage for internal data of
+                                     * d-linear transformation.
+                                     */
+    class InternalData : public Mapping<dim>::InternalDataBase
+    {
+      public:
+                                        /**
+                                         * Constructor.
+                                         */
+       InternalData (const Quadrature<dim>& quadrature);
+
+                                        /**
+                                         * Length of the cell in
+                                         * different coordinate
+                                         * directions.
+                                         */
+       std::vector<double> length;
+
+                                        /**
+                                         * Vector of all quadrature
+                                         * points. Especially, all
+                                         * points of all faces.
+                                         */
+       std::vector<Point<dim> > quadrature_points;
+       
+                                        /**
+                                         * Unit tangential vectors. Used
+                                         * for the computation of
+                                         * boundary forms and normal
+                                         * vectors.
+                                         *
+                                         * Filled once.
+                                         */
+        std::vector<std::vector<Tensor<1,dim> > > unit_tangentials;
+       
+                                        /**
+                                         * Auxuliary vectors for internal use.
+                                         */
+        std::vector<std::vector<Tensor<1,dim> > > aux;
+    };
+    
+                                    /**
+                                     * Do the computation for the
+                                     * @p{fill_*} functions.
+                                     */
+    void compute_fill (const typename DoFHandler<dim>::cell_iterator
+                      &cell,
+                      unsigned int face_no,
+                      unsigned int sub_no,
+                      InternalData& data,
+                      std::vector<Point<dim> > &quadrature_points,
+                      std::vector<Point<dim> >& normal_vectors) const;
+};
+
+
+#endif
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2874fae674a5bb9b0c6a92a3f5f0b9fa98473009 100644 (file)
@@ -0,0 +1,488 @@
+//----------------------------  mapping_q.h  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  mapping_q.h  ---------------------------
+#ifndef __deal2__mapping_q_h
+#define __deal2__mapping_q_h
+
+
+#include <fe/mapping_q1.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary.h>
+
+
+template <int dim> class TensorProductPolynomials;
+class LagrangeEquidistant;
+
+
+
+//TODO: fill_fe_face_values should exist in a version doing all faces
+// to save initialization time.
+
+/**
+ * Mapping class that uses Qp-mappings on boundary AND on inner
+ * cells. The mapping shape functions make use of tensor product
+ * polynomials with equidistant support points.
+ *
+ * Make sure elsewhere (e.g. in FEValues) that on inner cells only Q1
+ * mappings are used.
+ *  
+ * @author Ralf Hartmann, Guido Kanschat 2000, 2001
+ */
+template <int dim>
+class MappingQ : public MappingQ1<dim>
+{
+  public:
+                                    /**
+                                     * Constructor.  @p{p} gives the
+                                     * degree of mapping polynomials
+                                     * on boundary cells.
+                                     */
+    MappingQ (unsigned int p);
+
+                                    /**
+                                     * Destructor.
+                                     */
+    ~MappingQ ();
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Quadrature<dim>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_face_data (const UpdateFlags flags,
+                  const Quadrature<dim-1>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_subface_data (const UpdateFlags flags,
+                      const Quadrature<dim-1>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_values (const DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>& quadrature,
+                   Mapping<dim>::InternalDataBase &mapping_data,
+                   std::vector<Point<dim> >        &quadrature_points,
+                   std::vector<double>             &JxW_values) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int face_no,
+                        const Quadrature<dim-1>& quadrature,
+                        typename Mapping<dim>::InternalDataBase &mapping_data,
+                        std::vector<Point<dim> >        &quadrature_points,
+                        std::vector<double>             &JxW_values,
+                        std::vector<Tensor<1,dim> >        &exterior_form,
+                        std::vector<Point<dim> >        &normal_vectors) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int face_no,
+                           const unsigned int sub_no,
+                           const Quadrature<dim-1>& quadrature,
+                           typename Mapping<dim>::InternalDataBase &mapping_data,
+                           std::vector<Point<dim> >        &quadrature_points,
+                           std::vector<double>             &JxW_values,
+                           std::vector<Tensor<1,dim> >        &exterior_form,
+                           std::vector<Point<dim> >        &normal_vectors) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                        const std::vector<Tensor<1,dim> > &src,
+                        const Mapping<dim>::InternalDataBase &mapping_data,
+                        const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                            const std::vector<Tensor<1,dim> > &src,
+                            const Mapping<dim>::InternalDataBase &mapping_data,
+                            const unsigned int src_offset) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_covariant (std::vector<Point<dim> >       &dst,
+                        const std::vector<Point<dim> > &src,
+                        const Mapping<dim>::InternalDataBase &mapping_data,
+                        const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_contravariant (std::vector<Point<dim> >       &dst,
+                            const std::vector<Point<dim> > &src,
+                            const Mapping<dim>::InternalDataBase &mapping_data,
+                            const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual UpdateFlags update_each (const UpdateFlags) const;    
+
+  private:
+                                    /** 
+                                     * Storage for internal data of
+                                     * Q_degree transformation.
+                                     */
+    class InternalData : public MappingQ1<dim>::InternalData
+    {
+      public:
+                                        /**
+                                         * Constructor.
+                                         */
+       InternalData(unsigned int n_shape_functions);
+       
+                                        /**
+                                         * Unit normal vectors. Used
+                                         * for the alternative
+                                         * computation of the normal
+                                         * vectors. See doc of the
+                                         * @p{alternative_normals_computation}
+                                         * flag.
+                                         *
+                                         * Filled (hardcoded) once in
+                                         * @p{get_face_data}.
+                                         */
+        std::vector<std::vector<Point<dim> > > unit_normals;
+
+                                        /**
+                                         * Flag that is set by the
+                                         * @p{fill_fe_[[sub]face]_values}
+                                         * function.
+                                         *
+                                         * If this flag is @p{true}
+                                         * we are on an interior cell
+                                         * and the
+                                         * @p{mapping_q1_data} is
+                                         * used.
+                                         */
+       bool use_mapping_q1_on_current_cell;
+       
+                                        /**
+                                         * On interior cells
+                                         * @p{MappingQ1} is used.
+                                         */
+       MappingQ1<dim>::InternalData mapping_q1_data;
+    };
+
+                                    /**
+                                     * Calles the
+                                     * @p{compute_face_data} function
+                                     * of its base @ref{MappingQ1}
+                                     * class.
+                                     *
+                                     * For the
+                                     * @p{alternative_normal_computation}
+                                     * also the @p{unit_normal}
+                                     * vectors of the face are
+                                     * computed.
+                                     */
+    void compute_face_data (const UpdateFlags flags,
+                           const Quadrature<dim>& quadrature,
+                           const unsigned int n_orig_q_points,
+                           MappingQ1<dim>::InternalData& data) const;
+    
+                                    /**
+                                     * Do the computation for the
+                                     * @p{fill_*} functions.
+                                     */
+    void compute_fill_face (const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int      face_no,
+                           const bool              is_subface,
+                           const unsigned int      npts,
+                           const unsigned int      offset,
+                           const std::vector<double>   &weights,
+                           MappingQ1<dim>::InternalData &mapping_q1_data,
+                           std::vector<Point<dim> >    &quadrature_points,
+                           std::vector<double>         &JxW_values,
+                           std::vector<Tensor<1,dim> > &boundary_form,
+                           std::vector<Point<dim> >    &normal_vectors) const;
+    
+                                    /**
+                                     * Compute shape values and/or
+                                     * derivatives.
+                                     */
+    virtual void compute_shapes_virtual (const std::vector<Point<dim> > &unit_points,
+                                        MappingQ1<dim>::InternalData &data) const;
+
+                                    /**
+                                     * This function is needed by the
+                                     * constructor of @p{MappingQ<dim>}
+                                     * for @p{dim=} 2 and 3.
+                                     *
+                                     * For @p{degree<4} this function
+                                     * sets the
+                                     * @p{laplace_on_quad_vector} to
+                                     * the hardcoded data. For
+                                     * @p{degree>=4} and MappingQ<2>
+                                     * this vector is computed.
+                                     */
+    void set_laplace_on_quad_vector(std::vector<std::vector<double> > &loqvs) const;
+    
+                                    /**
+                                     * This function is needed by the
+                                     * constructor of @p{MappingQ<3>}.
+                                     *
+                                     * For @p{degree==2} this function
+                                     * sets the
+                                     * @p{laplace_on_quad_vector} to
+                                     * the hardcoded data. For
+                                     * @p{degree>2} this vector is
+                                     * computed.
+                                     */
+    void set_laplace_on_hex_vector(std::vector<std::vector<double> > &lohvs) const;
+    
+                                    /**
+                                     * Computes the @p{laplace_on_quad(hex)_vector}.
+                                     *
+                                     * Called by the
+                                     * @p{set_laplace_on_(quad)hex_vector}
+                                     * functions if the data is not
+                                     * yet hardcoded.
+                                     */
+    void compute_laplace_vector(std::vector<std::vector<double> > &lvs) const;
+
+                                    /**
+                                     * Takes a
+                                     * @p{set_laplace_on_hex(quad)_vector}
+                                     * and applies it to the vector
+                                     * @p{a} to compute the inner
+                                     * support points. They are
+                                     * appended to the vector @p{a}.
+                                     */
+    void apply_laplace_vector(const std::vector<std::vector<double> > &lvs,
+                             std::vector<Point<dim> > &a) const;
+    
+                                    /**
+                                     * Computes the support points of
+                                     * the mapping.
+                                     */
+    virtual void compute_mapping_support_points(
+      const typename Triangulation<dim>::cell_iterator &cell,
+      std::vector<Point<dim> > &a) const;
+
+                                    /**
+                                     * Computes all support points of
+                                     * the mapping shape
+                                     * functions. The inner support
+                                     * points (ie. support points in
+                                     * quads for 2d, in hexes for 3d)
+                                     * are computed using the
+                                     * solution of a Laplace equation
+                                     * with the position of the outer
+                                     * support points as boundary
+                                     * values. The outer support
+                                     * points are all support points
+                                     * except of the inner ones.
+                                     */
+    void compute_support_points_laplace(
+      const typename Triangulation<dim>::cell_iterator &cell,
+      std::vector<Point<dim> > &a) const;
+    
+                                    /**
+                                     * Simple version of the
+                                     * @p{compute_support_points_laplace}
+                                     * function. Does not use the
+                                     * solution to Laplace
+                                     * equation. Computes the inner
+                                     * support points by simple
+                                     * interpolations.*/
+    void compute_support_points_simple(
+      const typename Triangulation<dim>::cell_iterator &cell,
+      std::vector<Point<dim> > &a) const;
+    
+                                    /**
+                                     * For @p{dim=2,3}. Adds (appends) the
+                                     * support points of all lines to
+                                     * the vector a.
+                                     *
+                                     * Needed by the
+                                     * @p{compute_support_points_simple(laplace)}
+                                     * functions. For @p{dim=1} this
+                                     * function is empty.
+                                     */
+    void add_line_support_points (const Triangulation<dim>::cell_iterator &cell,
+                                 std::vector<Point<dim> > &a) const;
+
+                                    /**
+                                     * For @p{dim=3}. Adds (appends) the
+                                     * support points of all faces (quads in 3d) to
+                                     * the vector a.
+                                     *
+                                     * Needed by the
+                                     * @p{compute_support_points_laplace}
+                                     * function. For @p{dim=1} and 2 this
+                                     * function is empty.
+                                     */
+    void add_face_support_points(const typename Triangulation<dim>::cell_iterator &cell,
+                                std::vector<Point<dim> > &a) const;
+    
+                                    /**
+                                     * For @p{dim=2} and 3. Simple
+                                     * version of the
+                                     * @p{add_face_support_points}
+                                     * function.
+                                     *
+                                     * Needed by the
+                                     * @p{compute_support_points_simple}
+                                     */
+    void fill_quad_support_points_simple (const Triangulation<dim>::cell_iterator &cell,
+                                         std::vector<Point<dim> > &a) const;
+    
+                                    /**
+                                     * Needed by the
+                                     * @p{laplace_on_quad} function
+                                     * (for @p{dim==2}). Filled by the
+                                     * constructor.
+                                     *
+                                     * Sizes:
+                                     * laplace_on_quad_vector.size()=
+                                     *   number of inner
+                                     *   unit_support_points
+                                     * laplace_on_quad_vector[i].size()=
+                                     *   number of outer
+                                     *   unit_support_points, i.e.
+                                     *   unit_support_points on the
+                                     *   boundary of the quad
+                                     */
+    std::vector<std::vector<double> > laplace_on_quad_vector;
+    
+                                    /**
+                                     * Needed by the
+                                     * @p{laplace_on_hex} function
+                                     * (for @p{dim==3}). Filled by the
+                                     * constructor.
+                                     */
+    std::vector<std::vector<double> > laplace_on_hex_vector;
+
+                                    /**
+                                     * Exception.
+                                     */
+    DeclException1 (ExcLaplaceVectorNotSet,
+                   int,
+                   << "laplace_vector not set for degree=" << arg1 << ".");
+     
+                                    /**
+                                     * Degree @p{p} of the
+                                     * polynomials used as shape
+                                     * functions for the Qp mapping
+                                     * of cells at the boundary.
+                                     */  
+    const unsigned int degree;
+
+                                    /**
+                                     * Number of inner mapping shape
+                                     * functions.
+                                     */
+    const unsigned int n_inner;
+
+                                    /**
+                                     * Number of mapping shape
+                                     * functions on the boundary.
+                                     */
+    const unsigned int n_outer;
+    
+    
+                                    /**
+                                     * Vector of one-dimensional
+                                     * polynomials used as shape
+                                     * functions for the Qp mapping
+                                     * of cell at the boundary.
+                                     */
+    std::vector<LagrangeEquidistant> polynomials;
+
+                                    /**
+                                     * Pointer to the
+                                     * @p{dim}-dimensional tensor
+                                     * product polynomials used as
+                                     * shape functions for the Qp
+                                     * mapping of cells at the
+                                     * boundary.
+                                     */
+    TensorProductPolynomials<dim>* tensor_pols;
+    
+                                    /**
+                                     * Number of the Qp tensor
+                                     * product shape functions.
+                                     */
+    unsigned int n_shape_functions;
+
+                                    /**
+                                     * Mapping from lexicographic to
+                                     * to the Qp shape function
+                                     * numbering. Its size is
+                                     * @p{dofs_per_cell}.
+                                     */
+    std::vector<unsigned int> renumber;
+
+                                    /**
+                                     * Needed for inner faces.
+                                     */
+    StraightBoundary<dim> straight_boundary;
+
+                                    /**
+                                     * Flag for computing the normal
+                                     * vectors directly by using a
+                                     * covariant transformation.
+                                     * Used to test the covariant
+                                     * transformation.
+                                     */
+    bool alternative_normals_computation;
+
+                                    /**
+                                     * If this flag is set @p{true}
+                                     * then @p{MappingQ} is used on
+                                     * all cells, not only on
+                                     * boundary cells.
+                                     *
+                                     * The default value is false.
+                                     */
+    bool use_mapping_q_on_all_cells;
+};
+
+
+#endif
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..46450cfae4c0ff118ac77b63cc493bbe251cc4c4 100644 (file)
@@ -0,0 +1,432 @@
+//----------------------------  mapping_q1.h  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  mapping_q1.h  ---------------------------
+#ifndef __deal2__mapping_q1_h
+#define __deal2__mapping_q1_h
+
+
+#include <cmath>
+#include <fe/mapping.h>
+
+/**
+ * Mapping of general quadrilateral/hexahedra by d-linear shape
+ * functions.
+ *
+ * This function maps the unit cell to a general grid cell with
+ * straight lines in @p{d} dimensions (remark that in 3D the surfaces
+ * may be curved, even if the edges are not). This is the well-known
+ * mapping for polyhedral domains.
+ *
+ * Shape function for this mapping are the same as for the finite
+ * element @p{FE_Q} of order 1. Therefore, coupling these two yields
+ * an isoparametric element.
+ *
+ * @author Guido Kanschat, Ralf Hartmann, 2000, 2001
+ */
+template <int dim>
+class MappingQ1 : public Mapping<dim>
+{
+  public:
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_data (const UpdateFlags,
+             const Quadrature<dim>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_face_data (const UpdateFlags flags,
+                  const Quadrature<dim-1>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual Mapping<dim>::InternalDataBase*
+    get_subface_data (const UpdateFlags flags,
+                     const Quadrature<dim-1>& quadrature) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_values (const DoFHandler<dim>::cell_iterator &cell,
+                   const Quadrature<dim>& quadrature,
+                   Mapping<dim>::InternalDataBase &mapping_data,
+                   std::vector<Point<dim> >        &quadrature_points,
+                   std::vector<double>             &JxW_values) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                        const unsigned int face_no,
+                        const Quadrature<dim-1>& quadrature,
+                        typename Mapping<dim>::InternalDataBase &mapping_data,
+                        std::vector<Point<dim> >        &quadrature_points,
+                        std::vector<double>             &JxW_values,
+                        std::vector<Tensor<1,dim> >        &boundary_form,
+                        std::vector<Point<dim> >        &normal_vectors) const ;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int face_no,
+                           const unsigned int sub_no,
+                           const Quadrature<dim-1>& quadrature,
+                           typename Mapping<dim>::InternalDataBase &mapping_data,
+                           std::vector<Point<dim> >        &quadrature_points,
+                           std::vector<double>             &JxW_values,
+                           std::vector<Tensor<1,dim> >        &boundary_form,
+                           std::vector<Point<dim> >        &normal_vectors) const ;
+
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                        const std::vector<Tensor<1,dim> > &src,
+                        const Mapping<dim>::InternalDataBase &mapping_data,
+                        const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                            const std::vector<Tensor<1,dim> > &src,
+                            const Mapping<dim>::InternalDataBase &mapping_data,
+                            const unsigned int src_offset) const;
+
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_covariant (std::vector<Point<dim> >       &dst,
+                        const std::vector<Point<dim> > &src,
+                        const Mapping<dim>::InternalDataBase &mapping_data,
+                        const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual void
+    transform_contravariant (std::vector<Point<dim> >       &dst,
+                            const std::vector<Point<dim> > &src,
+                            const Mapping<dim>::InternalDataBase &mapping_data,
+                            const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Transforms the point @p{p} on
+                                     * the unit cell to the point
+                                     * @p{p_real} on the real cell
+                                     * @p{cell} and returns @p{p_real}.
+                                     */
+    virtual Point<dim> transform_unit_to_real_cell (
+      const typename Triangulation<dim>::cell_iterator cell,
+      const Point<dim> &p,
+      const typename Mapping<dim>::InternalDataBase *const mdata=0) const;
+
+                                    /**
+                                     * Transforms the point @p{p} on
+                                     * the real cell to the point
+                                     * @p{p_unit} on the unit cell
+                                     * @p{cell} and returns @p{p_unit}.
+                                     *
+                                     * Uses Newton iteration and the
+                                     * @p{transform_unit_to_real_cell}
+                                     * function.
+                                     */
+    virtual Point<dim> transform_real_to_unit_cell (
+      const typename Triangulation<dim>::cell_iterator cell,
+      const Point<dim> &p) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual UpdateFlags update_once (const UpdateFlags) const;
+    
+                                    /**
+                                     * Implementation of the interface in
+                                     * @ref{Mapping}.
+                                     */
+    virtual UpdateFlags update_each (const UpdateFlags) const;
+    
+                                    /**
+                                     * Exception
+                                     */
+    DeclException0 (ExcInvalidData);
+
+  protected:
+                                    /**
+                                     * Implementation of the
+                                     * covariant transformation.
+                                     */
+    template <typename tensor_>
+    void covariant_transformation (std::vector<tensor_>       &dst,
+                                  const std::vector<tensor_> &src,
+                                  const Mapping<dim>::InternalDataBase &mapping_data,
+                                  const unsigned int src_offset) const;
+    
+                                    /**
+                                     * Implementation of the
+                                     * contravariant transformation.
+                                     */
+    template <typename tensor_>
+    void contravariant_transformation (std::vector<tensor_>       &dst,
+                                      const std::vector<tensor_> &src,
+                                      const Mapping<dim>::InternalDataBase &mapping_data,
+                                      const unsigned int src_offset) const;
+
+                                    /** 
+                                     * Storage for internal data of
+                                     * d-linear transformation.
+                                     */
+    class InternalData : public Mapping<dim>::InternalDataBase
+    {
+      public:
+                                        /**
+                                         * Constructor.
+                                         */
+       InternalData(unsigned int n_shape_functions);
+
+                                        /**
+                                         * Shape function at quadrature
+                                         * point. Shape functions are
+                                         * in tensor product order, so
+                                         * vertices must be reordered
+                                         * to obtain transformation.
+                                         */
+       double shape (unsigned int qpoint,
+                     unsigned int shape_nr) const;
+       
+                                        /**
+                                         * Shape function at quadrature
+                                         * point. See above.
+                                         */
+       double &shape (unsigned int qpoint,
+                      unsigned int shape_nr);
+       
+                                        /**
+                                         * Gradient of shape function
+                                         * in quadrature point. See
+                                         * above.
+                                         */
+       Tensor<1,dim> derivative (unsigned int qpoint,
+                                 unsigned int shape_nr) const;
+
+                                        /**
+                                         * Gradient of shape function
+                                         * in quadrature point. See
+                                         * above.
+                                         */
+       Tensor<1,dim> &derivative (unsigned int qpoint,
+                                  unsigned int shape_nr);
+       
+                                        /**
+                                         * Values of shape
+                                         * functions. Access by
+                                         * function @p{shape}.
+                                         *
+                                         * Computed once.
+                                         */
+       std::vector<double> shape_values;
+       
+                                        /**
+                                         * Values of shape function
+                                         * derivatives. Access by
+                                         * function @p{derivative}.
+                                         *
+                                         * Computed once.
+                                         */
+       std::vector<Tensor<1,dim> > shape_derivatives;
+       
+                                        /**
+                                         * Tensors of covariant
+                                         * transformation.
+                                         *
+                                         * Computed on each cell.
+                                         */
+       std::vector<Tensor<2,dim> > covariant;
+       
+                                        /**
+                                         * Tensors of covariant
+                                         * transformation.
+                                         *
+                                         * Computed on each cell.
+                                         */
+       std::vector<Tensor<2,dim> > contravariant;
+       
+                                        /**
+                                         * Unit tangential vectors. Used
+                                         * for the computation of
+                                         * boundary forms and normal
+                                         * vectors.
+                                         *
+                                         * Filled once.
+                                         */
+        std::vector<std::vector<Tensor<1,dim> > > unit_tangentials;
+       
+                                        /**
+                                         * Auxuliary vectors for internal use.
+                                         */
+        std::vector<std::vector<Tensor<1,dim> > > aux;
+
+                                        /**
+                                         * Number of shape functions.
+                                         */
+       unsigned int n_shape_functions;
+
+                                        /**
+                                         * Stores the support points of
+                                         * the mapping shape functions on
+                                         * the @p{cell_of_current_support_points}.
+                                         */
+       std::vector<Point<dim> > mapping_support_points;
+       
+                                        /**
+                                         * Stores the cell of which the
+                                         * @p{mapping_support_points} are
+                                         * stored.
+                                         */
+       DoFHandler<dim>::cell_iterator cell_of_current_support_points;
+       
+                                        /**
+                                         * Default value of this flag
+                                         * is @p{true}. If @p{*this}
+                                         * is an object of a derived
+                                         * class, this flag is set to
+                                         * @p{false}.
+                                         */
+       bool is_mapping_q1_data;
+    };
+    
+                                    /**
+                                     * Do the computations for the
+                                     * @p{get_face_data}
+                                     * functions. Here, the data
+                                     * vectors of @p{InternalData}
+                                     * are reinitialized to proper
+                                     * size and shape values and
+                                     * derivatives are
+                                     * computed. Furthermore
+                                     * @p{unit_tangential} vectors of
+                                     * the face are computed.
+                                     */
+    void compute_face_data (const UpdateFlags flags,
+                           const Quadrature<dim> &quadrature,
+                           const unsigned int n_orig_q_points,
+                           InternalData &data) const;
+    
+                                    /**
+                                     * Mapping between tensor product
+                                     * ordering and real ordering of
+                                     * the vertices.
+                                     */
+    static const unsigned int vertex_mapping[1<<dim];
+    
+                                    /**
+                                     * Compute shape values and/or
+                                     * derivatives.
+                                     *
+                                     * Calles either the
+                                     * @p{compute_shapes_virtual} of
+                                     * this class or that of the
+                                     * derived class, depending on
+                                     * whether
+                                     * @p{data.is_mapping_q1_data}
+                                     * equals @p{true} or @p{false}.
+                                     */
+    void compute_shapes (const std::vector<Point<dim> > &unit_points,
+                        InternalData &data) const;
+    
+                                    /**
+                                     * Do the computations for the @p{get_data}
+                                     * functions. Here, the data
+                                     * vectors of @p{InternalData} are
+                                     * reinitialized to proper size and
+                                     * shape values are computed.
+                                     */
+    void compute_data (const UpdateFlags flags,
+                      const Quadrature<dim>& quadrature,
+                      const unsigned int n_orig_q_points,
+                      InternalData& data) const;
+    
+                                    /**
+                                     * Do the computation for the
+                                     * @p{fill_*} functions.
+                                     */
+    void compute_fill (const typename DoFHandler<dim>::cell_iterator &cell,
+                      const unsigned int   npts,
+                      const unsigned int   offset,
+                      InternalData        &data,
+                      std::vector<Point<dim> > &quadrature_points) const;
+    
+                                    /**
+                                     * Do the computation for the
+                                     * @p{fill_*} functions.
+                                     */
+    void compute_fill_face (const typename DoFHandler<dim>::cell_iterator &cell,
+                           const unsigned int      face_no,
+                           const bool              is_subface,
+                           const unsigned int      npts,
+                           const unsigned int      offset,
+                           const std::vector<double>   &weights,
+                           InternalData           &mapping_data,
+                           std::vector<Point<dim> >    &quadrature_points,
+                           std::vector<double>         &JxW_values,
+                           std::vector<Tensor<1,dim> > &boundary_form,
+                           std::vector<Point<dim> > &normal_vectors) const;
+
+                                    /**
+                                     * Compute shape values and/or
+                                     * derivatives.
+                                     */
+    virtual void compute_shapes_virtual (const std::vector<Point<dim> > &unit_points,
+                                        InternalData &data) const;
+  private:
+
+                                    /**
+                                     * Computes the support points of
+                                     * the mapping. For @p{MappingQ1}
+                                     * these are the
+                                     * vertices.
+                                     */
+    virtual void compute_mapping_support_points(
+      const typename Triangulation<dim>::cell_iterator &cell,
+      std::vector<Point<dim> > &a) const;
+
+                                    /**
+                                     *Number of shape functions
+                                     */
+    static const unsigned int n_shape_functions = 1 << dim;
+};
+
+
+#endif
diff --git a/deal.II/deal.II/include/fe/q1_mapping.h b/deal.II/deal.II/include/fe/q1_mapping.h
deleted file mode 100644 (file)
index 9c5cdca..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-//----------------------------  q1_mapping.h  ---------------------------
-//    Version: $Name$
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  q1_mapping.h  ---------------------------
-#ifndef __deal2__q1_mapping_h
-#define __deal2__q1_mapping_h
-
-
-// File has moved from fe_linear_mapping.h
-
-#include <cmath>
-#include <fe/fe.h>
-
-
-/**
- * Implementation of Q1 transformation to the unit cell.
- * All finite element classes using a Q1 mapping of the grid cell to the
- * unit cell may be derived from this class. The grid transformation functions
- * are implemented here and do not have to be taken care of later.
- *
- * @author Wolfgang Bangerth, 1998
- */
-template <int dim>
-class FEQ1Mapping : public FiniteElement<dim>
-{
-  public:
-                                    /**
-                                     * Constructor. Simply passes through
-                                     * its arguments to the base class. For
-                                     * one space dimension, @p{dofs_per_quad}
-                                     * shall be zero; similarly, for one and
-                                     * two space dimensions, @p{dofs_per_hex}
-                                     * shall be zero.
-                                     */
-    FEQ1Mapping (const unsigned int  dofs_per_vertex,
-                const unsigned int  dofs_per_line,
-                const unsigned int  dofs_per_quad,
-                const unsigned int  dofs_per_hex,
-                const unsigned int  n_components,
-                const std::vector<bool> &restriction_is_additive_flags);
-
-                                    /**
-                                     * Transforms the point @p{p} on
-                                     * the unit cell to the point
-                                     * @p{p_real} on the real cell
-                                     * @p{cell} and returns @p{p_real}.
-                                     */
-    virtual Point<dim> transform_unit_to_real_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                   const Point<dim> &p) const;
-    
-                                    /**
-                                     * Transforms the point @p{p} on
-                                     * the real cell to the point
-                                     * @p{p_unit} on the unit cell
-                                     * @p{cell} and returns @p{p_unit}.
-                                     */
-    virtual Point<dim> transform_real_to_unit_cell (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                   const Point<dim> &p) const;
-    
-                                    /**
-                                     * Return the value of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     * Here, the (bi-)linear basis functions
-                                     * are meant, which are used for the
-                                     * computation of the transformation from
-                                     * unit cell to real space cell.
-                                     */
-    virtual double shape_value_transform (const unsigned int  i,
-                                         const Point<dim>   &p) const;
-
-                                    /**
-                                     * Return the gradient of the @p{i}th shape
-                                     * function at point @p{p} on the unit cell.
-                                     * Here, the (bi-)linear basis functions
-                                     * are meant, which are used for the
-                                     * computation of the transformation from
-                                     * unit cell to real space cell.
-                                     */
-    virtual Tensor<1,dim> shape_grad_transform (const unsigned int  i,
-                                               const Point<dim>   &p) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * In two spatial dimensions, this function
-                                     * simply returns the length of the face.
-                                     */
-    virtual void get_face_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    std::vector<double>      &face_jacobi_determinants) const;
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * In two spatial dimensions, this function
-                                     * simply returns half the length of the
-                                     * whole face.
-                                     */
-    virtual void get_subface_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                       const unsigned int           subface_no,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       typename std::vector<double>      &face_jacobi_determinants) const;
-
-                                    /**
-                                     * Return the normal vectors to the
-                                     * face with number @p{face_no} of @p{cell}.
-                                     *
-                                     * For linear finite elements, this function
-                                     * is particularly simple since all normal
-                                     * vectors are equal and can easiliy be
-                                     * computed from the direction of the face
-                                     * without using the transformation (Jacobi)
-                                     * matrix, at least for two dimensions.
-                                     *
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int           face_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const;
-
-                                    /**
-                                     * Return the normal vectors to the
-                                     * subface with number @p{subface_no} of
-                                     * the face with number @p{face_no} of @p{cell}.
-                                     *
-                                     * For linear finite elements, this function
-                                     * is particularly simple since all normal
-                                     * vectors are equal and can easiliy be
-                                     * computed from the direction of the face
-                                     * without using the transformation (Jacobi)
-                                     * matrix, at least for two dimensions.
-                                     *
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     */
-    virtual void get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                    const unsigned int           face_no,
-                                    const unsigned int           subface_no,
-                                    const typename std::vector<Point<dim-1> > &unit_points,
-                                    typename std::vector<Point<dim> >         &normal_vectors) const;    
-
-                                    /**
-                                     * Refer to the base class for detailed
-                                     * information on this function.
-                                     *
-                                     * For one dimensional elements, this
-                                     * function simply passes through to
-                                     * the one implemented in the base class.
-                                     * For higher dimensional finite elements
-                                     * we use multilinear mappings.
-                                     */
-    virtual void fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                const typename std::vector<Point<dim> >            &unit_points,
-                                typename std::vector<Tensor<2,dim> >               &jacobians,
-                                const bool              compute_jacobians,
-                                typename std::vector<Tensor<3,dim> > &jacobians_grad,
-                                const bool              compute_jacobians_grad,
-                                typename std::vector<Point<dim> >    &support_points,
-                                const bool              compute_support_points,
-                                typename std::vector<Point<dim> >    &q_points,
-                                const bool              compute_q_points,
-                                const FullMatrix<double>         &shape_values_transform,
-                                const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grad_transform) const;
-
-                                    /**
-                                     * Compute the gradients of the jacobian
-                                     * matrices of the mapping between unit
-                                     * and real cell at the given
-                                     * points on the unit cell.
-                                     */
-    static void compute_jacobian_gradients (const typename DoFHandler<dim>::cell_iterator &cell,
-                                           const typename std::vector<Point<dim> >            &unit_points,
-                                           typename std::vector<Tensor<3,dim> >               &jacobians);
-
-
-                                    /**
-                                     * Exception
-                                     */
-    DeclException0 (ExcInternalError);
-                                    /**
-                                     * Exception
-                                     */
-    DeclException0 (ExcInvalidData);
-};
-
-
-#endif
index 9897095c1839698ea05210f10f2ccd1d9270ff90..7718537308a57c62643983ef2a3a86ac1b6a26f6 100644 (file)
@@ -14,6 +14,9 @@
 
 #include <fe/fe.h>
 #include <base/memory_consumption.h>
+#include <fe/mapping.h>
+#include <fe/mapping_q1.h>
+#include <fe/fe_values.h>
 #include <base/quadrature.h>
 #include <grid/tria.h>
 #include <grid/tria_iterator.h>
 using namespace std;
 #endif
 
-
-
-
-/*------------------------------- FiniteElementData ----------------------*/
-
-template <int dim>
-FiniteElementData<dim>::FiniteElementData () :
-               dofs_per_vertex(static_cast<unsigned int>(-1)),
-               dofs_per_line(static_cast<unsigned int>(-1)),
-               dofs_per_quad(static_cast<unsigned int>(-1)),
-               dofs_per_hex(static_cast<unsigned int>(-1)),
-               first_line_index(static_cast<unsigned int>(-1)),
-               first_quad_index(static_cast<unsigned int>(-1)),
-               first_hex_index(static_cast<unsigned int>(-1)),
-               first_face_line_index(static_cast<unsigned int>(-1)),
-               first_face_quad_index(static_cast<unsigned int>(-1)),
-               dofs_per_face(static_cast<unsigned int>(-1)),
-               dofs_per_cell(static_cast<unsigned int>(-1)),
-               transform_functions(static_cast<unsigned int>(-1)),
-               components(static_cast<unsigned int>(-1))
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <int dim>
-FiniteElementData<dim>::FiniteElementData (const unsigned int dofs_per_vertex,
-                                          const unsigned int dofs_per_line,
-                                          const unsigned int dofs_per_quad,
-                                          const unsigned int dofs_per_hex,
-                                          const unsigned int n_transform_functions,
-                                          const unsigned int n_components) :
-               dofs_per_vertex(dofs_per_vertex),
-               dofs_per_line(dofs_per_line),
-               dofs_per_quad(dofs_per_quad),
-               dofs_per_hex(dofs_per_hex),
-               first_line_index(GeometryInfo<dim>::vertices_per_cell
-                                * dofs_per_vertex),
-               first_quad_index(first_line_index+
-                                GeometryInfo<dim>::lines_per_cell
-                                * dofs_per_line),
-               first_hex_index(first_quad_index+
-                               GeometryInfo<dim>::faces_per_cell
-                               * dofs_per_quad),
-               first_face_line_index(GeometryInfo<dim-1>::vertices_per_cell
-                                     * dofs_per_vertex),
-               first_face_quad_index(first_face_line_index+
-                                     GeometryInfo<dim-1>::lines_per_cell
-                                     * dofs_per_line),
-               dofs_per_face(GeometryInfo<dim>::vertices_per_face * dofs_per_vertex+
-                             GeometryInfo<dim>::lines_per_face * dofs_per_line +
-                             dofs_per_quad),
-               dofs_per_cell (first_hex_index+dofs_per_hex),
-               transform_functions (n_transform_functions),
-               components(n_components)
-{
-  Assert(dim==3, ExcDimensionMismatch(3,dim));
-};
+/*------------------------------- FiniteElementBase ----------------------*/
 
 
 template <int dim>
-FiniteElementData<dim>::FiniteElementData (const unsigned int dofs_per_vertex,
-                                          const unsigned int dofs_per_line,
-                                          const unsigned int dofs_per_quad,
-                                          const unsigned int n_transform_functions,
-                                          const unsigned int n_components) :
-               dofs_per_vertex(dofs_per_vertex),
-               dofs_per_line(dofs_per_line),
-               dofs_per_quad(dofs_per_quad),
-               dofs_per_hex(0),
-               first_line_index(GeometryInfo<dim>::vertices_per_cell * dofs_per_vertex),
-               first_quad_index(first_line_index+
-                                GeometryInfo<dim>::lines_per_cell * dofs_per_line),
-               first_hex_index(first_quad_index+
-                               GeometryInfo<dim>::quads_per_cell*dofs_per_quad),
-               first_face_line_index(GeometryInfo<dim-1>::vertices_per_cell
-                                     * dofs_per_vertex),
-               first_face_quad_index(first_line_index+
-                                     GeometryInfo<dim-1>::lines_per_cell
-                                     * dofs_per_line),
-               dofs_per_face(GeometryInfo<dim>::vertices_per_face * dofs_per_vertex+
-                             dofs_per_line),
-               dofs_per_cell (first_quad_index+dofs_per_quad),
-               transform_functions (n_transform_functions),
-               components(n_components)
+void
+FiniteElementBase<dim>::
+InternalDataBase::initialize (const FiniteElement<dim>* element,
+                             const Mapping<dim>& mapping,
+                             const Quadrature<dim>& quadrature)
 {
-  Assert(dim==2, ExcDimensionMismatch(2,dim));
-};
+                                  // We compute difference
+                                  // quotients of gradients
+  UpdateFlags diff_flags = update_gradients;
+  
+                                  // We will need shifted
+                                  // quadrature formulae
+  std::vector<Point<dim> > diff_points (quadrature.n_quadrature_points);
+  std::vector<double> diff_weights (quadrature.n_quadrature_points, 0);
+  
+                                  // The star has 2dim points
+  differences.resize(2*dim);
+  for (unsigned int d=0;d<dim;++d)
+    {
+      Point<dim> shift;
+      shift (d) = 1.e-6;
+      for (unsigned int i=0;i<diff_points.size();++i)
+       diff_points[i] = quadrature.point(i) + shift;
+      Quadrature<dim> plus_quad (diff_points, diff_weights);
+      differences[d] =
+       new FEValues<dim> (mapping, *element, plus_quad, diff_flags);
+      for (unsigned int i=0;i<diff_points.size();++i)
+       diff_points[i] = quadrature.point(i) - shift;
+      Quadrature<dim> minus_quad (diff_points, diff_weights);
+      differences[d+dim] =
+       new FEValues<dim> (mapping, *element, minus_quad, diff_flags);    
+    }
+}
 
 
-template <int dim>
-FiniteElementData<dim>::FiniteElementData (const unsigned int dofs_per_vertex,
-                                          const unsigned int dofs_per_line,
-                                          const unsigned int n_transform_functions,
-                                          const unsigned int n_components) :
-               dofs_per_vertex(dofs_per_vertex),
-               dofs_per_line(dofs_per_line),
-               dofs_per_quad(0),
-               dofs_per_hex(0),
-               first_line_index(GeometryInfo<dim>::vertices_per_cell * dofs_per_vertex),
-               first_quad_index(first_line_index+
-                                GeometryInfo<dim>::lines_per_cell * dofs_per_line),
-               first_hex_index(first_quad_index+
-                               GeometryInfo<dim>::quads_per_cell*dofs_per_quad),
-               first_face_line_index(GeometryInfo<dim-1>::vertices_per_cell
-                                     * dofs_per_vertex),
-               first_face_quad_index(first_line_index+
-                                     GeometryInfo<dim-1>::lines_per_cell
-                                     * dofs_per_line),
-               dofs_per_face(dofs_per_vertex),
-               dofs_per_cell (first_line_index+dofs_per_line),
-               transform_functions (n_transform_functions),
-               components(n_components)
-{
-  Assert(dim==1, ExcDimensionMismatch(1,dim));
-};
 
 
 template <int dim>
-FiniteElementData<dim>::~FiniteElementData ()
-{};
-
-
-template<int dim>
-bool FiniteElementData<dim>::operator== (const FiniteElementData<dim> &f) const
+FiniteElementBase<dim>::InternalDataBase::~InternalDataBase ()
 {
-  return ((dofs_per_vertex == f.dofs_per_vertex) &&
-         (dofs_per_line == f.dofs_per_line) &&
-         (dofs_per_quad == f.dofs_per_quad) &&
-         (dofs_per_hex == f.dofs_per_hex) &&
-         (transform_functions == f.transform_functions) &&
-         (components == f.components));
-};
-
+  for (unsigned int i=0;i<differences.size ();++i)
+    if (differences[i] != 0)
+      delete differences[i];
+}
 
-/*------------------------------- FiniteElementBase ----------------------*/
 
 
 
 template <int dim>
 FiniteElementBase<dim>::FiniteElementBase (const FiniteElementData<dim> &fe_data,
                                           const std::vector<bool> &restriction_is_additive_flags) :
-               FiniteElementData<dim> (fe_data),
+  FiniteElementData<dim> (fe_data),
   system_to_component_table(dofs_per_cell),
   face_system_to_component_table(dofs_per_face),
   component_to_system_table(components, std::vector<unsigned>(dofs_per_cell)),
@@ -176,7 +92,7 @@ FiniteElementBase<dim>::FiniteElementBase (const FiniteElementData<dim> &fe_data
                                                               restriction_is_additive_flags(restriction_is_additive_flags)
 {
   Assert(restriction_is_additive_flags.size()==fe_data.components,
-        ExcWrongFieldDimension(restriction_is_additive_flags.size(),fe_data.components));
+        ExcDimensionMismatch(restriction_is_additive_flags.size(),fe_data.components));
 
   for (unsigned int i=0; i<GeometryInfo<dim>::children_per_cell; ++i) 
     {
@@ -232,6 +148,7 @@ FiniteElementBase<dim>::restrict (const unsigned int child) const
 {
   Assert (child<GeometryInfo<dim>::children_per_cell,
          ExcIndexRange(child, 0, GeometryInfo<dim>::children_per_cell));
+  Assert (restriction[child].n() != 0, ExcProjectionVoid());
   return restriction[child];
 };
 
@@ -242,6 +159,7 @@ FiniteElementBase<dim>::prolongate (const unsigned int child) const
 {
   Assert (child<GeometryInfo<dim>::children_per_cell,
          ExcIndexRange(child, 0, GeometryInfo<dim>::children_per_cell));
+  Assert (prolongation[child].n() != 0, ExcEmbeddingVoid());
   return prolongation[child];
 };
 
@@ -250,8 +168,11 @@ template <int dim>
 const FullMatrix<double> &
 FiniteElementBase<dim>::constraints () const
 {
+  Assert ((dofs_per_face  == 0) || (interface_constraints.m() != 0),
+         ExcConstraintsVoid());
+  
   if (dim==1)
-    Assert ((interface_constraints.m()==1) && (interface_constraints.n()==1),
+    Assert ((interface_constraints.m()==0) && (interface_constraints.n()==0),
            ExcWrongInterfaceMatrixSize(interface_constraints.m(),
                                        interface_constraints.n()));
   
@@ -290,300 +211,112 @@ FiniteElementBase<dim>::memory_consumption () const
 };
 
 
-/*------------------------------- FiniteElement ----------------------*/
-
-
 template <int dim>
-FiniteElement<dim>::FiniteElement (const FiniteElementData<dim> &fe_data,
-                                  const std::vector<bool> &restriction_is_additive_flags) :
-               FiniteElementBase<dim> (fe_data,
-                                       restriction_is_additive_flags) {};
-
-#if deal_II_dimension == 1
-
-template <>
-void FiniteElement<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                          std::vector<Point<1> > &support_points) const;
-
-
-template <>
-void FiniteElement<1>::fill_fe_values (const DoFHandler<1>::cell_iterator &cell,
-                                      const std::vector<Point<1> > &unit_points,
-                                      std::vector<Tensor<2,1> >    &jacobians,
-                                      const bool            compute_jacobians,
-                                      std::vector<Tensor<3,1> > &jacobians_grad,
-                                      const bool            compute_jacobians_grad,
-                                      std::vector<Point<1> >    &support_points,
-                                      const bool            compute_support_points,
-                                      std::vector<Point<1> >    &q_points,
-                                      const bool            compute_q_points,
-                                      const FullMatrix<double>       &,
-                                      const std::vector<std::vector<Tensor<1,1> > > &) const {
-  Assert ((!compute_jacobians) || (jacobians.size() == unit_points.size()),
-         ExcWrongFieldDimension(jacobians.size(), unit_points.size()));
-  Assert ((!compute_jacobians_grad) || (jacobians_grad.size() == unit_points.size()),
-         ExcWrongFieldDimension(jacobians_grad.size(), unit_points.size()));
-  Assert ((!compute_q_points) || (q_points.size() == unit_points.size()),
-         ExcWrongFieldDimension(q_points.size(), unit_points.size()));
-  Assert ((!compute_support_points) || (support_points.size() == dofs_per_cell),
-         ExcWrongFieldDimension(support_points.size(), dofs_per_cell));
-
-
-                                  // local mesh width
-  const double h=(cell->vertex(1)(0) - cell->vertex(0)(0));
-
-  for (unsigned int i=0; i<q_points.size(); ++i) 
+void
+FiniteElementBase<dim>::
+compute_2nd (const Mapping<dim> &mapping,
+            const DoFHandler<dim>::cell_iterator &cell,
+            const unsigned int offset,
+            Mapping<dim>::InternalDataBase &mapping_internal,
+            InternalDataBase& fe_internal,
+            FEValuesData<dim>& data) const
+{
+                                  // Number of quadrature points
+  const unsigned int n = data.shape_2nd_derivatives[0].size();
+  
+  for (unsigned int d=0;d<dim;++d)
     {
-      if (compute_jacobians)
-       jacobians[i][0][0] = 1./h;
+      fe_internal.differences[d]->reinit(cell);
+      fe_internal.differences[d+dim]->reinit(cell);
+    }
 
-                                      // gradient of jacobian is zero
-      if (compute_jacobians_grad)
-       jacobians_grad[i] = Tensor<3,1>();
+  std::vector<std::vector<Tensor<1,dim> > > diff_quot (dim, std::vector<Tensor<1,dim> >(n));
+  std::vector<Tensor<1,dim> > diff_quot2 (n);
+                                  // Loop over shape functions
+  for (unsigned int shape=0; shape<dofs_per_cell; ++shape)
+    {
       
-      if (compute_q_points)
-                                        // assume a linear mapping from unit
-                                        // to real space. overload this
-                                        // function if you don't like that
-       q_points[i] = cell->vertex(0) + h*unit_points[i];
-    };
-
-                                  // compute support points. The first ones
-                                  // belong to vertex one, the second ones
-                                  // to vertex two, all following are
-                                  // equally spaced along the line
-  if (compute_support_points)
-    get_support_points (cell, support_points);
-};
-
-
-
-template <>
-void FiniteElement<1>::fill_fe_face_values (const DoFHandler<1>::cell_iterator &,
-                                           const unsigned int       ,
-                                           const std::vector<Point<0> > &,
-                                           const std::vector<Point<1> > &,
-                                           std::vector<Tensor<2,1> >    &,
-                                           const bool               ,
-                                           std::vector<Tensor<3,1> >    &,
-                                           const bool               ,
-                                           std::vector<Point<1> >       &,
-                                           const bool               ,
-                                           std::vector<Point<1> >       &,
-                                           const bool               ,
-                                           std::vector<double>          &,
-                                           const bool              ,
-                                           std::vector<Point<1> >       &,
-                                           const bool,
-                                           const FullMatrix<double>          &,
-                                           const std::vector<std::vector<Tensor<1,1> > > &) const {
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FiniteElement<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &,
-                                              const unsigned int       ,
-                                              const unsigned int       ,
-                                              const std::vector<Point<0> > &,
-                                              const std::vector<Point<1> > &,
-                                              std::vector<Tensor<2,1> >    &,
-                                              const bool               ,
-                                              std::vector<Tensor<3,1> >    &,
-                                              const bool               ,
-                                              std::vector<Point<1> >       &,
-                                              const bool               ,
-                                              std::vector<double>          &,
-                                              const bool               ,
-                                              std::vector<Point<1> >       &,
-                                              const bool,
-                                              const FullMatrix<double>          &,
-                                              const std::vector<std::vector<Tensor<1,1> > > &) const {
-  Assert (false, ExcNotImplemented());
-};
-
+                                      // Fill difference quotients
+      for (unsigned int d1=0;d1<dim;++d1)
+                                        // Loop over quadrature points
+       for (unsigned int k=0;k<n;++k)
+         {
+           const Tensor<1,dim>& right
+             = fe_internal.differences[d1]->shape_grad(shape, k);
+           const Tensor<1,dim>& left
+             = fe_internal.differences[d1+dim]->shape_grad(shape, k);
+           for (unsigned int d=0;d<dim;++d)
+             diff_quot[d][k][d1] = (.5/1.e-6) * (right[d]-left[d]);
+         }
+      
+      for (unsigned int d=0;d<dim;++d)
+       {
+         mapping.transform_covariant (diff_quot2, diff_quot[d],
+                                      mapping_internal, offset);
+
+         for (unsigned int k=0;k<n;++k)
+           for (unsigned int d1=0;d1<dim;++d1)
+             data.shape_2nd_derivatives[shape][k][d][d1] = diff_quot2[k][d1];
+       }
+    }
+}
 
-template <>
-void FiniteElement<1>::get_unit_support_points (std::vector<Point<1> > &support_points) const {
-  Assert (support_points.size() == dofs_per_cell,
-         ExcWrongFieldDimension(support_points.size(), dofs_per_cell));
-                                  // compute support points. The first ones
-                                  // belong to vertex one, the second ones
-                                  // to vertex two, all following are
-                                  // equally spaced along the line
-  unsigned int next = 0;
-                                  // first the dofs in the vertices
-  for (unsigned int i=0; i<dofs_per_vertex; ++i)
-    support_points[next++] = Point<1>(0.0);
-  for (unsigned int i=0; i<dofs_per_vertex; ++i)
-    support_points[next++] = Point<1>(1.0);
-  
-                                  // now dofs on line
-  for (unsigned int i=0; i<dofs_per_line; ++i) 
-    support_points[next++] = Point<1>((i+1.0)/(dofs_per_line+1.0));
-};
 
+/*------------------------------- FiniteElement ----------------------*/
 
-template <>
-void FiniteElement<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                          std::vector<Point<1> > &support_points) const {
-  Assert (support_points.size() == dofs_per_cell,
-         ExcWrongFieldDimension(support_points.size(), dofs_per_cell));
-                                  // compute support points. The first ones
-                                  // belong to vertex one, the second ones
-                                  // to vertex two, all following are
-                                  // equally spaced along the line
-  unsigned int next = 0;
-                                  // local mesh width
-  const double h=(cell->vertex(1)(0) - cell->vertex(0)(0));
-                                  // first the dofs in the vertices
-  for (unsigned int vertex=0; vertex<2; vertex++) 
-    for (unsigned int i=0; i<dofs_per_vertex; ++i)
-      support_points[next++] = cell->vertex(vertex);
-  
-                                  // now dofs on line
-  for (unsigned int i=0; i<dofs_per_line; ++i) 
-    support_points[next++] = cell->vertex(0) +
-                            Point<1>((i+1.0)/(dofs_per_line+1.0)*h);
-};
+template <int dim>
+FiniteElement<dim>::FiniteElement (const FiniteElementData<dim> &fe_data,
+                                  const std::vector<bool> &restriction_is_additive_flags) :
+               FiniteElementBase<dim> (fe_data,
+                                       restriction_is_additive_flags)
+{}
 
-#endif
 
 
 template <int dim>
-void FiniteElement<dim>::fill_fe_values (const typename DoFHandler<dim>::cell_iterator &,
-                                        const typename std::vector<Point<dim> > &,
-                                        typename std::vector<Tensor<2,dim> > &,
-                                        const bool,
-                                        typename std::vector<Tensor<3,dim> > &,
-                                        const bool,
-                                        typename std::vector<Point<dim> > &,
-                                        const bool,
-                                        typename std::vector<Point<dim> > &,
-                                        const bool,
-                                        const FullMatrix<double>      &,
-                                        const typename std::vector<typename std::vector<Tensor<1,dim> > > &) const {
-  Assert (false, ExcPureFunctionCalled());
-};
+FiniteElement<dim>::~FiniteElement ()
+{}
+
 
 
 template <int dim>
-void FiniteElement<dim>::fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                             const unsigned int           face_no,
-                                             const typename std::vector<Point<dim-1> > &unit_points,
-                                             const typename std::vector<Point<dim> > &global_unit_points,
-                                             typename std::vector<Tensor<2,dim> >    &jacobians,
-                                             const bool           compute_jacobians,
-                                             typename std::vector<Tensor<3,dim> >    &jacobians_grad,
-                                             const bool           compute_jacobians_grad,
-                                             typename std::vector<Point<dim> > &support_points,
-                                             const bool           compute_support_points,
-                                             typename std::vector<Point<dim> > &q_points,
-                                             const bool           compute_q_points,
-                                             std::vector<double>      &face_jacobi_determinants,
-                                             const bool           compute_face_jacobians,
-                                             typename std::vector<Point<dim> > &normal_vectors,
-                                             const bool           compute_normal_vectors,
-                                             const FullMatrix<double>      &shape_values_transform,
-                                             const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_gradients_transform) const
+void
+FiniteElement<dim>::get_unit_support_points (std::vector<Point<dim> > &points) const
 {
-  Assert (jacobians.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(jacobians.size(),
-                                                                 unit_points.size()));
-  Assert (q_points.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(q_points.size(),
-                                                                 unit_points.size()));
-  Assert (global_unit_points.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(global_unit_points.size(),
-                                                                 unit_points.size()));
-  Assert (support_points.size() == dofs_per_face,
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(support_points.size(),
-                                                                 dofs_per_face));
-  
-                                  // size not checked since not used
-  static std::vector<Point<dim> > dummy(0);
-  fill_fe_values (cell, global_unit_points,
-                 jacobians, compute_jacobians,
-                 jacobians_grad, compute_jacobians_grad,
-                 dummy, false,
-                 q_points, compute_q_points,
-                 shape_values_transform, shape_gradients_transform);
-  
-  if (compute_support_points)
-    get_face_support_points (cell->face(face_no), support_points);
-
-  if (compute_face_jacobians)
-    get_face_jacobians (cell->face(face_no),
-                       unit_points,
-                       face_jacobi_determinants);
-
-  if (compute_normal_vectors)
-    get_normal_vectors (cell, face_no, unit_points, normal_vectors);
-};
-
+  points.resize(0);
+}
 
+    
 template <int dim>
-void FiniteElement<dim>::fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                                const unsigned int           face_no,
-                                                const unsigned int           subface_no,
-                                                const typename std::vector<Point<dim-1> > &unit_points,
-                                                const typename std::vector<Point<dim> > &global_unit_points,
-                                                typename std::vector<Tensor<2,dim> >    &jacobians,
-                                                const bool           compute_jacobians,
-                                                typename std::vector<Tensor<3,dim> >    &jacobians_grad,
-                                                const bool           compute_jacobians_grad,
-                                                typename std::vector<Point<dim> > &q_points,
-                                                const bool           compute_q_points,
-                                                std::vector<double>      &face_jacobi_determinants,
-                                                const bool           compute_face_jacobians,
-                                                typename std::vector<Point<dim> > &normal_vectors,
-                                                const bool           compute_normal_vectors,
-                                                const FullMatrix<double>      &shape_values_transform,
-                                                const typename std::vector<std::vector<Tensor<1,dim> > > &shape_gradients_transform) const
+void
+FiniteElement<dim>::get_unit_face_support_points (std::vector<Point<dim-1> > &points) const
 {
-  Assert (jacobians.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(jacobians.size(),
-                                                                 unit_points.size()));
-  Assert (q_points.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(q_points.size(),
-                                                                 unit_points.size()));
-  Assert (global_unit_points.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(global_unit_points.size(),
-                                                                 unit_points.size()));
-
-  static std::vector<Point<dim> > dummy(0); // size not checked since not used
-  fill_fe_values (cell, global_unit_points,
-                 jacobians, compute_jacobians,
-                 jacobians_grad, compute_jacobians_grad,
-                 dummy, false,
-                 q_points, compute_q_points,
-                 shape_values_transform, shape_gradients_transform);
-  
-  if (compute_face_jacobians)
-    get_subface_jacobians (cell->face(face_no), subface_no,
-                          unit_points, face_jacobi_determinants);
-
-  if (compute_normal_vectors)
-    get_normal_vectors (cell, face_no, subface_no,
-                       unit_points, normal_vectors);
-};
+  points.resize(0);
+}
 
+    
 
 template <int dim>
-void
-FiniteElement<dim>::get_unit_support_points (typename std::vector<Point<dim> > &) const
+Mapping<dim>::InternalDataBase*
+FiniteElement<dim>::get_face_data (const UpdateFlags flags,
+                                  const Mapping<dim>& mapping,
+                                  const Quadrature<dim-1> &quadrature) const
 {
-  Assert (false, ExcPureFunctionCalled());
-};
+  QProjector<dim> q(quadrature, false);
+  return get_data (flags, mapping, q);
+}
 
 
 template <int dim>
-void
-FiniteElement<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &,
-                                       typename std::vector<Point<dim> > &) const
+Mapping<dim>::InternalDataBase*
+FiniteElement<dim>::get_subface_data (const UpdateFlags flags,
+                                     const Mapping<dim>& mapping,
+                                     const Quadrature<dim-1> &quadrature) const
 {
-  Assert (false, ExcPureFunctionCalled());
-};
+  QProjector<dim> q(quadrature, true);
+  return get_data (flags, mapping, q);
+  
+}
 
 
 template <int dim>
@@ -593,6 +326,16 @@ FiniteElement<dim>::n_base_elements() const
   return 1;
 }
 
+template <int dim>
+unsigned int
+FiniteElement<dim>::memory_consumption () const
+{
+  return FiniteElementBase<dim>::memory_consumption ();
+}
+
+
+
+
 template <int dim>
 const FiniteElement<dim>&
 FiniteElement<dim>::base_element(unsigned index) const
@@ -603,7 +346,6 @@ FiniteElement<dim>::base_element(unsigned index) const
 
 /*------------------------------- Explicit Instantiations -------------*/
 
-template class FiniteElementData<deal_II_dimension>;
 template class FiniteElementBase<deal_II_dimension>;
 template class FiniteElement<deal_II_dimension>;
 
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9079dac9c4cbfc24e8956c270b04423c4b039541 100644 (file)
@@ -0,0 +1,69 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+
+#include <fe/fe.h>
+#include <grid/geometry_info.h>
+
+
+template <int dim>
+FiniteElementData<dim>::FiniteElementData (const std::vector<unsigned int> &dofs_per_object,
+                                          const unsigned int n_components) :
+               dofs_per_vertex(dofs_per_object[0]),
+               dofs_per_line(dofs_per_object[1]),
+               dofs_per_quad(dim>1? dofs_per_object[2]:0),
+               dofs_per_hex(dim>2? dofs_per_object[3]:0),
+               first_line_index(GeometryInfo<dim>::vertices_per_cell
+                                * dofs_per_vertex),
+               first_quad_index(first_line_index+
+                                GeometryInfo<dim>::lines_per_cell
+                                * dofs_per_line),
+               first_hex_index(first_quad_index+
+                               GeometryInfo<dim>::quads_per_cell
+                               * dofs_per_quad),
+               first_face_line_index(GeometryInfo<dim-1>::vertices_per_cell
+                                     * dofs_per_vertex),
+               first_face_quad_index((dim==3 ?
+                                      first_face_line_index :
+                                      first_line_index) +
+                                     GeometryInfo<dim-1>::lines_per_cell
+                                     * dofs_per_line),
+               dofs_per_face(GeometryInfo<dim>::vertices_per_face * dofs_per_vertex +
+                             GeometryInfo<dim>::lines_per_face * dofs_per_line +
+                             GeometryInfo<dim>::quads_per_face * dofs_per_quad),
+               dofs_per_cell (GeometryInfo<dim>::vertices_per_cell * dofs_per_vertex +
+                              GeometryInfo<dim>::lines_per_cell * dofs_per_line +
+                              GeometryInfo<dim>::quads_per_cell * dofs_per_quad +
+                              GeometryInfo<dim>::hexes_per_cell * dofs_per_hex),
+               components(n_components)
+{
+  Assert(dofs_per_object.size()==dim+1, ExcDimensionMismatch(dofs_per_object.size()-1,dim));
+};
+
+
+
+template<int dim>
+bool FiniteElementData<dim>::operator== (const FiniteElementData<dim> &f) const
+{
+  return ((dofs_per_vertex == f.dofs_per_vertex) &&
+         (dofs_per_line == f.dofs_per_line) &&
+         (dofs_per_quad == f.dofs_per_quad) &&
+         (dofs_per_hex == f.dofs_per_hex) &&
+         (components == f.components));
+};
+
+
+template class FiniteElementData<1>;
+template class FiniteElementData<2>;
+template class FiniteElementData<3>;
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2250f1a0590e9461ed40d351f431c1f38991f242 100644 (file)
@@ -0,0 +1,549 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+#include <base/quadrature.h>
+#include <base/polynomial.h>
+#include <base/tensor_product_polynomials.h>
+#include <grid/tria.h>
+#include <grid/tria_iterator.h>
+#include <dofs/dof_accessor.h>
+#include <fe/fe.h>
+#include <fe/mapping.h>
+#include <fe/mapping_q1.h>
+#include <fe/fe_dgq.h>
+#include <fe/fe_values.h>
+
+static std::vector<bool> dummy(1,true);
+
+// Embedding matrices (produced by tests/fe/embedding with postprocessing)
+
+#if (deal_II_dimension == 1)
+#include "mat_dgq.1"
+#endif
+
+#if (deal_II_dimension == 2)
+#include "mat_dgq.2"
+#endif
+
+#if (deal_II_dimension == 3)
+#include "mat_dgq.3"
+#endif
+
+
+template <int dim>
+FE_DGQ<dim>::InternalData::~InternalData ()
+{
+  for (unsigned int i=0;i<differences.size ();++i)
+    if (differences[i] != 0)
+      delete differences[i];
+}
+
+
+
+
+template <int dim>
+FE_DGQ<dim>::FE_DGQ (unsigned int degree)
+               :
+               FiniteElement<dim> (FiniteElementData<dim>(get_dpo_vector(degree),1), dummy),
+                                     degree(degree),
+                                     polynomials(degree+1),
+                                     poly(0)
+{
+  std::vector<SmartPointer<Polynomial<double> > > v(degree+1);
+  if (degree==0)
+    {
+      std::vector<double> coeff(1);
+      coeff[0] = 1.;
+      polynomials[0] = Polynomial<double> (coeff);
+      v[0] = &(polynomials[0]);
+    } else {
+      for (unsigned int i=0;i<=degree;++i)
+       {
+         LagrangeEquidistant p(degree, i);
+         polynomials[i] = p;
+         v[i] = &(polynomials[i]);
+       }
+    }
+  
+  poly = new TensorProductPolynomials<dim> (v);
+
+  Assert (degree <= 10, ExcNotImplemented());
+  
+  std::vector<unsigned int> right;
+  std::vector<unsigned int> top;
+  rotate_indices (right, 'Z');
+  if (dim>2)
+    rotate_indices (top, 'X');
+
+  if (embedding[degree] != 0)
+    {
+      prolongation[0].fill (embedding[degree]);
+      switch (dim)
+       {
+         case 1:
+               prolongation[1].fill_permutation (prolongation[0],
+                                                 right, right);
+               break;
+         case 2:
+               prolongation[1].fill_permutation (prolongation[0],
+                                                 right, right);
+               prolongation[2].fill_permutation (prolongation[1],
+                                                 right, right);
+               prolongation[3].fill_permutation (prolongation[2],
+                                                 right, right);
+               break;
+         case 3:
+               prolongation[1].fill_permutation (prolongation[0],
+                                                 right, right);
+               prolongation[5].fill_permutation (prolongation[1],
+                                                 right, right);
+               prolongation[4].fill_permutation (prolongation[5],
+                                                 right, right);
+               prolongation[7].fill_permutation (prolongation[4],
+                                                 top, top);
+               prolongation[3].fill_permutation (prolongation[7],
+                                                 top, top);
+               prolongation[6].fill_permutation (prolongation[5],
+                                                 top, top);
+               prolongation[2].fill_permutation (prolongation[6],
+                                                 top, top);
+               break;
+         default:
+               for (unsigned int i=0;i<GeometryInfo<dim>::children_per_cell;++i)
+                 prolongation[i].reinit(0);
+       }
+    } else {
+      for (unsigned int i=0;i<GeometryInfo<dim>::children_per_cell;++i)
+       prolongation[i].reinit(0);
+    }
+  
+  if (projection_matrices[degree] != 0)
+    {
+      restriction[0].fill (projection_matrices[degree]);
+      switch (dim)
+       {
+         case 1:
+               restriction[1].fill_permutation (restriction[0],
+                                                right, right);
+               break;
+         case 2:
+               restriction[1].fill_permutation (restriction[0],
+                                                right, right);
+               restriction[2].fill_permutation (restriction[1],
+                                                right, right);
+               restriction[3].fill_permutation (restriction[2],
+                                                right, right);
+               break;
+         case 3:
+               restriction[1].fill_permutation (restriction[0],
+                                                right, right);
+               restriction[5].fill_permutation (restriction[1],
+                                                right, right);
+               restriction[4].fill_permutation (restriction[5],
+                                                right, right);
+               restriction[7].fill_permutation (restriction[4],
+                                                top, top);
+               restriction[3].fill_permutation (restriction[7],
+                                                top, top);
+               restriction[6].fill_permutation (restriction[5],
+                                                top, top);
+               restriction[2].fill_permutation (restriction[6],
+                                                top, top);
+               break;
+         default:
+               for (unsigned int i=0;i<GeometryInfo<dim>::children_per_cell;++i)
+                 restriction[i].reinit(0);
+       }
+    }
+}
+
+
+template <int dim>
+FE_DGQ<dim>::~FE_DGQ ()
+{
+  delete poly;
+}
+
+
+template <int dim>
+FiniteElement<dim> *
+FE_DGQ<dim>::clone() const
+{
+  return new FE_DGQ<dim>(degree);
+}
+
+
+template <int dim>
+void
+FE_DGQ<dim>::get_unit_support_points (std::vector<Point<dim> > &points) const
+{
+  if (degree>0)
+    compute_support_points (points, degree);
+  else
+    {
+      points.resize(1);
+      for (unsigned int i=0; i<dim; ++i)
+       points[0](i)=0.5;
+    }
+}
+
+    
+template <int dim>
+void
+FE_DGQ<dim>::get_unit_face_support_points (std::vector<Point<dim-1> > &points) const
+{
+  points.resize(0);
+}
+
+//----------------------------------------------------------------------
+// Auxilliary functions
+//----------------------------------------------------------------------
+
+
+template <int dim>
+std::vector<unsigned int>
+FE_DGQ<dim>::get_dpo_vector(unsigned int deg)
+{
+  std::vector<unsigned int> dpo(dim+1, 0);
+  dpo[dim] = ++deg;
+  for (unsigned int i=1;i<dim;++i)
+    dpo[dim] *= deg;
+  return dpo;
+}
+
+
+template <int dim>
+UpdateFlags
+FE_DGQ<dim>::update_once (UpdateFlags flags) const
+{
+  UpdateFlags out = update_default;
+
+//  cerr << "FE_DGQ:Once: " << hex << flags << ' ';
+
+  if (flags & update_values)
+    out |= update_values;
+
+//  cerr << out << dec << endl;
+
+  return out;
+}
+
+
+template <int dim>
+UpdateFlags
+FE_DGQ<dim>::update_each (UpdateFlags flags) const
+{
+  UpdateFlags out = update_default;
+
+//  cerr << "FE_DGQ:Each: " << hex << flags << ' ';
+
+  if (flags & update_gradients)
+    out |= update_gradients | update_covariant_transformation;
+  if (flags & update_second_derivatives)
+    out |= update_second_derivatives;
+
+//  cerr << out << dec << endl;
+
+  return out;
+}
+
+
+template <int dim>
+void
+FE_DGQ<dim>::compute_support_points (std::vector<Point<dim> >& support_points,
+                                    unsigned int degree)
+{
+  Assert(degree>0, ExcInternalError());
+                                  // number of points: (degree+1)^dim
+  unsigned int n= degree+1;
+  for (unsigned int i=1;i<dim;++i)
+    n *= degree+1;
+
+  support_points.resize(n);
+  
+  double step = 1./degree;
+  Point<dim> p;
+  
+  unsigned int k=0;
+  for (unsigned int iz=0;iz <= ((dim>2) ? degree : 0) ; ++iz)
+    for (unsigned int iy=0;iy <= ((dim>1) ? degree : 0) ; ++iy)
+      for (unsigned int ix=0;ix<=degree;++ix)
+        {
+         p(0) = ix * step;
+         if (dim>1)
+           p(1) = iy * step;
+         if (dim>2)
+           p(2) = iz * step;
+         
+         support_points[k++] = p;
+       }
+}
+
+
+template <int dim>
+void
+FE_DGQ<dim>::rotate_indices (std::vector<unsigned int>& numbers,
+                            const char direction) const
+{
+  const unsigned int n = degree+1;
+  unsigned int s = n;
+  for (unsigned int i=1;i<dim;++i)
+    s *= n;
+  numbers.resize (s);
+  
+  unsigned int l = 0;
+
+  if (dim==1)
+    {
+                                      // Mirror around midpoint
+      for (unsigned int i=n;i>0;)
+       numbers[l++]=--i;
+    } else {
+      switch (direction)
+       {
+                                          // Rotate xy-plane
+                                          // counter-clockwise
+         case 'z':
+               for (unsigned int iz=0;iz<((dim>2) ? n:1);++iz)
+                 for (unsigned int j=0;j<n;++j)
+                   for (unsigned int i=0;i<n;++i)
+                     {
+                       unsigned int k = n*i-j+n-1 + n*n*iz;
+                       numbers[l++] = k;
+                     }
+               break;
+                                                // Rotate xy-plane
+                                                // clockwise
+         case 'Z':
+               for (unsigned int iz=0;iz<((dim>2) ? n:1);++iz)
+                 for (unsigned int iy=0;iy<n;++iy)
+                   for (unsigned int ix=0;ix<n;++ix)
+                     {
+                       unsigned int k = n*ix-iy+n-1 + n*n*iz;
+                       numbers[k] = l++;
+                     }
+               break;
+                                                // Rotate yz-plane
+                                                // counter-clockwise
+         case 'x':
+               Assert (dim>2, ExcDimensionMismatch (dim,3));
+               for (unsigned int iz=0;iz<n;++iz)
+                 for (unsigned int iy=0;iy<n;++iy)
+                   for (unsigned int ix=0;ix<n;++ix)
+                     {
+                       unsigned int k = n*(n*iy-iz+n-1) + ix;
+                       numbers[l++] = k;
+                     }
+               break;
+                                                // Rotate yz-plane
+                                                // clockwise
+         case 'X':
+               Assert (dim>2, ExcDimensionMismatch (dim,3));
+               for (unsigned int iz=0;iz<n;++iz)
+                 for (unsigned int iy=0;iy<n;++iy)
+                   for (unsigned int ix=0;ix<n;++ix)
+                     {
+                       unsigned int k = n*(n*iy-iz+n-1) + ix;
+                       numbers[k] = l++;
+                     }
+               break;
+         default:
+               Assert (false, ExcNotImplemented ());
+       }
+    }
+}
+
+
+
+
+//----------------------------------------------------------------------
+// Data field initialization
+//----------------------------------------------------------------------
+template <int dim>
+Mapping<dim>::InternalDataBase*
+FE_DGQ<dim>::get_data (const UpdateFlags update_flags,
+                      const Mapping<dim>& mapping,
+                      const Quadrature<dim> &quadrature) const
+{
+  InternalData* data = new InternalData;
+  std::vector<double> values(0);
+  std::vector<Tensor<1,dim> > grads(0);
+  std::vector<Tensor<2,dim> > grad_grads(0);
+  
+  data->update_once = update_once(update_flags);
+  data->update_each = update_each(update_flags);
+  data->update_flags = data->update_once | data->update_each;
+
+  const UpdateFlags flags(data->update_flags);
+  
+  if (flags & update_values)
+    {
+      values.resize (dofs_per_cell);
+      data->shape_values.resize(dofs_per_cell,
+                               std::vector<double>(quadrature.n_quadrature_points));
+    }
+
+  if (flags & update_gradients)
+    {
+      grads.resize (dofs_per_cell);
+      data->shape_gradients.resize(dofs_per_cell,
+                                  std::vector<Tensor<1,dim> >(quadrature.n_quadrature_points));
+    }
+
+  if (flags & update_second_derivatives)
+    {
+      data->initialize (this, mapping, quadrature);
+    }
+  
+  
+  if (flags & (update_values | update_gradients))
+    for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+      {
+       poly->compute(quadrature.point(i), values, grads, grad_grads);
+       for (unsigned int k=0;k<dofs_per_cell; ++k)
+         {
+           if (flags & update_values)
+             data->shape_values[k][i] = values[k];
+           if (flags & update_gradients)
+             data->shape_gradients[k][i] = grads[k];
+         }
+      }
+  return data;
+}
+
+
+
+//----------------------------------------------------------------------
+// Fill data of FEValues
+//----------------------------------------------------------------------
+template <int dim>
+void
+FE_DGQ<dim>::fill_fe_values (const Mapping<dim>                   &mapping,
+                            const DoFHandler<dim>::cell_iterator &cell,
+                            const Quadrature<dim>                &quadrature,
+                            Mapping<dim>::InternalDataBase      &mapping_data,
+                            Mapping<dim>::InternalDataBase      &fedata,
+                            FEValuesData<dim>                    &data) const
+{
+  InternalData &fe_data = dynamic_cast<InternalData &> (fedata);
+  
+  const UpdateFlags flags(fe_data.current_update_flags());
+
+  for (unsigned int k=0;k<dofs_per_cell;++k)
+    {
+      for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+       {
+         if (flags & update_values)
+           data.shape_values(k,i)
+             = fe_data.shape_values[k][i];
+       }
+      
+      if (flags & update_gradients)
+       mapping.transform_covariant(data.shape_gradients[k],
+                                   fe_data.shape_gradients[k],
+                                   mapping_data, 0);
+    }
+  if (flags & update_second_derivatives)
+    compute_2nd (mapping, cell, 0, mapping_data, fe_data, data);
+  
+  fe_data.first_cell = false;
+}
+
+
+
+template <int dim>
+void
+FE_DGQ<dim>::fill_fe_face_values (const Mapping<dim> &mapping,
+                                 const DoFHandler<dim>::cell_iterator &cell,
+                                 const unsigned int face,
+                                 const Quadrature<dim-1>& quadrature,
+                                 Mapping<dim>::InternalDataBase& mapping_data,
+                                 Mapping<dim>::InternalDataBase& fedata,
+                                 FEValuesData<dim>& data) const
+{
+  InternalData &fe_data = dynamic_cast<InternalData &> (fedata);
+  unsigned int offset = face * quadrature.n_quadrature_points;
+  
+  const UpdateFlags flags(fe_data.update_once | fe_data.update_each);
+
+  for (unsigned int k=0;k<dofs_per_cell;++k)
+    {
+      for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+       {
+         if (flags & update_values)
+           data.shape_values(k,i)
+             = fe_data.shape_values[k][i+offset];
+       }
+      
+      if (flags & update_gradients)
+       mapping.transform_covariant(data.shape_gradients[k],
+                                   fe_data.shape_gradients[k],
+                                   mapping_data, offset);
+      if (flags & update_second_derivatives)
+       compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    }
+  
+  fe_data.first_cell = false;
+}
+
+
+
+template <int dim>
+void
+FE_DGQ<dim>::fill_fe_subface_values (const Mapping<dim> &mapping,
+                                    const DoFHandler<dim>::cell_iterator &cell,
+                                    const unsigned int face,
+                                    const unsigned int subface,
+                                    const Quadrature<dim-1>& quadrature,
+                                    Mapping<dim>::InternalDataBase& mapping_data,
+                                    Mapping<dim>::InternalDataBase& fedata,
+                                    FEValuesData<dim>& data) const
+{
+  InternalData &fe_data = dynamic_cast<InternalData &> (fedata);
+  unsigned int offset = (face * GeometryInfo<dim>::subfaces_per_face
+                        + subface) * quadrature.n_quadrature_points;
+
+  const UpdateFlags flags(fe_data.update_once | fe_data.update_each);
+
+  for (unsigned int k=0;k<dofs_per_cell;++k)
+    {
+      for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+       {
+         if (flags & update_values)
+           data.shape_values(k,i)
+             = fe_data.shape_values[k][i+offset];
+       }
+      
+      if (flags & update_gradients)
+       mapping.transform_covariant(data.shape_gradients[k],
+                                   fe_data.shape_gradients[k],
+                                   mapping_data, offset);
+      if (flags & update_second_derivatives)
+       compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    }
+  
+  fe_data.first_cell = false;
+}
+
+
+template <int dim>
+unsigned int
+FE_DGQ<dim>::memory_consumption () const
+{
+  Assert (false, ExcNotImplemented ());
+  return 0;
+}
+
+
+
+template FE_DGQ<deal_II_dimension>;
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
deleted file mode 100644 (file)
index e74dd30..0000000
+++ /dev/null
@@ -1,1353 +0,0 @@
-//----------------------------  fe_lib.criss_cross.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.criss_cross.cc  ---------------------------
-
-
-#include <fe/fe_lib.criss_cross.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-
-#include <cmath>
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-/*-----------------------------------2d------------------------------------
-  Maple script to automate some of the error-prone computations on
-  this strange sort of element.
-
-  n_functions      := 5:
-
-  # note: support_points[i] is a std::vector which is indexed from
-  # one and not from zero!
-  support_points[0] := [0,0]:
-  support_points[1] := [1,0]:
-  support_points[2] := [1,1]:
-  support_points[3] := [0,1]:
-  support_points[4] := [1/2,1/2]:
-  
-  phi[0] := proc(x,y) if(y<1-x) then 1-x-y; else 0; fi; end:
-  phi[1] := proc(x,y) if(y<x)   then x-y;   else 0; fi; end:
-  phi[2] := proc(x,y) if(y>1-x) then x+y-1; else 0; fi; end:
-  phi[3] := proc(x,y) if(y>x)   then y-x;   else 0; fi; end:
-  phi[4] := proc(x,y) 1 - phi[0](x,y) - phi[1](x,y)
-                        - phi[2](x,y) - phi[3](x,y) ; end:
-
-  #points on children: let them be indexed one-based, as are
-  #the support_points
-  points[0] := array(0..n_functions-1, 1..2):
-  points[1] := array(0..n_functions-1, 1..2):
-  points[2] := array(0..n_functions-1, 1..2):
-  points[3] := array(0..n_functions-1, 1..2):
-  for i from 0 to n_functions-1 do
-    points[0][i,1] := support_points[i][1]/2:
-    points[0][i,2] := support_points[i][2]/2:
-    
-    points[1][i,1] := support_points[i][1]/2+1/2:
-    points[1][i,2] := support_points[i][2]/2:
-
-    points[2][i,1] := support_points[i][1]/2+1/2:
-    points[2][i,2] := support_points[i][2]/2+1/2:
-
-    points[3][i,1] := support_points[i][1]/2:
-    points[3][i,2] := support_points[i][2]/2+1/2:
-  od:  
-
-  prolongation := array(0..3,0..n_functions-1, 0..n_functions-1):
-  print ("Computing prolongation matrices"):
-  for i from 0 to 3 do
-    print ("child", i):
-    for j from 0 to n_functions-1 do
-      for k from 0 to n_functions-1 do
-        prolongation[i,j,k] := phi[k](points[i][j,1], points[i][j,2]):
-      od:
-    od:
-  od:
-
-  print ("Computing restriction matrices"):
-  # to get the restriction (interpolation) matrices, evaluate
-  # the basis functions on the child cells at the global
-  # interpolation points
-  child_phi[0] := proc(i, x, y)
-                    if ((x>1/2) or (y>1/2)) then
-                     0:
-                   else
-                     phi[i](2*x,2*y):
-                   fi:
-                 end: 
-  child_phi[1] := proc(i, x, y)
-                    if ((x<1/2) or (y>1/2)) then
-                     0:
-                   else
-                     phi[i](2*x-1,2*y):
-                   fi:
-                 end: 
-  child_phi[2] := proc(i, x, y)
-                    if ((x<1/2) or (y<1/2)) then
-                     0:
-                   else
-                     phi[i](2*x-1,2*y-1):
-                   fi:
-                 end: 
-  child_phi[3] := proc(i, x, y)
-                    if ((x>1/2) or (y<1/2)) then
-                     0:
-                   else
-                     phi[i](2*x,2*y-1):
-                   fi:
-                 end: 
-  restriction := array(0..3,0..n_functions-1, 0..n_functions-1):
-  for child from 0 to 3 do
-    for j from 0 to n_functions-1 do
-      for k from 0 to n_functions-1 do
-        restriction[child,j,k] := child_phi[child](k,
-                                                  support_points[j][1],
-                                                  support_points[j][2]):
-      od:
-    od:
-  od:
-
-
-  # these are the basis functions differentiated with respect to
-  # xi and eta. we need them for the computation of the jacobi
-  # matrix, since we can't just differentiate a function.
-  phi_xi[0] := proc(x,y) if(y<1-x) then -1;  else 0; fi; end:
-  phi_xi[1] := proc(x,y) if(y<x)   then 1;   else 0; fi; end:
-  phi_xi[2] := proc(x,y) if(y>1-x) then 1;   else 0; fi; end:
-  phi_xi[3] := proc(x,y) if(y>x)   then -1;  else 0; fi; end:
-  phi_xi[4] := proc(x,y) 1 - phi_xi[0](x,y) - phi_xi[1](x,y)
-                           - phi_xi[2](x,y) - phi_xi[3](x,y) ; end:
-
-  phi_eta[0] := proc(x,y) if(y<1-x) then -1;  else 0; fi; end:
-  phi_eta[1] := proc(x,y) if(y<x)   then -1;  else 0; fi; end:
-  phi_eta[2] := proc(x,y) if(y>1-x) then 1;   else 0; fi; end:
-  phi_eta[3] := proc(x,y) if(y>x)   then 1;   else 0; fi; end:
-  phi_eta[4] := proc(x,y) 1 - phi_eta[0](x,y) - phi_eta[1](x,y)
-                            - phi_eta[2](x,y) - phi_eta[3](x,y) ; end:
-
-  # define an array of the support points in real space; the first
-  # four are the vertices, the last one is the crossing point of
-  # the two diagonals
-  print ("Computing cross point"):
-  x := array(0..4):
-  y := array(0..4):
-
-  eq_sys := {(1-t)*x[0] + t*x[2] = (1-s)*x[1] + s*x[3],
-             (1-t)*y[0] + t*y[2] = (1-s)*y[1] + s*y[3]}:
-  solution := solve (eq_sys, {s,t}):
-
-  # set last point in dependence of the first four
-  x[4] := subs (solution, (1-t)*x[0] + t*x[2]):
-  y[4] := subs (solution, (1-t)*y[0] + t*y[2]):
-
-  # this is the mapping from the unit cell to the real cell, only for
-  # completeness; we can't use it here, since phi[i] can't be
-  # differentiated
-  x_real := simplify(sum(x[s]*phi[s], s=0..4)):
-  y_real := simplify(sum(y[s]*phi[s], s=0..4)):
-
-  # correct form of the jacobi determinant:
-  #   detJ :=   diff(x_real,xi)*diff(y_real,eta)
-  #           - diff(x_real,eta)*diff(y_real,xi):
-  # better now:
-  detJ1 := proc(xi,eta) sum(x[s]*phi_xi[s](xi,eta), s=0..4); end:
-  detJ2 := proc(xi,eta) sum(y[s]*phi_eta[s](xi,eta), s=0..4); end:
-  detJ3 := proc(xi,eta) sum(x[s]*phi_eta[s](xi,eta), s=0..4); end:
-  detJ4 := proc(xi,eta) sum(y[s]*phi_xi[s](xi,eta), s=0..4); end:
-  detJ := proc(xi,eta)
-             detJ1(xi,eta) * detJ2(xi,eta) -
-            detJ3(xi,eta) * detJ4(xi,eta);
-          end:
-
-
-  # Now for the mass matrix: we divide the entire cell into four
-  # sectors:
-  #
-  # *-------*
-  # |\     /|
-  # | \ 3 / |
-  # |  \ /  |
-  # |4  *  2|
-  # |  / \  |
-  # | / 1 \ |
-  # |/     \|
-  # *-------*
-  #
-  # In each of these sectors, the Jacobi determinant is constant
-  # so that we can assemble the local mass matrix by summation
-  # over these four sectors. Since the basis functions are as of
-  # now only expressed as if-then-else statements, we have to
-  # express them for each sector separately and name them
-  # phi_s[i]. detJ_s denotes the Jacobi determinant on this sector.
-
-  print ("Computing mass matrix"):
-
-  mass_matrix := array (0..n_functions-1, 0..n_functions-1):
-  for i from 0 to n_functions-1 do
-    for j from 0 to n_functions-1 do
-      mass_matrix[i,j] := 0:
-    od:
-  od:
-  
-  # sector 1
-  phi_s[0] := 1-x-y:
-  phi_s[1] := x-y:
-  phi_s[2] := 0:
-  phi_s[3] := 0:
-  phi_s[4] := 1 - phi_s[0] - phi_s[1] - phi_s[2] - phi_s[3]:
-
-  detJ_s := simplify(detJ(1/2, 1/4)):
-  
-  for i from 0 to n_functions-1 do
-    for j from 0 to n_functions-1 do
-      # split integral over sector into the two parts
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..x),
-                             x=0..1/2) * detJ_s:
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..1-x),
-                             x=1/2..1) * detJ_s:
-    od:
-  od:  
-  
-  # sector 2
-  phi_s[0] := 0:
-  phi_s[1] := x-y:
-  phi_s[2] := x+y-1:
-  phi_s[3] := 0:
-  phi_s[4] := 1 - phi_s[0] - phi_s[1] - phi_s[2] - phi_s[3]:
-
-  detJ_s := simplify(detJ(3/4, 1/2)):
-  
-  for i from 0 to n_functions-1 do
-    for j from 0 to n_functions-1 do
-      # split integral over sector into the two parts
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..x),
-                             x=0..1/2) * detJ_s:
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..1-x),
-                             x=1/2..1) * detJ_s:
-    od:
-  od:  
-
-  # sector 3
-  phi_s[0] := 0:
-  phi_s[1] := 0:
-  phi_s[2] := x+y-1:
-  phi_s[3] := y-x:
-  phi_s[4] := 1 - phi_s[0] - phi_s[1] - phi_s[2] - phi_s[3]:
-
-  detJ_s := simplify(detJ(1/2, 3/4)):
-  
-  for i from 0 to n_functions-1 do
-    for j from 0 to n_functions-1 do
-      # split integral over sector into the two parts
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..x),
-                             x=0..1/2) * detJ_s:
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..1-x),
-                             x=1/2..1) * detJ_s:
-    od:
-  od:  
-
-  # sector 4
-  phi_s[0] := 1-x-y:
-  phi_s[1] := 0:
-  phi_s[2] := 0:
-  phi_s[3] := y-x:
-  phi_s[4] := 1 - phi_s[0] - phi_s[1] - phi_s[2] - phi_s[3]:
-
-  detJ_s := simplify(detJ(1/4, 1/2)):
-  
-  for i from 0 to n_functions-1 do
-    for j from 0 to n_functions-1 do
-      # split integral over sector into the two parts
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..x),
-                             x=0..1/2) * detJ_s:
-      mass_matrix[i,j] := mass_matrix[i,j] +
-                          int(int(phi_s[i] * phi_s[j],
-                                  y=0..1-x),
-                             x=1/2..1) * detJ_s:
-    od:
-  od:  
-  
-  print ("writing data to files"):
-  readlib(C):
-  C(prolongation, filename=prolongation_2d):
-  C(restriction, filename=restriction_2d):
-  C(array(1..2, [x[4], y[4]]), optimized, filename=crosspoint_2d):
-  C(mass_matrix, optimized, filename=massmatrix_2d):
-  
-  --------------------------------------------------------------------
-  
-  Postprocess the files by the commands
-  
-  perl -pi -e 's/\[(\d+)\]\[(\d+)\]\[(\d+)\]/[$1]($2,$3)/g;' prolongation_2d
-  perl -pi -e 's/.*= 0.0;\n//g;' prolongation_2d
-  perl -pi -e 's/\[(\d+)\]\[(\d+)\]/($1,$2)/g;' massmatrix_2d
-  perl -pi -e 's/(t\d+) =/const double $1 =/g;' massmatrix_2d
-
------------------------------------------------------------------------------*/
-
-
-#if deal_II_dimension == 1
-
-
-template <>
-FECrissCross<1>::FECrissCross () :
-                                                // set more or less invalid data
-               FiniteElement<1> (FiniteElementData<1> (0,0,0,0),
-                                 std::vector<bool>())
-{
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-double FECrissCross<1>::shape_value (const unsigned int, const Point<1> &) const {
-  Assert (false, ExcNotUseful());
-  return 0;
-};
-
-
-template <>
-Tensor<1,1> FECrissCross<1>::shape_grad (const unsigned int, const Point<1> &) const {
-  Assert (false, ExcNotUseful());
-  return Point<1>();
-};
-
-
-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 (std::vector<Point<1> >&) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::get_support_points (const DoFHandler<1>::cell_iterator &,
-                                         std::vector<Point<1> > &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                              std::vector<Point<1> > &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &,
-                                            FullMatrix<double> &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-double  FECrissCross<1>::shape_value_transform (const unsigned int,
-                                               const Point<1> &) const {
-  Assert (false, ExcNotUseful());
-  return 0;
-};
-
-
-template <>
-Tensor<1,1> FECrissCross<1>::shape_grad_transform (const unsigned int,
-                                                  const Point<1> &) const {
-  Assert (false, ExcNotUseful());
-  return Point<1>();
-};
-
-
-template <>
-void FECrissCross<1>::get_face_jacobians (const DoFHandler<1>::face_iterator &,
-                                         const std::vector<Point<0> > &,
-                                         std::vector<double>      &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::get_subface_jacobians (const DoFHandler<1>::face_iterator &,
-                                            const unsigned int,
-                                            const std::vector<Point<0> > &,
-                                            std::vector<double>      &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::get_normal_vectors (const DoFHandler<1>::cell_iterator &,
-                                         const unsigned int,
-                                         const std::vector<Point<0> > &,
-                                         std::vector<Point<1> >       &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::get_normal_vectors (const DoFHandler<1>::cell_iterator &,
-                                         const unsigned int,
-                                         const unsigned int,
-                                         const std::vector<Point<0> > &,
-                                         std::vector<Point<1> >       &) const {
-  Assert (false, ExcNotUseful());
-};
-
-
-template <>
-void FECrissCross<1>::fill_fe_values (const DoFHandler<1>::cell_iterator &,
-                                     const std::vector<Point<1> > &,
-                                     std::vector<Tensor<2,1> >    &,
-                                     const bool            ,
-                                     std::vector<Tensor<3,1> > &,
-                                     const bool            ,
-                                     std::vector<Point<1> >    &,
-                                     const bool            ,
-                                     std::vector<Point<1> >    &,
-                                     const bool            ,
-                                     const FullMatrix<double>       &,
-                                     const std::vector<std::vector<Tensor<1,1> > > &) const {
-  Assert (false, ExcNotUseful());
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-
-template <>
-FECrissCross<2>::FECrissCross () :
-               FiniteElement<2> (FiniteElementData<2> (1,0,1,5,1),
-                                 std::vector<bool> (1, false))
-{
-  interface_constraints(0,0) = 1./2.;
-  interface_constraints(0,1) = 1./2.;
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = 1.0/2.0;
-  prolongation[0](1,1) = 1.0/2.0;
-  prolongation[0](2,4) = 1.0;
-  prolongation[0](3,0) = 1.0/2.0;
-  prolongation[0](3,3) = 1.0/2.0;
-  prolongation[0](4,0) = 1.0/2.0;
-  prolongation[0](4,4) = 1.0/2.0;
-  prolongation[1](0,0) = 1.0/2.0;
-  prolongation[1](0,1) = 1.0/2.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,1) = 1.0/2.0;
-  prolongation[1](2,2) = 1.0/2.0;
-  prolongation[1](3,4) = 1.0;
-  prolongation[1](4,1) = 1.0/2.0;
-  prolongation[1](4,4) = 1.0/2.0;
-  prolongation[2](0,4) = 1.0;
-  prolongation[2](1,1) = 1.0/2.0;
-  prolongation[2](1,2) = 1.0/2.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](3,2) = 1.0/2.0;
-  prolongation[2](3,3) = 1.0/2.0;
-  prolongation[2](4,2) = 1.0/2.0;
-  prolongation[2](4,4) = 1.0/2.0;
-  prolongation[3](0,0) = 1.0/2.0;
-  prolongation[3](0,3) = 1.0/2.0;
-  prolongation[3](1,4) = 1.0;
-  prolongation[3](2,2) = 1.0/2.0;
-  prolongation[3](2,3) = 1.0/2.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](4,3) = 1.0/2.0;
-  prolongation[3](4,4) = 1.0/2.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](4,2) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](4,3) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[2](4,0) = 1.0;
-  restriction[3](3,3) = 1.0;
-  restriction[3](4,1) = 1.0;
-};
-
-
-template <>
-inline
-double FECrissCross<2>::shape_value (const unsigned int i,
-                                    const Point<2>    &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double x = p(0),
-              y = p(1);
-  switch (i)
-    {
-      case 0: return ((y<1-x) ? 1-x-y : 0);
-      case 1: return ((y<x)   ? x-y   : 0);
-      case 2: return ((y>1-x) ? x+y-1 : 0);
-      case 3: return ((y>x)   ? y-x   : 0);
-
-                                            // I am too lazy to optimize the
-                                            // following myself. Let the
-                                            // compiler do this
-      case 4: return (1-(((y<1-x) ? 1-x-y : 0) +
-                        ((y<x)   ? x-y   : 0) +
-                        ((y>1-x) ? x+y-1 : 0) +
-                        ((y>x)   ? y-x   : 0)));
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,2> FECrissCross<2>::shape_grad (const unsigned int i, const Point<2> &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double x = p(0),
-              y = p(1);  
-  switch (i)
-    {
-      case 0: return ((y<1-x) ? Point<2>(-1,-1) : Point<2>(0,0));
-      case 1: return ((y<x)   ? Point<2>(1,-1)  : Point<2>(0,0));
-      case 2: return ((y>1-x) ? Point<2>(1,1)   : Point<2>(0,0));
-      case 3: return ((y>x)   ? Point<2>(-1,1)  : Point<2>(0,0));
-
-                                            // I am too lazy to optimize the
-                                            // following myself. Let the
-                                            // compiler do this
-      case 4: return -1.*(((y<1-x) ? Point<2>(-1,-1) : Point<2>(0,0)) +
-                         ((y<x)   ? Point<2>(1,-1)  : Point<2>(0,0)) +
-                         ((y>1-x) ? Point<2>(1,1)   : Point<2>(0,0)) +
-                         ((y>x)   ? Point<2>(-1,1)  : Point<2>(0,0)));
-    }
-  return Point<2>();
-};
-
-
-template <>
-inline
-Tensor<2,2>
-FECrissCross<2>::shape_grad_grad (const unsigned int i,
-                                 const Point<2> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // 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 (std::vector<Point<2> > &unit_points) const {
-  Assert(unit_points.size()==dofs_per_cell,
-        FiniteElementBase<2>::
-        ExcWrongFieldDimension (unit_points.size(), dofs_per_cell));
-
-  unit_points[0] = Point<2> (0,0);
-  unit_points[1] = Point<2> (1,0);
-  unit_points[2] = Point<2> (1,1);
-  unit_points[3] = Point<2> (0,1);
-  unit_points[4] = Point<2> (0.5, 0.5);
-};
-
-
-template <>
-void FECrissCross<2>::get_support_points (const DoFHandler<2>::cell_iterator &cell,
-                                         std::vector<Point<2> > &support_points) const {
-  const unsigned int dim = 2;
-  
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::
-         ExcWrongFieldDimension (support_points.size(), dofs_per_cell));
-
-                                  // copy vertices
-  for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
-    support_points[vertex] = cell->vertex(vertex);
-
-/*
-  last support point is the common point of the two diagonals; the formula for
-  the computation is a bit lengthy but straightforward. You can get it with
-  the small Maple script printed at the beginning of this file.
-*/
-  const double x0 = cell->vertex(0)(0),
-              y0 = cell->vertex(0)(1),
-              x1 = cell->vertex(1)(0),
-              y1 = cell->vertex(1)(1),
-              x2 = cell->vertex(2)(0),
-              y2 = cell->vertex(2)(1),
-              x3 = cell->vertex(3)(0),
-              y3 = cell->vertex(3)(1);
-  const double t1 = x0*y1;
-  const double t2 = x0*y3;
-  const double t4 = x1*y0;
-  const double t5 = x3*y0;
-  const double t14 = (t1-t2+x1*y3-t4+t5-x3*y1)/(t1-t2-x2*y1+x2*y3-t4+x1*y2+t5-x3*y2);
-  const double t15 = 1.0-t14;
-  support_points[4](0) = t15*x0+t14*x2;
-  support_points[4](1) = t15*y0+t14*y2;
-};
-
-
-template <>
-void FECrissCross<2>::get_face_support_points (const DoFHandler<2>::face_iterator &face,
-                                              std::vector<Point<2> > &support_points) const {
-  const unsigned int dim = 2;
-  
-  Assert ((support_points.size() == dofs_per_face) &&
-         (support_points.size() == GeometryInfo<dim>::vertices_per_face),
-         FiniteElementBase<2>::
-         ExcWrongFieldDimension (support_points.size(),
-                                 GeometryInfo<dim>::vertices_per_face));
-
-  for (unsigned int vertex=0; vertex<dofs_per_face; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-};
-
-
-template <>
-void FECrissCross<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
-                                            FullMatrix<double> &mass_matrix) const {
-  Assert (mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<2>::
-         ExcWrongFieldDimension(mass_matrix.n(),dofs_per_cell));
-  Assert (mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<2>::
-         ExcWrongFieldDimension(mass_matrix.m(),dofs_per_cell));
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-
-  const double t1 = x[3]*x[2];
-  const double t2 = y[1]*y[1];
-  const double t5 = x[0]*x[0];
-  const double t7 = t5*y[3]*y[2];
-  const double t8 = x[3]*x[1];
-  const double t9 = y[0]*y[0];
-  const double t10 = t8*t9;
-  const double t11 = t5*y[1];
-  const double t12 = t11*y[3];
-  const double t13 = t11*y[2];
-  const double t14 = x[1]*x[1];
-  const double t15 = t14*y[0];
-  const double t19 = x[2]*x[1]*t9;
-  const double t20 = t1*t9;
-  const double t24 = x[0]*x[2];
-  const double t25 = t24*t2;
-  const double t29 = t15*y[2];
-  const double t30 = x[3]*y[0];
-  const double t31 = x[1]*y[2];
-  const double t32 = t30*t31;
-  const double t33 = x[2]*y[3];
-  const double t34 = x[1]*y[0];
-  const double t35 = t33*t34;
-  const double t37 = x[2]*y[1];
-  const double t38 = t37*t34;
-  const double t39 = y[1]*x[1];
-  const double t42 = -2.0*t1*t2-t7+t10+t12+t13+2.0*t15*y[3]+t19-t20-2.0*t14*y[2]*y[3]+
-                    t25+2.0*x[0]*t2*x[3]+t29-t32-2.0*t35-t38-2.0*t39*t30;
-  const double t43 = y[3]*x[1];
-  const double t46 = x[3]*y[2];
-  const double t49 = t37*t30;
-  const double t51 = x[0]*y[1];
-  const double t52 = t51*t46;
-  const double t54 = t51*t33;
-  const double t55 = x[0]*y[0];
-  const double t56 = t55*t37;
-  const double t59 = t51*t30;
-  const double t60 = t51*t31;
-  const double t61 = t55*t31;
-  const double t62 = t55*t46;
-  const double t63 = x[0]*y[3];
-  const double t64 = t63*t34;
-  const double t65 = t55*t33;
-  const double t66 = t63*t31;
-  const double t72 = 2.0*t37*t43+2.0*t39*t46+3.0*t49-2.0*t52-t54-t56-2.0*t51*t43-t59-t60
-                    -t61+t62-t64+t65+3.0*t66-t14*t9-t5*t2+2.0*t51*t34;
-  const double t75 = 1/(t51-t63-t37+t33-t34+t31+t30-t46);
-  const double t76 = (t42+t72)*t75;
-  const double t77 = y[3]*y[3];
-  const double t81 = x[3]*x[3];
-  const double t82 = y[1]*t81;
-  const double t86 = t81*y[0]*y[2];
-  const double t90 = t24*t77;
-  const double t94 = -t7-t10-t12-2.0*x[0]*t77*x[1]+t13+t19+2.0*t82*y[2]-t86-t20+t81*t9
-                    -2.0*t82*y[0]-t90+t32-3.0*t35+2.0*t49-3.0*t52;
-  const double t96 = t63*t46;
-  const double t97 = t30*t33;
-  const double t98 = x[3]*y[3];
-  const double t114 = t54-t56+t59-t61+t62+t64+t65+2.0*t66+t96+t97+2.0*t51*t98-2.0*t63*
-                     t30-2.0*y[1]*x[3]*t33+2.0*t98*t34-2.0*t98*t31+2.0*t77*x[1]*x[2]+t5*t77;
-  const double t116 = (t94+t114)*t75;
-  const double t118 = t76/24.0;
-  const double t119 = t116/24.0;
-  const double t121 = -t118+t116/8.0;
-  const double t122 = x[0]*y[2];
-  const double t123 = t122*t37;
-  const double t124 = t122*t33;
-  const double t125 = y[2]*y[2];
-  const double t126 = x[0]*t125;
-  const double t127 = t126*x[1];
-  const double t128 = t126*x[3];
-  const double t129 = x[2]*x[2];
-  const double t131 = y[1]*t129;
-  const double t132 = t131*y[0];
-  const double t133 = t131*y[3];
-  const double t134 = -t25+t60+t123+t54-t52-t124-t127+t128+t129*t2-t132-t133;
-  const double t135 = t37*t46;
-  const double t139 = x[2]*y[0];
-  const double t140 = t139*t46;
-  const double t141 = t8*t125;
-  const double t143 = t129*y[0]*y[3];
-  const double t144 = t33*t31;
-  const double t145 = t139*t31;
-  const double t146 = t38+t135-2.0*t37*t31-t29+t14*t125-t140-t35-t141+t143+t144+t32+t145
-                     ;
-  const double t148 = (t134+t146)*t75;
-  const double t150 = t148/24.0;
-  const double t152 = -t118+t148/8.0;
-  const double t153 = t123-t54+t66+t128-t96-t124-t127+t90+t49-t132-t135;
-  const double t158 = t133+2.0*t33*t46+t86-t81*t125-t129*t77+t141-t97-t32-t144-t140+t143
-                     +t145;
-  const double t160 = (t153+t158)*t75;
-  const double t162 = t160/24.0;
-  const double t164 = 7.0/24.0*t160;
-  const double t165 = -5.0/24.0*t148+t164;
-  const double t168 = t164-5.0/24.0*t116;
-  mass_matrix(0,0) = -t76/12.0+t116/12.0;
-  mass_matrix(0,1) = -t118;
-  mass_matrix(0,2) = 0.0;
-  mass_matrix(0,3) = -t119;
-  mass_matrix(0,4) = t121;
-  mass_matrix(1,0) = -t118;
-  mass_matrix(1,1) = -t76/12.0+t148/12.0;
-  mass_matrix(1,2) = -t150;
-  mass_matrix(1,3) = 0.0;
-  mass_matrix(1,4) = t152;
-  mass_matrix(2,0) = 0.0;
-  mass_matrix(2,1) = -t150;
-  mass_matrix(2,2) = t148/12.0-t160/12.0;
-  mass_matrix(2,3) = -t162;
-  mass_matrix(2,4) = t165;
-  mass_matrix(3,0) = -t119;
-  mass_matrix(3,1) = 0.0;
-  mass_matrix(3,2) = -t162;
-  mass_matrix(3,3) = -t160/12.0+t116/12.0;
-  mass_matrix(3,4) = t168;
-  mass_matrix(4,0) = t121;
-  mass_matrix(4,1) = t152;
-  mass_matrix(4,2) = t165;
-  mass_matrix(4,3) = t168;
-  mass_matrix(4,4) = -t76/12.0+7.0/12.0*t148-17.0/12.0*t160+7.0/12.0*t116;
-};
-
-
-template <>
-inline
-double FECrissCross<2>::shape_value_transform (const unsigned int i,
-                                              const Point<2> &p) const {
-                                  // use an isoparametric ansatz
-  return shape_value(i,p);
-};
-
-
-template <>
-Tensor<1,2> FECrissCross<2>::shape_grad_transform (const unsigned int i,
-                                                  const Point<2> &p) const {
-                                  // use an isoparametric ansatz
-  return shape_grad(i,p);  
-};
-
-
-template <>
-void FECrissCross<2>::get_face_jacobians (const DoFHandler<2>::face_iterator &face,
-                                         const std::vector<Point<1> > &unit_points,
-                                         std::vector<double> &face_jacobians) const {
-                                  // more or less copied from the linear
-                                  // finite element
-  Assert (unit_points.size() == face_jacobians.size(),
-         FiniteElementBase<2>::
-         ExcWrongFieldDimension (unit_points.size(), face_jacobians.size()));
-
-                                  // a linear mapping for a single line
-                                  // produces particularly simple
-                                  // expressions for the jacobi
-                                  // determinant :-)
-  const double h = sqrt((face->vertex(1) - face->vertex(0)).square());
-  fill_n (face_jacobians.begin(),
-         unit_points.size(),
-         h);  
-};
-
-
-template <>
-void FECrissCross<2>::get_subface_jacobians (const DoFHandler<2>::face_iterator &face,
-                                            const unsigned int,
-                                            const std::vector<Point<1> > &unit_points,
-                                            std::vector<double> &face_jacobians) const {
-                                  // more or less copied from the linear
-                                  // finite element
-  Assert (unit_points.size() == face_jacobians.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(), 
-                                                       face_jacobians.size()));
-  Assert (face->at_boundary() == false,
-         FiniteElement<2>::ExcBoundaryFaceUsed ());
-
-                                  // a linear mapping for a single line
-                                  // produces particularly simple
-                                  // expressions for the jacobi
-                                  // determinant :-)
-  const double h = sqrt((face->vertex(1) - face->vertex(0)).square());
-  fill_n (face_jacobians.begin(),
-         unit_points.size(),
-         h/2);
-};
-
-
-template <>
-void FECrissCross<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell,
-                                         const unsigned int       face_no,
-                                         const std::vector<Point<1> > &unit_points,
-                                         std::vector<Point<2> > &normal_vectors) const {
-                                  // more or less copied from the linear
-                                  // finite element
-  Assert (unit_points.size() == normal_vectors.size(),
-         FiniteElementBase<2>::
-         ExcWrongFieldDimension (unit_points.size(), normal_vectors.size()));
-
-  const DoFHandler<2>::face_iterator face = cell->face(face_no);
-                                  // compute direction of line
-  const Point<2> line_direction = (face->vertex(1) - face->vertex(0));
-                                  // rotate to the right by 90 degrees
-  const Point<2> normal_direction(line_direction(1),
-                                 -line_direction(0));
-
-  if (face_no <= 1)
-                                    // for sides 0 and 1: return the correctly
-                                    // scaled vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / sqrt(normal_direction.square()));
-  else
-                                    // for sides 2 and 3: scale and invert
-                                    // vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / (-sqrt(normal_direction.square())));
-};
-
-
-template <>
-void FECrissCross<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell,
-                                         const unsigned int       face_no,
-                                         const unsigned int,
-                                         const std::vector<Point<1> > &unit_points,
-                                         std::vector<Point<2> >       &normal_vectors) const {
-                                  // more or less copied from the linear
-                                  // finite element
-                                  // note, that in 2D the normal vectors to the
-                                  // subface have the same direction as that
-                                  // for the face
-  Assert (unit_points.size() == normal_vectors.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(), normal_vectors.size()));
-  Assert (cell->face(face_no)->at_boundary() == false,
-         FiniteElement<2>::ExcBoundaryFaceUsed ());
-
-  const DoFHandler<2>::face_iterator face = cell->face(face_no);
-                                  // compute direction of line
-  const Point<2> line_direction = (face->vertex(1) - face->vertex(0));
-                                  // rotate to the right by 90 degrees
-  const Point<2> normal_direction(line_direction(1),
-                                 -line_direction(0));
-
-  if (face_no <= 1)
-                                    // for sides 0 and 1: return the correctly
-                                    // scaled vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / sqrt(normal_direction.square()));
-  else
-                                    // for sides 2 and 3: scale and invert
-                                    // vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / (-sqrt(normal_direction.square())));
-};
-
-
-template <int dim>
-void FECrissCross<dim>::fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       const typename std::vector<Point<dim> >            &unit_points,
-                                       typename std::vector<Tensor<2,dim> >               &jacobians,
-                                       const bool              compute_jacobians,
-                                       typename std::vector<Tensor<3,dim> > &jacobians_grad,
-                                       const bool              compute_jacobians_grad,
-                                       typename std::vector<Point<dim> >    &support_points,
-                                       const bool compute_support_points,
-                                       typename std::vector<Point<dim> >    &q_points,
-                                       const bool              compute_q_points,
-                                       const FullMatrix<double>         &shape_values_transform,
-                                       const typename std::vector<typename std::vector<Tensor<1,dim> > > &/*shape_grad_transform*/) const {
-  Assert (jacobians.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(jacobians.size(),
-                                                                 unit_points.size()));
-  Assert (q_points.size() == unit_points.size(),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(q_points.size(),
-                                                                 unit_points.size()));
-  Assert (support_points.size() == dofs_per_cell,
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(support_points.size(),
-                                                                 dofs_per_cell));
-
-
-  unsigned int n_points=unit_points.size();
-
-                                  // we need the support points in any
-                                  // way, wanted or not by the user
-  if (compute_support_points)
-    get_support_points (cell, support_points);
-
-  if (compute_q_points) 
-    {
-                                      // initialize points to zero
-      for (unsigned int i=0; i<n_points; ++i)
-       q_points[i] = Point<dim> ();
-      
-                                      // note: let x_l be the vector of the
-                                      // lth quadrature point in real space and
-                                      // xi_l that on the unit cell, let further
-                                      // p_j be the vector of the jth vertex
-                                      // of the cell in real space and
-                                      // N_j(xi_l) be the value of the associated
-                                      // basis function at xi_l, then
-                                      // x_l(xi_l) = sum_j p_j N_j(xi_l)
-      for (unsigned int j=0; j<n_transform_functions(); ++j) 
-       for (unsigned int l=0; l<n_points; ++l) 
-         q_points[l] += support_points[j] * shape_values_transform(j, l);
-    };
-
-
-/* jacobi matrices: compute d(x)/d(xi) and invert this
-   Let M(l) be the inverse of J at the quadrature point l, then
-     M_{ij}(l) = sum_s p_i(s) d(N_s(l))/d(xi_j)
-   where p_i(s) is the i-th coordinate of the s-th vertex std::vector,
-   N_s(l) is the value of the s-th shape function at the
-   quadrature point l.
-
-   We could therefore write:
-   l=0..n_points-1
-     i=0..dim-1
-       j=0..dim-1
-         M_{ij}(l) = 0
-        s=0..n_support_points
-          M_{ij}(l) += p_i(s) d(N_s(l))/d(xi_j)
-
-  However, we rewrite the loops to only compute the gradient once for
-  each integration point and basis function.
-
-  The scheme laid down above was originally used. Due to recent advances
-  in the authors understanding of most basic things, it was dropped and
-  replaced by the following version. See #FEQ1Mapping<dim>::fill_fe_values#
-  for more information on this.
-*/
-
-  Point<dim> vertices[GeometryInfo<dim>::vertices_per_cell];
-  for (unsigned int l=0; l<GeometryInfo<dim>::vertices_per_cell; ++l)
-    vertices[l] = cell->vertex(l);
-
-  if (compute_jacobians)
-    switch (dim)
-      {
-       case 1:
-             for (unsigned int point=0; point<n_points; ++point)
-               jacobians[point][0][0] = 1./(vertices[1](0)-vertices[0](0));
-             break;
-               
-       case 2:
-       {
-         for (unsigned int point=0; point<n_points; ++point)
-           {       
-             const double xi = unit_points[point](0);
-             const double eta= unit_points[point](1);
-       
-             const double t6 = vertices[0](0)*vertices[3](1);
-             const double t8 = vertices[2](0)*xi;
-             const double t10 = vertices[1](0)*eta;
-             const double t12 = vertices[3](0)*vertices[1](1);
-             const double t16 = vertices[3](0)*xi;
-             const double t20 = vertices[0](0)*vertices[1](1);
-             const double t22 = vertices[0](0)*vertices[2](1);
-             const double t24 = t6*xi-t8*vertices[1](1)-t10*vertices[3](1)+
-                                t12*eta-vertices[3](0)*vertices[2](1)*eta-
-                                t16*vertices[0](1)+t16*vertices[1](1)-t12+
-                                vertices[3](0)*vertices[0](1)-t20*eta+t22*eta;
-             const double t28 = vertices[1](0)*vertices[3](1);
-             const double t31 = vertices[2](0)*eta;
-             const double t36 = t8*vertices[0](1)+vertices[1](0)*vertices[2](1)*xi-
-                                t28*xi+t10*vertices[0](1)-t31*vertices[0](1)+
-                                t31*vertices[3](1)+t20-t6-vertices[1](0)*
-                                vertices[0](1)+t28-t22*xi;
-             const double t38 = 1/(t24+t36);
-
-             jacobians[point][0][0] = (-vertices[0](1)+vertices[0](1)*xi-
-                                       vertices[1](1)*xi+vertices[2](1)*xi+
-                                       vertices[3](1)-vertices[3](1)*xi)*t38;
-             jacobians[point][0][1] = -(-vertices[0](0)+vertices[0](0)*xi-
-                                        vertices[1](0)*xi+t8+vertices[3](0)-t16)*t38;
-             jacobians[point][1][0] = -(-vertices[0](1)+vertices[0](1)*eta+
-                                        vertices[1](1)-vertices[1](1)*eta+
-                                        vertices[2](1)*eta-vertices[3](1)*eta)*t38;
-             jacobians[point][1][1] = (-vertices[0](0)+vertices[0](0)*eta+
-                                       vertices[1](0)-t10+t31-vertices[3](0)*eta)*t38;
-           };
-         
-         break;
-       };
-
-       default:
-                                              // not implemented at present
-             Assert (false, ExcNotImplemented());
-      };
-
-
-  if (compute_jacobians_grad)
-    switch (dim) 
-      {
-       case 1:
-       {
-                                          // derivative of the
-                                          // jacobian is always zero
-                                          // for a linear mapping in 1d
-         for (unsigned int point=0; point<n_points; ++point)
-           jacobians_grad[point][0][0][0] = 0;
-         break;
-       };
-
-       case 2:
-       {
-         for (unsigned int point=0; point<n_points; ++point)
-           {
-             const double xi = unit_points[point](0);
-             const double eta= unit_points[point](1);
-       
-             const double t2 = vertices[1](0)*eta;
-             const double t4 = vertices[3](0)*vertices[2](1);
-             const double t6 = vertices[0](0)*vertices[2](1);
-             const double t8 = vertices[0](0)*vertices[3](1);
-             const double t10 = vertices[3](0)*xi;
-             const double t13 = vertices[2](0)*xi;
-             const double t16 = vertices[3](0)*vertices[1](1);
-             const double t18 = vertices[0](0)*vertices[1](1);
-             const double t19 = vertices[3](0)*vertices[0](1);
-             const double t20 = -t2*vertices[3](1)-t4*eta-t6*xi+t8*xi-
-                                t10*vertices[0](1)+t10*vertices[1](1)+
-                                t13*vertices[0](1)-t13*vertices[1](1)+t16
-                                *eta+t18+t19;
-             const double t23 = vertices[1](0)*vertices[3](1);
-             const double t26 = vertices[2](0)*eta;
-             const double t29 = vertices[1](0)*vertices[0](1);
-             const double t30 = vertices[1](0)*vertices[2](1);
-             const double t32 = -t16-t18*eta+t6*eta-t23*xi+t2*vertices[0](1)-
-                                t26*vertices[0](1)+t26*vertices[3](1)-
-                                t8-t29+t23+t30
-                                *xi;
-             const double t33 = t20+t32;
-             const double t34 = 1/t33;
-             const double t35 = (vertices[0](1)-vertices[1](1)+
-                                 vertices[2](1)-vertices[3](1))*t34;
-             const double t41 = t33*t33;
-             const double t42 = 1/t41;
-             const double t43 = (-vertices[0](1)+vertices[0](1)*xi-
-                                 vertices[1](1)*xi+vertices[2](1)*xi+
-                                 vertices[3](1)-vertices[3](1)*xi)*t42;
-             const double t44 = vertices[2](0)*vertices[0](1);
-             const double t46 = -t6+t8-t19+t16+t44-
-                                vertices[2](0)*vertices[1](1)-
-                                t23+t30;
-             const double t50 = (vertices[0](0)-vertices[1](0)+
-                                 vertices[2](0)-vertices[3](0))*t34;
-             const double t54 = (-vertices[0](0)+vertices[0](0)*xi-
-                                 vertices[1](0)*xi+t13+
-                                 vertices[3](0)-t10)*t42;
-             const double t62 = (-vertices[0](1)+vertices[0](1)*eta+
-                                 vertices[1](1)-vertices[1](1)*eta+
-                                 vertices[2](1)*eta-
-                                 vertices[3](1)*eta)*t42;
-             const double t67 = (-vertices[0](0)+vertices[0](0)*eta+
-                                 vertices[1](0)-t2+t26-vertices[3](0)*eta)*t42;
-             const double t70 = -t23-t4+t16-t18+t6+t29-t44+
-                                vertices[2](0)*vertices[3](1);
-             jacobians_grad[point][0][0][0] = t35-t43*t46;
-             jacobians_grad[point][0][0][1] = -t50+t54*t46;
-             jacobians_grad[point][0][1][0] = t62*t46;
-             jacobians_grad[point][0][1][1] = -t67*t46;
-             jacobians_grad[point][1][0][0] = -t43*t70;
-             jacobians_grad[point][1][0][1] = t54*t70;
-             jacobians_grad[point][1][1][0] = -t35+t62*t70;
-             jacobians_grad[point][1][1][1] = t50-t67*t70;
-           };
-         break;
-         
-       };
-       
-       default:
-                                              // not implemented at present
-             Assert (false, ExcNotImplemented());
-      };             
-};
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-// provide dummy implementations of the functions above. the reason is
-// that true implementations would simply be too large (several 10.000
-// lines of code) for today's compilers and computers.
-
-template <>
-FECrissCross<3>::FECrissCross () :
-                                                // set more or less invalid data
-               FiniteElement<3> (FiniteElementData<3> (0,0,0,0,0,0),
-                                 std::vector<bool>())
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-double
-FECrissCross<3>::shape_value (const unsigned int,
-                             const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return 0;
-};
-
-
-template <>
-Tensor<1,3>
-FECrissCross<3>::shape_grad (const unsigned int,
-                            const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Tensor<1,3>();
-};
-
-
-template <>
-Tensor<2,3>
-FECrissCross<3>::shape_grad_grad (const unsigned int,
-                                 const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Tensor<2,3>();
-};
-
-
-template <>
-void
-FECrissCross<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                                       FullMatrix<double> &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_unit_support_points (std::vector<Point<3> > &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_support_points (const DoFHandler<3>::cell_iterator &,
-                                         std::vector<Point<3> >  &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_face_support_points (const DoFHandler<3>::face_iterator &,
-                                              std::vector<Point<3> >  &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_face_jacobians (const DoFHandler<3>::face_iterator &,
-                                         const std::vector<Point<2> > &,
-                                         std::vector<double>      &) const {
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_subface_jacobians (const DoFHandler<3>::face_iterator &,
-                                            const unsigned int,
-                                            const std::vector<Point<2> > &,
-                                            std::vector<double>      &) const {
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_normal_vectors (const DoFHandler<3>::cell_iterator &,
-                                         const unsigned int,
-                                         const std::vector<Point<2> > &,
-                                         std::vector<Point<3> >       &) const {
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::get_normal_vectors (const DoFHandler<3>::cell_iterator &,
-                                         const unsigned int,
-                                         const unsigned int,
-                                         const std::vector<Point<2> > &,
-                                         std::vector<Point<3> >       &) const {
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FECrissCross<3>::fill_fe_values (const DoFHandler<3>::cell_iterator &,
-                                     const std::vector<Point<3> > &,
-                                     std::vector<Tensor<2,3> >    &,
-                                     const bool            ,
-                                     std::vector<Tensor<3,3> > &,
-                                     const bool            ,
-                                     std::vector<Point<3> >    &,
-                                     const bool            ,
-                                     std::vector<Point<3> >    &,
-                                     const bool            ,
-                                     const FullMatrix<double>       &,
-                                     const std::vector<std::vector<Tensor<1,3> > > &) const {
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-double FECrissCross<3>::shape_value_transform (const unsigned int,
-                                              const Point<3> &) const
-{
-  Assert (false, ExcNotImplemented());
-  return 0;
-};
-
-
-template <>
-Tensor<1,3> FECrissCross<3>::shape_grad_transform (const unsigned int,
-                                                  const Point<3> &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Point<3>();
-};
-
-
-#endif // deal_II_dimension == 3
-
-
-
-template <int dim>
-Point<dim>
-FECrissCross<dim>::transform_unit_to_real_cell (const typename DoFHandler<dim>::cell_iterator &,
-                                               const Point<dim> &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Point<dim>();
-};
-
-
-
-template <int dim>
-Point<dim>
-FECrissCross<dim>::transform_real_to_unit_cell (const typename DoFHandler<dim>::cell_iterator &,
-                                               const Point<dim> &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Point<dim>();
-};
-
-
-
-
-/*--------------------------- QCrissCross* ------------------------------------*/
-
-
-#if deal_II_dimension == 1
-
-template <>
-QCrissCross1<1>::QCrissCross1 () :
-               Quadrature<1> (1)
-{
-  Assert (false, ExcNotUseful());
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-QCrissCross1<2>::QCrissCross1 () :
-               Quadrature<2> (4)
-{
-                                  // let quadrature points be the
-                                  // barycenters of the four triangles
-  quadrature_points[0] = Point<2>(1./2., 1./6.);
-  quadrature_points[1] = Point<2>(5./6., 1./2.);
-  quadrature_points[2] = Point<2>(1./2., 5./6.);
-  quadrature_points[3] = Point<2>(1./6., 1./2.);
-
-  weights[0] = 1./4.;
-  weights[1] = 1./4.;
-  weights[2] = 1./4.;
-  weights[3] = 1./4.;
-};
-
-#endif
-
-
-// explicit instantiations
-
-template class FECrissCross<deal_II_dimension>;
-template class QCrissCross1<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.cubic.cc b/deal.II/deal.II/source/fe/fe_lib.cubic.cc
deleted file mode 100644 (file)
index 8563597..0000000
+++ /dev/null
@@ -1,11983 +0,0 @@
-//----------------------------  fe_lib.cubic.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.cubic.cc  ---------------------------
-
-
-#include <fe/fe_lib.lagrange.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-
-// declare explicit specializations before use:
-template <> void FEQ3<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEQ3<1>::FEQ3 () :
-               FEQ1Mapping<1> (1, 2, 0, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ3<1>::FEQ3 (const int) :
-               FEQ1Mapping<1> (0, 4, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ3<1>::initialize_matrices ()
-{  
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](0,1) = 0.0;
-  prolongation[0](0,2) = 0.0;
-  prolongation[0](0,3) = 0.0;
-  prolongation[0](1,0) = -1.0/16.0;
-  prolongation[0](1,1) = -1.0/16.0;
-  prolongation[0](1,2) = 9.0/16.0;
-  prolongation[0](1,3) = 9.0/16.0;
-  prolongation[0](2,0) = 5.0/16.0;
-  prolongation[0](2,1) = 1.0/16.0;
-  prolongation[0](2,2) = 15.0/16.0;
-  prolongation[0](2,3) = -5.0/16.0;
-  prolongation[0](3,0) = 0.0;
-  prolongation[0](3,1) = 0.0;
-  prolongation[0](3,2) = 1.0;
-  prolongation[0](3,3) = 0.0;
-  prolongation[1](0,0) = -1.0/16.0;
-  prolongation[1](0,1) = -1.0/16.0;
-  prolongation[1](0,2) = 9.0/16.0;
-  prolongation[1](0,3) = 9.0/16.0;
-  prolongation[1](1,0) = 0.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](1,2) = 0.0;
-  prolongation[1](1,3) = 0.0;
-  prolongation[1](2,0) = 0.0;
-  prolongation[1](2,1) = 0.0;
-  prolongation[1](2,2) = 0.0;
-  prolongation[1](2,3) = 1.0;
-  prolongation[1](3,0) = 1.0/16.0;
-  prolongation[1](3,1) = 5.0/16.0;
-  prolongation[1](3,2) = -5.0/16.0;
-  prolongation[1](3,3) = 15.0/16.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](0,1) = 0.0;
-  restriction[0](0,2) = 0.0;
-  restriction[0](0,3) = 0.0;
-  restriction[0](1,0) = 0.0;
-  restriction[0](1,1) = 0.0;
-  restriction[0](1,2) = 0.0;
-  restriction[0](1,3) = 0.0;
-  restriction[0](2,0) = 0.0;
-  restriction[0](2,1) = 0.0;
-  restriction[0](2,2) = 0.0;
-  restriction[0](2,3) = 1.0;
-  restriction[0](3,0) = 0.0;
-  restriction[0](3,1) = 0.0;
-  restriction[0](3,2) = 0.0;
-  restriction[0](3,3) = 0.0;
-  restriction[1](0,0) = 0.0;
-  restriction[1](0,1) = 0.0;
-  restriction[1](0,2) = 0.0;
-  restriction[1](0,3) = 0.0;
-  restriction[1](1,0) = 0.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](1,2) = 0.0;
-  restriction[1](1,3) = 0.0;
-  restriction[1](2,0) = 0.0;
-  restriction[1](2,1) = 0.0;
-  restriction[1](2,2) = 0.0;
-  restriction[1](2,3) = 0.0;
-  restriction[1](3,0) = 0.0;
-  restriction[1](3,1) = 0.0;
-  restriction[1](3,2) = 1.0;
-  restriction[1](3,3) = 0.0;
-};
-
-
-template <>
-double
-FEQ3<1>::shape_value (const unsigned int i,
-                     const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  const double xi = p(0);
-  switch (i)
-    {
-      case 0: return -9.0/2.0*xi*xi*xi+9.0*xi*xi-11.0/2.0*xi+1.0;
-      case 1: return 9.0/2.0*xi*xi*xi-9.0/2.0*xi*xi+xi;
-      case 2: return 27.0/2.0*xi*xi*xi-45.0/2.0*xi*xi+9.0*xi;
-      case 3: return -27.0/2.0*xi*xi*xi+18.0*xi*xi-9.0/2.0*xi;
-    }
-  return 0.;
-};
-
-
-template <>
-Tensor<1,1>
-FEQ3<1>::shape_grad (const unsigned int i,
-                    const Point<1>    &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  const double xi = p(0);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(-27.0/2.0*xi*xi+18.0*xi-11.0/2.0);
-      case 1: return Point<1>(27.0/2.0*xi*xi-9.0*xi+1.0);
-      case 2: return Point<1>(81.0/2.0*xi*xi-45.0*xi+9.0);
-      case 3: return Point<1>(-81.0/2.0*xi*xi+36.0*xi-9.0/2.0);
-    }
-  return Point<1>();
-};
-
-
-template <>
-Tensor<2,1>
-FEQ3<1>::shape_grad_grad (const unsigned int i,
-                         const Point<1>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0);
-  Tensor<2,1> return_value;
-  switch (i) 
-    {
-      case 0: return_value[0][0] = -27.0*xi+18.0;
-      case 1: return_value[0][0] = 27.0*xi-9.0;
-      case 2: return_value[0][0] = 81.0*xi-45.0;
-      case 3: return_value[0][0] = -81.0*xi+36.0;
-    };
-
-  return return_value;
-};
-
-
-template <>
-void FEQ3<1>::get_unit_support_points (std::vector<Point<1> > &unit_points) const {
-  FiniteElement<1>::get_unit_support_points (unit_points);
-};
-
-
-template <>
-void FEQ3<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                 std::vector<Point<1> >  &support_points) const {
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-template <>
-void FEQ3<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                      std::vector<Point<1> >  &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ3<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  const double h = cell->vertex(1)(0) - cell->vertex(0)(0);
-  Assert (h>0, ExcJacobiDeterminantHasWrongSign());
-
-  const double t1 = 8.0/105.0*h;
-  const double t2 = 19.0/1680.0*h;
-  const double t3 = 33.0/560.0*h;
-  const double t4 = 3.0/140.0*h;
-  const double t5 = 27.0/70.0*h;
-  const double t6 = 27.0/560.0*h;
-  local_mass_matrix(0,0) = t1;
-  local_mass_matrix(0,1) = t2;
-  local_mass_matrix(0,2) = t3;
-  local_mass_matrix(0,3) = -t4;
-  local_mass_matrix(1,0) = t2;
-  local_mass_matrix(1,1) = t1;
-  local_mass_matrix(1,2) = -t4;
-  local_mass_matrix(1,3) = t3;
-  local_mass_matrix(2,0) = t3;
-  local_mass_matrix(2,1) = -t4;
-  local_mass_matrix(2,2) = t5;
-  local_mass_matrix(2,3) = -t6;
-  local_mass_matrix(3,0) = -t4;
-  local_mass_matrix(3,1) = t3;
-  local_mass_matrix(3,2) = -t6;
-  local_mass_matrix(3,3) = t5;
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEQ3<2>::FEQ3 () :
-               FEQ1Mapping<2> (1, 2, 4, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,0) = -1.0/16.0;
-  interface_constraints(0,1) = -1.0/16.0;
-  interface_constraints(0,2) = 9.0/16.0;
-  interface_constraints(0,3) = 9.0/16.0;
-  interface_constraints(1,0) = 5.0/16.0;
-  interface_constraints(1,1) = 1.0/16.0;
-  interface_constraints(1,2) = 15.0/16.0;
-  interface_constraints(1,3) = -5.0/16.0;
-  interface_constraints(2,2) = 1.0;
-  interface_constraints(3,3) = 1.0;
-  interface_constraints(4,0) = 1.0/16.0;
-  interface_constraints(4,1) = 5.0/16.0;
-  interface_constraints(4,2) = -5.0/16.0;
-  interface_constraints(4,3) = 15.0/16.0;
-
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ3<2>::FEQ3 (const int) :
-               FEQ1Mapping<2> (0, 0, 16, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ3<2>::initialize_matrices ()
-{
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = -1.0/16.0;
-  prolongation[0](1,1) = -1.0/16.0;
-  prolongation[0](1,4) = 9.0/16.0;
-  prolongation[0](1,5) = 9.0/16.0;
-  prolongation[0](2,0) = 1.0/256.0;
-  prolongation[0](2,1) = 1.0/256.0;
-  prolongation[0](2,2) = 1.0/256.0;
-  prolongation[0](2,3) = 1.0/256.0;
-  prolongation[0](2,4) = -9.0/256.0;
-  prolongation[0](2,5) = -9.0/256.0;
-  prolongation[0](2,6) = -9.0/256.0;
-  prolongation[0](2,7) = -9.0/256.0;
-  prolongation[0](2,8) = -9.0/256.0;
-  prolongation[0](2,9) = -9.0/256.0;
-  prolongation[0](2,10) = -9.0/256.0;
-  prolongation[0](2,11) = -9.0/256.0;
-  prolongation[0](2,12) = 81.0/256.0;
-  prolongation[0](2,13) = 81.0/256.0;
-  prolongation[0](2,14) = 81.0/256.0;
-  prolongation[0](2,15) = 81.0/256.0;
-  prolongation[0](3,0) = -1.0/16.0;
-  prolongation[0](3,3) = -1.0/16.0;
-  prolongation[0](3,10) = 9.0/16.0;
-  prolongation[0](3,11) = 9.0/16.0;
-  prolongation[0](4,0) = 5.0/16.0;
-  prolongation[0](4,1) = 1.0/16.0;
-  prolongation[0](4,4) = 15.0/16.0;
-  prolongation[0](4,5) = -5.0/16.0;
-  prolongation[0](5,4) = 1.0;
-  prolongation[0](6,0) = -5.0/256.0;
-  prolongation[0](6,1) = -5.0/256.0;
-  prolongation[0](6,2) = -1.0/256.0;
-  prolongation[0](6,3) = -1.0/256.0;
-  prolongation[0](6,4) = 45.0/256.0;
-  prolongation[0](6,5) = 45.0/256.0;
-  prolongation[0](6,6) = -15.0/256.0;
-  prolongation[0](6,7) = 5.0/256.0;
-  prolongation[0](6,8) = 9.0/256.0;
-  prolongation[0](6,9) = 9.0/256.0;
-  prolongation[0](6,10) = -15.0/256.0;
-  prolongation[0](6,11) = 5.0/256.0;
-  prolongation[0](6,12) = 135.0/256.0;
-  prolongation[0](6,13) = 135.0/256.0;
-  prolongation[0](6,14) = -45.0/256.0;
-  prolongation[0](6,15) = -45.0/256.0;
-  prolongation[0](7,6) = -1.0/16.0;
-  prolongation[0](7,10) = -1.0/16.0;
-  prolongation[0](7,12) = 9.0/16.0;
-  prolongation[0](7,13) = 9.0/16.0;
-  prolongation[0](8,0) = -5.0/256.0;
-  prolongation[0](8,1) = -1.0/256.0;
-  prolongation[0](8,2) = -1.0/256.0;
-  prolongation[0](8,3) = -5.0/256.0;
-  prolongation[0](8,4) = -15.0/256.0;
-  prolongation[0](8,5) = 5.0/256.0;
-  prolongation[0](8,6) = 9.0/256.0;
-  prolongation[0](8,7) = 9.0/256.0;
-  prolongation[0](8,8) = -15.0/256.0;
-  prolongation[0](8,9) = 5.0/256.0;
-  prolongation[0](8,10) = 45.0/256.0;
-  prolongation[0](8,11) = 45.0/256.0;
-  prolongation[0](8,12) = 135.0/256.0;
-  prolongation[0](8,13) = -45.0/256.0;
-  prolongation[0](8,14) = -45.0/256.0;
-  prolongation[0](8,15) = 135.0/256.0;
-  prolongation[0](9,4) = -1.0/16.0;
-  prolongation[0](9,8) = -1.0/16.0;
-  prolongation[0](9,12) = 9.0/16.0;
-  prolongation[0](9,15) = 9.0/16.0;
-  prolongation[0](10,0) = 5.0/16.0;
-  prolongation[0](10,3) = 1.0/16.0;
-  prolongation[0](10,10) = 15.0/16.0;
-  prolongation[0](10,11) = -5.0/16.0;
-  prolongation[0](11,10) = 1.0;
-  prolongation[0](12,0) = 25.0/256.0;
-  prolongation[0](12,1) = 5.0/256.0;
-  prolongation[0](12,2) = 1.0/256.0;
-  prolongation[0](12,3) = 5.0/256.0;
-  prolongation[0](12,4) = 75.0/256.0;
-  prolongation[0](12,5) = -25.0/256.0;
-  prolongation[0](12,6) = 15.0/256.0;
-  prolongation[0](12,7) = -5.0/256.0;
-  prolongation[0](12,8) = 15.0/256.0;
-  prolongation[0](12,9) = -5.0/256.0;
-  prolongation[0](12,10) = 75.0/256.0;
-  prolongation[0](12,11) = -25.0/256.0;
-  prolongation[0](12,12) = 225.0/256.0;
-  prolongation[0](12,13) = -75.0/256.0;
-  prolongation[0](12,14) = 25.0/256.0;
-  prolongation[0](12,15) = -75.0/256.0;
-  prolongation[0](13,4) = 5.0/16.0;
-  prolongation[0](13,8) = 1.0/16.0;
-  prolongation[0](13,12) = 15.0/16.0;
-  prolongation[0](13,15) = -5.0/16.0;
-  prolongation[0](14,12) = 1.0;
-  prolongation[0](15,6) = 1.0/16.0;
-  prolongation[0](15,10) = 5.0/16.0;
-  prolongation[0](15,12) = 15.0/16.0;
-  prolongation[0](15,13) = -5.0/16.0;
-  prolongation[1](0,0) = -1.0/16.0;
-  prolongation[1](0,1) = -1.0/16.0;
-  prolongation[1](0,4) = 9.0/16.0;
-  prolongation[1](0,5) = 9.0/16.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,1) = -1.0/16.0;
-  prolongation[1](2,2) = -1.0/16.0;
-  prolongation[1](2,6) = 9.0/16.0;
-  prolongation[1](2,7) = 9.0/16.0;
-  prolongation[1](3,0) = 1.0/256.0;
-  prolongation[1](3,1) = 1.0/256.0;
-  prolongation[1](3,2) = 1.0/256.0;
-  prolongation[1](3,3) = 1.0/256.0;
-  prolongation[1](3,4) = -9.0/256.0;
-  prolongation[1](3,5) = -9.0/256.0;
-  prolongation[1](3,6) = -9.0/256.0;
-  prolongation[1](3,7) = -9.0/256.0;
-  prolongation[1](3,8) = -9.0/256.0;
-  prolongation[1](3,9) = -9.0/256.0;
-  prolongation[1](3,10) = -9.0/256.0;
-  prolongation[1](3,11) = -9.0/256.0;
-  prolongation[1](3,12) = 81.0/256.0;
-  prolongation[1](3,13) = 81.0/256.0;
-  prolongation[1](3,14) = 81.0/256.0;
-  prolongation[1](3,15) = 81.0/256.0;
-  prolongation[1](4,5) = 1.0;
-  prolongation[1](5,0) = 1.0/16.0;
-  prolongation[1](5,1) = 5.0/16.0;
-  prolongation[1](5,4) = -5.0/16.0;
-  prolongation[1](5,5) = 15.0/16.0;
-  prolongation[1](6,1) = 5.0/16.0;
-  prolongation[1](6,2) = 1.0/16.0;
-  prolongation[1](6,6) = 15.0/16.0;
-  prolongation[1](6,7) = -5.0/16.0;
-  prolongation[1](7,6) = 1.0;
-  prolongation[1](8,5) = -1.0/16.0;
-  prolongation[1](8,9) = -1.0/16.0;
-  prolongation[1](8,13) = 9.0/16.0;
-  prolongation[1](8,14) = 9.0/16.0;
-  prolongation[1](9,0) = -1.0/256.0;
-  prolongation[1](9,1) = -5.0/256.0;
-  prolongation[1](9,2) = -5.0/256.0;
-  prolongation[1](9,3) = -1.0/256.0;
-  prolongation[1](9,4) = 5.0/256.0;
-  prolongation[1](9,5) = -15.0/256.0;
-  prolongation[1](9,6) = 45.0/256.0;
-  prolongation[1](9,7) = 45.0/256.0;
-  prolongation[1](9,8) = 5.0/256.0;
-  prolongation[1](9,9) = -15.0/256.0;
-  prolongation[1](9,10) = 9.0/256.0;
-  prolongation[1](9,11) = 9.0/256.0;
-  prolongation[1](9,12) = -45.0/256.0;
-  prolongation[1](9,13) = 135.0/256.0;
-  prolongation[1](9,14) = 135.0/256.0;
-  prolongation[1](9,15) = -45.0/256.0;
-  prolongation[1](10,0) = -5.0/256.0;
-  prolongation[1](10,1) = -5.0/256.0;
-  prolongation[1](10,2) = -1.0/256.0;
-  prolongation[1](10,3) = -1.0/256.0;
-  prolongation[1](10,4) = 45.0/256.0;
-  prolongation[1](10,5) = 45.0/256.0;
-  prolongation[1](10,6) = -15.0/256.0;
-  prolongation[1](10,7) = 5.0/256.0;
-  prolongation[1](10,8) = 9.0/256.0;
-  prolongation[1](10,9) = 9.0/256.0;
-  prolongation[1](10,10) = -15.0/256.0;
-  prolongation[1](10,11) = 5.0/256.0;
-  prolongation[1](10,12) = 135.0/256.0;
-  prolongation[1](10,13) = 135.0/256.0;
-  prolongation[1](10,14) = -45.0/256.0;
-  prolongation[1](10,15) = -45.0/256.0;
-  prolongation[1](11,6) = -1.0/16.0;
-  prolongation[1](11,10) = -1.0/16.0;
-  prolongation[1](11,12) = 9.0/16.0;
-  prolongation[1](11,13) = 9.0/16.0;
-  prolongation[1](12,5) = 5.0/16.0;
-  prolongation[1](12,9) = 1.0/16.0;
-  prolongation[1](12,13) = 15.0/16.0;
-  prolongation[1](12,14) = -5.0/16.0;
-  prolongation[1](13,0) = 5.0/256.0;
-  prolongation[1](13,1) = 25.0/256.0;
-  prolongation[1](13,2) = 5.0/256.0;
-  prolongation[1](13,3) = 1.0/256.0;
-  prolongation[1](13,4) = -25.0/256.0;
-  prolongation[1](13,5) = 75.0/256.0;
-  prolongation[1](13,6) = 75.0/256.0;
-  prolongation[1](13,7) = -25.0/256.0;
-  prolongation[1](13,8) = -5.0/256.0;
-  prolongation[1](13,9) = 15.0/256.0;
-  prolongation[1](13,10) = 15.0/256.0;
-  prolongation[1](13,11) = -5.0/256.0;
-  prolongation[1](13,12) = -75.0/256.0;
-  prolongation[1](13,13) = 225.0/256.0;
-  prolongation[1](13,14) = -75.0/256.0;
-  prolongation[1](13,15) = 25.0/256.0;
-  prolongation[1](14,6) = 5.0/16.0;
-  prolongation[1](14,10) = 1.0/16.0;
-  prolongation[1](14,12) = -5.0/16.0;
-  prolongation[1](14,13) = 15.0/16.0;
-  prolongation[1](15,13) = 1.0;
-  prolongation[2](0,0) = 1.0/256.0;
-  prolongation[2](0,1) = 1.0/256.0;
-  prolongation[2](0,2) = 1.0/256.0;
-  prolongation[2](0,3) = 1.0/256.0;
-  prolongation[2](0,4) = -9.0/256.0;
-  prolongation[2](0,5) = -9.0/256.0;
-  prolongation[2](0,6) = -9.0/256.0;
-  prolongation[2](0,7) = -9.0/256.0;
-  prolongation[2](0,8) = -9.0/256.0;
-  prolongation[2](0,9) = -9.0/256.0;
-  prolongation[2](0,10) = -9.0/256.0;
-  prolongation[2](0,11) = -9.0/256.0;
-  prolongation[2](0,12) = 81.0/256.0;
-  prolongation[2](0,13) = 81.0/256.0;
-  prolongation[2](0,14) = 81.0/256.0;
-  prolongation[2](0,15) = 81.0/256.0;
-  prolongation[2](1,1) = -1.0/16.0;
-  prolongation[2](1,2) = -1.0/16.0;
-  prolongation[2](1,6) = 9.0/16.0;
-  prolongation[2](1,7) = 9.0/16.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](3,2) = -1.0/16.0;
-  prolongation[2](3,3) = -1.0/16.0;
-  prolongation[2](3,8) = 9.0/16.0;
-  prolongation[2](3,9) = 9.0/16.0;
-  prolongation[2](4,5) = -1.0/16.0;
-  prolongation[2](4,9) = -1.0/16.0;
-  prolongation[2](4,13) = 9.0/16.0;
-  prolongation[2](4,14) = 9.0/16.0;
-  prolongation[2](5,0) = -1.0/256.0;
-  prolongation[2](5,1) = -5.0/256.0;
-  prolongation[2](5,2) = -5.0/256.0;
-  prolongation[2](5,3) = -1.0/256.0;
-  prolongation[2](5,4) = 5.0/256.0;
-  prolongation[2](5,5) = -15.0/256.0;
-  prolongation[2](5,6) = 45.0/256.0;
-  prolongation[2](5,7) = 45.0/256.0;
-  prolongation[2](5,8) = 5.0/256.0;
-  prolongation[2](5,9) = -15.0/256.0;
-  prolongation[2](5,10) = 9.0/256.0;
-  prolongation[2](5,11) = 9.0/256.0;
-  prolongation[2](5,12) = -45.0/256.0;
-  prolongation[2](5,13) = 135.0/256.0;
-  prolongation[2](5,14) = 135.0/256.0;
-  prolongation[2](5,15) = -45.0/256.0;
-  prolongation[2](6,7) = 1.0;
-  prolongation[2](7,1) = 1.0/16.0;
-  prolongation[2](7,2) = 5.0/16.0;
-  prolongation[2](7,6) = -5.0/16.0;
-  prolongation[2](7,7) = 15.0/16.0;
-  prolongation[2](8,9) = 1.0;
-  prolongation[2](9,2) = 5.0/16.0;
-  prolongation[2](9,3) = 1.0/16.0;
-  prolongation[2](9,8) = -5.0/16.0;
-  prolongation[2](9,9) = 15.0/16.0;
-  prolongation[2](10,7) = -1.0/16.0;
-  prolongation[2](10,11) = -1.0/16.0;
-  prolongation[2](10,14) = 9.0/16.0;
-  prolongation[2](10,15) = 9.0/16.0;
-  prolongation[2](11,0) = -1.0/256.0;
-  prolongation[2](11,1) = -1.0/256.0;
-  prolongation[2](11,2) = -5.0/256.0;
-  prolongation[2](11,3) = -5.0/256.0;
-  prolongation[2](11,4) = 9.0/256.0;
-  prolongation[2](11,5) = 9.0/256.0;
-  prolongation[2](11,6) = 5.0/256.0;
-  prolongation[2](11,7) = -15.0/256.0;
-  prolongation[2](11,8) = 45.0/256.0;
-  prolongation[2](11,9) = 45.0/256.0;
-  prolongation[2](11,10) = 5.0/256.0;
-  prolongation[2](11,11) = -15.0/256.0;
-  prolongation[2](11,12) = -45.0/256.0;
-  prolongation[2](11,13) = -45.0/256.0;
-  prolongation[2](11,14) = 135.0/256.0;
-  prolongation[2](11,15) = 135.0/256.0;
-  prolongation[2](12,14) = 1.0;
-  prolongation[2](13,7) = 5.0/16.0;
-  prolongation[2](13,11) = 1.0/16.0;
-  prolongation[2](13,14) = 15.0/16.0;
-  prolongation[2](13,15) = -5.0/16.0;
-  prolongation[2](14,0) = 1.0/256.0;
-  prolongation[2](14,1) = 5.0/256.0;
-  prolongation[2](14,2) = 25.0/256.0;
-  prolongation[2](14,3) = 5.0/256.0;
-  prolongation[2](14,4) = -5.0/256.0;
-  prolongation[2](14,5) = 15.0/256.0;
-  prolongation[2](14,6) = -25.0/256.0;
-  prolongation[2](14,7) = 75.0/256.0;
-  prolongation[2](14,8) = -25.0/256.0;
-  prolongation[2](14,9) = 75.0/256.0;
-  prolongation[2](14,10) = -5.0/256.0;
-  prolongation[2](14,11) = 15.0/256.0;
-  prolongation[2](14,12) = 25.0/256.0;
-  prolongation[2](14,13) = -75.0/256.0;
-  prolongation[2](14,14) = 225.0/256.0;
-  prolongation[2](14,15) = -75.0/256.0;
-  prolongation[2](15,5) = 1.0/16.0;
-  prolongation[2](15,9) = 5.0/16.0;
-  prolongation[2](15,13) = -5.0/16.0;
-  prolongation[2](15,14) = 15.0/16.0;
-  prolongation[3](0,0) = -1.0/16.0;
-  prolongation[3](0,3) = -1.0/16.0;
-  prolongation[3](0,10) = 9.0/16.0;
-  prolongation[3](0,11) = 9.0/16.0;
-  prolongation[3](1,0) = 1.0/256.0;
-  prolongation[3](1,1) = 1.0/256.0;
-  prolongation[3](1,2) = 1.0/256.0;
-  prolongation[3](1,3) = 1.0/256.0;
-  prolongation[3](1,4) = -9.0/256.0;
-  prolongation[3](1,5) = -9.0/256.0;
-  prolongation[3](1,6) = -9.0/256.0;
-  prolongation[3](1,7) = -9.0/256.0;
-  prolongation[3](1,8) = -9.0/256.0;
-  prolongation[3](1,9) = -9.0/256.0;
-  prolongation[3](1,10) = -9.0/256.0;
-  prolongation[3](1,11) = -9.0/256.0;
-  prolongation[3](1,12) = 81.0/256.0;
-  prolongation[3](1,13) = 81.0/256.0;
-  prolongation[3](1,14) = 81.0/256.0;
-  prolongation[3](1,15) = 81.0/256.0;
-  prolongation[3](2,2) = -1.0/16.0;
-  prolongation[3](2,3) = -1.0/16.0;
-  prolongation[3](2,8) = 9.0/16.0;
-  prolongation[3](2,9) = 9.0/16.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](4,0) = -5.0/256.0;
-  prolongation[3](4,1) = -1.0/256.0;
-  prolongation[3](4,2) = -1.0/256.0;
-  prolongation[3](4,3) = -5.0/256.0;
-  prolongation[3](4,4) = -15.0/256.0;
-  prolongation[3](4,5) = 5.0/256.0;
-  prolongation[3](4,6) = 9.0/256.0;
-  prolongation[3](4,7) = 9.0/256.0;
-  prolongation[3](4,8) = -15.0/256.0;
-  prolongation[3](4,9) = 5.0/256.0;
-  prolongation[3](4,10) = 45.0/256.0;
-  prolongation[3](4,11) = 45.0/256.0;
-  prolongation[3](4,12) = 135.0/256.0;
-  prolongation[3](4,13) = -45.0/256.0;
-  prolongation[3](4,14) = -45.0/256.0;
-  prolongation[3](4,15) = 135.0/256.0;
-  prolongation[3](5,4) = -1.0/16.0;
-  prolongation[3](5,8) = -1.0/16.0;
-  prolongation[3](5,12) = 9.0/16.0;
-  prolongation[3](5,15) = 9.0/16.0;
-  prolongation[3](6,7) = -1.0/16.0;
-  prolongation[3](6,11) = -1.0/16.0;
-  prolongation[3](6,14) = 9.0/16.0;
-  prolongation[3](6,15) = 9.0/16.0;
-  prolongation[3](7,0) = -1.0/256.0;
-  prolongation[3](7,1) = -1.0/256.0;
-  prolongation[3](7,2) = -5.0/256.0;
-  prolongation[3](7,3) = -5.0/256.0;
-  prolongation[3](7,4) = 9.0/256.0;
-  prolongation[3](7,5) = 9.0/256.0;
-  prolongation[3](7,6) = 5.0/256.0;
-  prolongation[3](7,7) = -15.0/256.0;
-  prolongation[3](7,8) = 45.0/256.0;
-  prolongation[3](7,9) = 45.0/256.0;
-  prolongation[3](7,10) = 5.0/256.0;
-  prolongation[3](7,11) = -15.0/256.0;
-  prolongation[3](7,12) = -45.0/256.0;
-  prolongation[3](7,13) = -45.0/256.0;
-  prolongation[3](7,14) = 135.0/256.0;
-  prolongation[3](7,15) = 135.0/256.0;
-  prolongation[3](8,2) = 1.0/16.0;
-  prolongation[3](8,3) = 5.0/16.0;
-  prolongation[3](8,8) = 15.0/16.0;
-  prolongation[3](8,9) = -5.0/16.0;
-  prolongation[3](9,8) = 1.0;
-  prolongation[3](10,11) = 1.0;
-  prolongation[3](11,0) = 1.0/16.0;
-  prolongation[3](11,3) = 5.0/16.0;
-  prolongation[3](11,10) = -5.0/16.0;
-  prolongation[3](11,11) = 15.0/16.0;
-  prolongation[3](12,7) = 1.0/16.0;
-  prolongation[3](12,11) = 5.0/16.0;
-  prolongation[3](12,14) = -5.0/16.0;
-  prolongation[3](12,15) = 15.0/16.0;
-  prolongation[3](13,15) = 1.0;
-  prolongation[3](14,4) = 1.0/16.0;
-  prolongation[3](14,8) = 5.0/16.0;
-  prolongation[3](14,12) = -5.0/16.0;
-  prolongation[3](14,15) = 15.0/16.0;
-  prolongation[3](15,0) = 5.0/256.0;
-  prolongation[3](15,1) = 1.0/256.0;
-  prolongation[3](15,2) = 5.0/256.0;
-  prolongation[3](15,3) = 25.0/256.0;
-  prolongation[3](15,4) = 15.0/256.0;
-  prolongation[3](15,5) = -5.0/256.0;
-  prolongation[3](15,6) = -5.0/256.0;
-  prolongation[3](15,7) = 15.0/256.0;
-  prolongation[3](15,8) = 75.0/256.0;
-  prolongation[3](15,9) = -25.0/256.0;
-  prolongation[3](15,10) = -25.0/256.0;
-  prolongation[3](15,11) = 75.0/256.0;
-  prolongation[3](15,12) = -75.0/256.0;
-  prolongation[3](15,13) = 25.0/256.0;
-  prolongation[3](15,14) = -75.0/256.0;
-  prolongation[3](15,15) = 225.0/256.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](4,5) = 1.0;
-  restriction[0](10,11) = 1.0;
-  restriction[0](12,14) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](5,4) = 1.0;
-  restriction[1](6,7) = 1.0;
-  restriction[1](13,15) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[2](7,6) = 1.0;
-  restriction[2](9,8) = 1.0;
-  restriction[2](14,12) = 1.0;
-  restriction[3](3,3) = 1.0;
-  restriction[3](8,9) = 1.0;
-  restriction[3](11,10) = 1.0;
-  restriction[3](15,13) = 1.0;
-};
-
-
-template <>
-double
-FEQ3<2>::shape_value (const unsigned int i,
-                     const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0),
-              eta= p(1);
-  switch (i)
-    {
-      case 0: return 1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+(-11.0/2.0+
-                                                                121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi)*eta+(9.0-99.0/2.0*xi+81.0*xi*xi
-                                                                                                                    -81.0/2.0*xi*xi*xi)*eta*eta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi
-                                                                                                                                                 *xi)*eta*eta*eta;
-      case 1: return xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+(-11.0/2.0*xi+99.0/4.0
-                                                       *xi*xi-99.0/4.0*xi*xi*xi)*eta+(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta*eta
-               +(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 2: return (xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi)*eta+(-9.0/2.0*xi+
-                                                             81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*
-                                                                                                        xi*xi*xi)*eta*eta*eta;
-      case 3: return (1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi)*eta+(-9.0/
-                                                                      2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0-99.0/4.0*xi+
-                                                                                                                                 81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 4: return 9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+(-99.0/2.0*xi+
-                                                             495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi)*eta+(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*
-                                                                                                      xi*xi)*eta*eta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 5: return -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+(99.0/4.0*xi
-                                                              -99.0*xi*xi+297.0/4.0*xi*xi*xi)*eta+(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*
-                                                                                                   xi)*eta*eta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 6: return (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-45.0/2.0
-                                                                   *xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0*xi-243.0/4.0*xi*xi+
-                                                                                                                    243.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 7: return (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(18.0
-                                                                        *xi-81.0*xi*xi+81.0*xi*xi*xi)*eta*eta+(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*
-                                                                                                               xi*xi*xi)*eta*eta*eta;
-      case 8: return (9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi)*eta+(-81.0/2.0
-                                                                   *xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-405.0/4.0*xi*xi+
-                                                                                                                    243.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 9: return (-9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi)*eta+(81.0/4.0
-                                                                    *xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*
-                                                                                                                xi*xi*xi)*eta*eta*eta;
-      case 10: return (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(
-       -45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0
-                                                                           -297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 11: return (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)
-                *eta+(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta*eta+(-27.0/2.0+297.0/4.0*xi
-                                                                       -243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 12: return (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(
-       -405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi
-                                                                    -1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 13: return (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(
-       405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+243.0*xi*
-                                                              xi-729.0/4.0*xi*xi*xi)*eta*eta*eta;
-      case 14: return (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-81.0*
-                                                                      xi+324.0*xi*xi-243.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*
-                                                                                                              xi*xi)*eta*eta*eta;
-      case 15: return (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(
-       162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+1215.0/4.0*xi*xi
-                                                     -729.0/4.0*xi*xi*xi)*eta*eta*eta;
-    };
-  return 0;
-};
-
-
-template <>
-Tensor<1,2>
-FEQ3<2>::shape_grad (const unsigned int i,
-                    const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0),
-              eta= p(1);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2>(-11.0/2.0+18.0*xi-27.0/2.0*xi*xi+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta*eta,
-                             -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta);
-      case 1: return Point<2>(1.0-9.0*xi+27.0/2.0*xi*xi+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(9.0-81.0*xi+243.0/2.0*xi*xi)*eta*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta*eta,
-                             -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta);
-      case 2: return Point<2>((1.0-9.0*xi+27.0/2.0*xi*xi)*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta*eta,
-                             xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta);
-      case 3: return Point<2>((-11.0/2.0+18.0*xi-27.0/2.0*xi*xi)*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta*eta,
-                             1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta);
-      case 4: return Point<2>(9.0-45.0*xi+81.0/2.0*xi*xi+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(81.0-405.0*xi+729.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta,
-                             -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta);
-      case 5: return Point<2>(-9.0/2.0+36.0*xi-81.0/2.0*xi*xi+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta*eta,
-                             99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta);
-      case 6: return Point<2>((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta*eta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta,
-                             9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta);
-      case 7: return Point<2>((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(18.0-162.0*xi+243.0*xi*xi)*eta*eta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta,
-                             -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta);
-      case 8: return Point<2>((9.0-45.0*xi+81.0/2.0*xi*xi)*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta,
-                             9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta);
-      case 9: return Point<2>((-9.0/2.0+36.0*xi-81.0/2.0*xi*xi)*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta*eta,
-                             -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta);
-      case 10: return Point<2>((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta*eta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta*eta,
-                              9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta);
-      case 11: return Point<2>((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-99.0+324.0*xi-243.0*xi*xi)*eta*eta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta*eta,
-                              -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta);
-      case 12: return Point<2>((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta*eta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta,
-                              81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta);
-      case 13: return Point<2>((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta,
-                              -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta);
-      case 14: return Point<2>((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-81.0+648.0*xi-729.0*xi*xi)*eta*eta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta,
-                              81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta);
-      case 15: return Point<2>((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(162.0-810.0*xi+729.0*xi*xi)*eta*eta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta,
-                              -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta);
-    };
-  return Point<2> ();
-};
-
-
-template <>
-Tensor<2,2>
-FEQ3<2>::shape_grad_grad (const unsigned int i,
-                         const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  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 FEQ3<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-  
-/* check that the Jacobi determinant
-
-    t0 = (-x[0]*(1.0-eta)+x[1]*(1.0-eta)+x[2]*eta-x[3]*eta) *
-         (-y[0]*(1.0-xi)-y[1]*xi+y[2]*xi+y[3]*(1.0-xi))        -
-        (-x[0]*(1.0-xi)-x[1]*xi+x[2]*xi+x[3]*(1.0-xi)) *
-        (-y[0]*(1.0-eta)+y[1]*(1.0-eta)+y[2]*eta-y[3]*eta)
-
-   has the right sign.  
-        
-   We do not attempt to check its (hopefully) positive sign at all points
-   on the unit cell, but we check that it is positive in the four corners,
-   which is sufficient since $det J$ is a bilinear function.
-*/
-  Assert ((-x[0]+x[1])*(-y[0]+y[3])-(-x[0]+x[3])*(-y[0]+y[1]),  // xi=eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[0]+y[3])-(-x[0]+x[3])*(y[2]-y[3]),    // xi=0, eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[1]+y[2])-(-x[1]+x[2])*(y[2]-y[3]),    // xi=eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((-x[0]+x[1])*(-y[1]+y[2])-(-x[1]+x[2])*(-y[0]+y[1]),  // xi=1, eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-
-  const double t1 = x[0]-x[1]+x[2]-x[3];
-  const double t2 = -y[0]+y[1];
-  const double t3 = t1*t2;
-  const double t4 = 19.0/44100.0*t3;
-  const double t5 = -x[0]+x[1];
-  const double t6 = y[0]-y[1]+y[2]-y[3];
-  const double t7 = t5*t6;
-  const double t8 = 19.0/44100.0*t7;
-  const double t9 = -x[0]+x[3];
-  const double t10 = t9*t6;
-  const double t11 = 19.0/44100.0*t10;
-  const double t12 = t9*t2;
-  const double t13 = 64.0/11025.0*t12;
-  const double t14 = -y[0]+y[3];
-  const double t15 = t1*t14;
-  const double t16 = 19.0/44100.0*t15;
-  const double t17 = t5*t14;
-  const double t18 = 64.0/11025.0*t17;
-  const double t20 = 361.0/5644800.0*t10;
-  const double t21 = 19.0/22050.0*t12;
-  const double t22 = 361.0/5644800.0*t15;
-  const double t23 = 19.0/22050.0*t17;
-  const double t24 = -t4+t8-t20-t21+t22+t23;
-  const double t25 = 361.0/5644800.0*t3;
-  const double t26 = 361.0/5644800.0*t7;
-  const double t29 = -t25+t26-t20-361.0/2822400.0*t12+t22+361.0/2822400.0*t17;
-  const double t30 = -t25+t26-t11-t21+t16+t23;
-  const double t31 = t3/4900.0;
-  const double t32 = t7/4900.0;
-  const double t33 = 209.0/627200.0*t10;
-  const double t34 = 11.0/2450.0*t12;
-  const double t35 = 209.0/627200.0*t15;
-  const double t36 = 11.0/2450.0*t17;
-  const double t37 = -t31+t32-t33-t34+t35+t36;
-  const double t38 = 19.0/156800.0*t10;
-  const double t39 = 2.0/1225.0*t12;
-  const double t40 = 19.0/156800.0*t15;
-  const double t41 = 2.0/1225.0*t17;
-  const double t42 = -t31+t32+t38+t39-t40-t41;
-  const double t43 = 209.0/627200.0*t3;
-  const double t44 = 209.0/627200.0*t7;
-  const double t45 = 19.0/627200.0*t10;
-  const double t46 = 209.0/313600.0*t12;
-  const double t47 = 19.0/627200.0*t15;
-  const double t48 = 209.0/313600.0*t17;
-  const double t49 = -t43+t44-t45-t46+t47+t48;
-  const double t50 = 19.0/156800.0*t3;
-  const double t51 = 19.0/156800.0*t7;
-  const double t52 = 19.0/78400.0*t12;
-  const double t53 = 19.0/78400.0*t17;
-  const double t54 = t50-t51-t45+t52+t47-t53;
-  const double t55 = 19.0/627200.0*t3;
-  const double t56 = 19.0/627200.0*t7;
-  const double t57 = -t55+t56-t33-t46+t35+t48;
-  const double t58 = -t55+t56+t38+t52-t40-t53;
-  const double t59 = t10/4900.0;
-  const double t60 = t15/4900.0;
-  const double t61 = -t43+t44-t59-t34+t60+t36;
-  const double t62 = t50-t51-t59+t39+t60-t41;
-  const double t63 = 99.0/627200.0*t3;
-  const double t64 = 99.0/627200.0*t7;
-  const double t65 = 99.0/627200.0*t10;
-  const double t66 = 1089.0/313600.0*t12;
-  const double t67 = 99.0/627200.0*t15;
-  const double t68 = 1089.0/313600.0*t17;
-  const double t69 = -t63+t64-t65-t66+t67+t68;
-  const double t70 = 9.0/156800.0*t10;
-  const double t71 = 99.0/78400.0*t12;
-  const double t72 = 9.0/156800.0*t15;
-  const double t73 = 99.0/78400.0*t17;
-  const double t74 = -t63+t64+t70+t71-t72-t73;
-  const double t75 = 9.0/156800.0*t3;
-  const double t76 = 9.0/156800.0*t7;
-  const double t77 = 9.0/19600.0*t12;
-  const double t78 = 9.0/19600.0*t17;
-  const double t79 = t75-t76+t70-t77-t72+t78;
-  const double t80 = t75-t76-t65+t71+t67-t73;
-  const double t81 = 79.0/14700.0*t3;
-  const double t82 = 79.0/14700.0*t7;
-  const double t86 = -1501.0/1881600.0*t3+1501.0/1881600.0*t7-t11-t21+t16+t23;
-  const double t87 = 9.0/4900.0*t3;
-  const double t88 = 9.0/4900.0*t7;
-  const double t89 = t87-t88+t38+t39-t40-t41;
-  const double t90 = 3.0/700.0*t3;
-  const double t91 = 3.0/700.0*t7;
-  const double t92 = -t90+t91-t33-t34+t35+t36;
-  const double t93 = 2607.0/627200.0*t3;
-  const double t94 = 2607.0/627200.0*t7;
-  const double t95 = -t93+t94-t59-t34+t60+t36;
-  const double t96 = 237.0/156800.0*t3;
-  const double t97 = 237.0/156800.0*t7;
-  const double t98 = t96-t97-t59+t39+t60-t41;
-  const double t99 = 171.0/627200.0*t3;
-  const double t100 = 171.0/627200.0*t7;
-  const double t101 = t99-t100+t38+t52-t40-t53;
-  const double t104 = -57.0/89600.0*t3+57.0/89600.0*t7-t33-t46+t35+t48;
-  const double t105 = 891.0/627200.0*t3;
-  const double t106 = 891.0/627200.0*t7;
-  const double t107 = t105-t106+t70+t71-t72-t73;
-  const double t108 = 297.0/89600.0*t3;
-  const double t109 = 297.0/89600.0*t7;
-  const double t110 = -t108+t109-t65-t66+t67+t68;
-  const double t111 = 27.0/22400.0*t3;
-  const double t112 = 27.0/22400.0*t7;
-  const double t113 = t111-t112-t65+t71+t67-t73;
-  const double t114 = 81.0/156800.0*t3;
-  const double t115 = 81.0/156800.0*t7;
-  const double t116 = -t114+t115+t70-t77-t72+t78;
-  const double t117 = 79.0/14700.0*t10;
-  const double t118 = 79.0/14700.0*t15;
-  const double t122 = -t4+t8-1501.0/1881600.0*t10-t21+1501.0/1881600.0*t15+t23;
-  const double t123 = 9.0/4900.0*t10;
-  const double t124 = 9.0/4900.0*t15;
-  const double t125 = t96-t97+t123+t39-t124-t41;
-  const double t126 = 3.0/700.0*t10;
-  const double t127 = 3.0/700.0*t15;
-  const double t128 = -t93+t94-t126-t34+t127+t36;
-  const double t129 = 237.0/156800.0*t10;
-  const double t130 = 237.0/156800.0*t15;
-  const double t131 = t87-t88+t129+t39-t130-t41;
-  const double t132 = 2607.0/627200.0*t10;
-  const double t133 = 2607.0/627200.0*t15;
-  const double t134 = -t90+t91-t132-t34+t133+t36;
-  const double t135 = 171.0/627200.0*t10;
-  const double t136 = 171.0/627200.0*t15;
-  const double t137 = t50-t51+t135+t52-t136-t53;
-  const double t140 = -t43+t44-57.0/89600.0*t10-t46+57.0/89600.0*t15+t48;
-  const double t141 = 81.0/156800.0*t10;
-  const double t142 = 81.0/156800.0*t15;
-  const double t143 = -t114+t115-t141-t77+t142+t78;
-  const double t144 = 891.0/627200.0*t10;
-  const double t145 = 891.0/627200.0*t15;
-  const double t146 = t111-t112+t144+t71-t145-t73;
-  const double t147 = 297.0/89600.0*t10;
-  const double t148 = 297.0/89600.0*t15;
-  const double t149 = -t108+t109-t147-t66+t148+t68;
-  const double t150 = 27.0/22400.0*t10;
-  const double t151 = 27.0/22400.0*t15;
-  const double t152 = t105-t106+t150+t71-t151-t73;
-  const double t154 = -t31+t32-t132-t34+t133+t36;
-  const double t155 = -t31+t32+t129+t39-t130-t41;
-  const double t156 = t50-t51+t123+t39-t124-t41;
-  const double t157 = -t43+t44-t126-t34+t127+t36;
-  const double t158 = t75-t76+t144+t71-t145-t73;
-  const double t159 = t75-t76-t141-t77+t142+t78;
-  const double t160 = -t63+t64+t150+t71-t151-t73;
-  const double t161 = -t63+t64-t147-t66+t148+t68;
-  const double t162 = 9.0/980.0*t3;
-  const double t163 = 9.0/980.0*t7;
-  const double t164 = 171.0/78400.0*t10;
-  const double t165 = 36.0/1225.0*t12;
-  const double t166 = 171.0/78400.0*t15;
-  const double t167 = 36.0/1225.0*t17;
-  const double t169 = 9.0/2450.0*t12;
-  const double t170 = 9.0/2450.0*t17;
-  const double t171 = t87-t88+t135+t169-t136-t170;
-  const double t174 = 171.0/39200.0*t12;
-  const double t175 = 171.0/39200.0*t17;
-  const double t176 = -171.0/125440.0*t3+171.0/125440.0*t7-t164-t174+t166+t175;
-  const double t179 = t99-t100+t135+171.0/313600.0*t12-t136-171.0/313600.0*t17;
-  const double t180 = 891.0/125440.0*t3;
-  const double t181 = 891.0/125440.0*t7;
-  const double t182 = 81.0/78400.0*t10;
-  const double t183 = 891.0/39200.0*t12;
-  const double t184 = 81.0/78400.0*t15;
-  const double t185 = 891.0/39200.0*t17;
-  const double t186 = -t180+t181-t182-t183+t184+t185;
-  const double t187 = 81.0/627200.0*t10;
-  const double t188 = 891.0/313600.0*t12;
-  const double t189 = 81.0/627200.0*t15;
-  const double t190 = 891.0/313600.0*t17;
-  const double t191 = t105-t106+t187+t188-t189-t190;
-  const double t192 = 81.0/78400.0*t12;
-  const double t193 = 81.0/78400.0*t17;
-  const double t194 = -t114+t115+t187-t192-t189+t193;
-  const double t195 = 81.0/31360.0*t3;
-  const double t196 = 81.0/31360.0*t7;
-  const double t197 = 81.0/9800.0*t12;
-  const double t198 = 81.0/9800.0*t17;
-  const double t199 = t195-t196-t182+t197+t184-t198;
-  const double t200 = 99.0/4900.0*t3;
-  const double t201 = 99.0/4900.0*t7;
-  const double t205 = -1881.0/627200.0*t3+1881.0/627200.0*t7-t164-t174+t166+t175;
-  const double t206 = 9801.0/627200.0*t3;
-  const double t207 = 9801.0/627200.0*t7;
-  const double t208 = -t206+t207-t182-t183+t184+t185;
-  const double t209 = 891.0/156800.0*t3;
-  const double t210 = 891.0/156800.0*t7;
-  const double t211 = t209-t210-t182+t197+t184-t198;
-  const double t212 = 2133.0/78400.0*t3;
-  const double t213 = 2133.0/78400.0*t7;
-  const double t214 = 9.0/980.0*t10;
-  const double t215 = 9.0/980.0*t15;
-  const double t219 = 2133.0/627200.0*t3-2133.0/627200.0*t7+t123+t169-t124-t170;
-  const double t220 = 171.0/78400.0*t3;
-  const double t221 = 171.0/78400.0*t7;
-  const double t224 = -t220+t221-171.0/125440.0*t10-t174+171.0/125440.0*t15+t175;
-  const double t225 = 729.0/78400.0*t3;
-  const double t226 = 729.0/78400.0*t7;
-  const double t227 = 81.0/31360.0*t10;
-  const double t228 = 81.0/31360.0*t15;
-  const double t229 = t225-t226+t227+t197-t228-t198;
-  const double t230 = 243.0/11200.0*t3;
-  const double t231 = 243.0/11200.0*t7;
-  const double t232 = 891.0/125440.0*t10;
-  const double t233 = 891.0/125440.0*t15;
-  const double t234 = -t230+t231-t232-t183+t233+t185;
-  const double t237 = 243.0/89600.0*t3-243.0/89600.0*t7+t144+t188-t145-t190;
-  const double t238 = 729.0/627200.0*t3;
-  const double t239 = 729.0/627200.0*t7;
-  const double t240 = -t238+t239-t141-t192+t142+t193;
-  const double t241 = 99.0/4900.0*t10;
-  const double t242 = 99.0/4900.0*t15;
-  const double t246 = -t220+t221-1881.0/627200.0*t10-t174+1881.0/627200.0*t15+t175;
-  const double t247 = 9801.0/627200.0*t10;
-  const double t248 = 9801.0/627200.0*t15;
-  const double t249 = -t230+t231-t247-t183+t248+t185;
-  const double t250 = 891.0/156800.0*t10;
-  const double t251 = 891.0/156800.0*t15;
-  const double t252 = t225-t226+t250+t197-t251-t198;
-  const double t253 = 2133.0/78400.0*t10;
-  const double t254 = 2133.0/78400.0*t15;
-  const double t258 = t87-t88+2133.0/627200.0*t10+t169-2133.0/627200.0*t15-t170;
-  const double t259 = 729.0/78400.0*t10;
-  const double t260 = 729.0/78400.0*t15;
-  const double t261 = t195-t196+t259+t197-t260-t198;
-  const double t262 = 729.0/627200.0*t10;
-  const double t263 = 729.0/627200.0*t15;
-  const double t264 = -t114+t115-t262-t192+t263+t193;
-  const double t267 = t105-t106+243.0/89600.0*t10+t188-243.0/89600.0*t15-t190;
-  const double t268 = 243.0/11200.0*t10;
-  const double t269 = 243.0/11200.0*t15;
-  const double t270 = -t180+t181-t268-t183+t269+t185;
-  const double t272 = t209-t210+t259+t197-t260-t198;
-  const double t273 = -t206+t207-t268-t183+t269+t185;
-  const double t275 = t99-t100+t123+t169-t124-t170;
-  const double t276 = 81.0/78400.0*t3;
-  const double t277 = 81.0/78400.0*t7;
-  const double t278 = -t276+t277-t232-t183+t233+t185;
-  const double t279 = -t276+t277+t227+t197-t228-t198;
-  const double t280 = 81.0/627200.0*t3;
-  const double t281 = 81.0/627200.0*t7;
-  const double t282 = t280-t281-t141-t192+t142+t193;
-  const double t283 = t280-t281+t144+t188-t145-t190;
-  const double t285 = -t276+t277+t250+t197-t251-t198;
-  const double t286 = -t276+t277-t247-t183+t248+t185;
-  const double t287 = 729.0/15680.0*t3;
-  const double t288 = 729.0/15680.0*t7;
-  const double t289 = 729.0/15680.0*t10;
-  const double t290 = 729.0/4900.0*t12;
-  const double t291 = 729.0/15680.0*t15;
-  const double t292 = 729.0/4900.0*t17;
-  const double t295 = 729.0/39200.0*t12;
-  const double t297 = 729.0/39200.0*t17;
-  const double t298 = t225-t226+729.0/125440.0*t10+t295-729.0/125440.0*t15-t297;
-  const double t301 = -t238+t239-t262-729.0/313600.0*t12+t263+729.0/313600.0*t17;
-  const double t304 = 729.0/125440.0*t3-729.0/125440.0*t7+t259+t295-t260-t297;
-  const double t305 = 8019.0/78400.0*t3;
-  const double t306 = 8019.0/78400.0*t7;
-  const double t310 = 8019.0/627200.0*t3-8019.0/627200.0*t7+t259+t295-t260-t297;
-  const double t311 = 8019.0/78400.0*t10;
-  const double t312 = 8019.0/78400.0*t15;
-  const double t316 = t225-t226+8019.0/627200.0*t10+t295-8019.0/627200.0*t15-t297;
-  local_mass_matrix(0,0) = -t4+t8-t11-t13+t16+t18;
-  local_mass_matrix(0,1) = t24;
-  local_mass_matrix(0,2) = t29;
-  local_mass_matrix(0,3) = t30;
-  local_mass_matrix(0,4) = t37;
-  local_mass_matrix(0,5) = t42;
-  local_mass_matrix(0,6) = t49;
-  local_mass_matrix(0,7) = t54;
-  local_mass_matrix(0,8) = t57;
-  local_mass_matrix(0,9) = t58;
-  local_mass_matrix(0,10) = t61;
-  local_mass_matrix(0,11) = t62;
-  local_mass_matrix(0,12) = t69;
-  local_mass_matrix(0,13) = t74;
-  local_mass_matrix(0,14) = t79;
-  local_mass_matrix(0,15) = t80;
-  local_mass_matrix(1,0) = t24;
-  local_mass_matrix(1,1) = -t81+t82-t11-t13+t16+t18;
-  local_mass_matrix(1,2) = t86;
-  local_mass_matrix(1,3) = t29;
-  local_mass_matrix(1,4) = t89;
-  local_mass_matrix(1,5) = t92;
-  local_mass_matrix(1,6) = t95;
-  local_mass_matrix(1,7) = t98;
-  local_mass_matrix(1,8) = t101;
-  local_mass_matrix(1,9) = t104;
-  local_mass_matrix(1,10) = t49;
-  local_mass_matrix(1,11) = t54;
-  local_mass_matrix(1,12) = t107;
-  local_mass_matrix(1,13) = t110;
-  local_mass_matrix(1,14) = t113;
-  local_mass_matrix(1,15) = t116;
-  local_mass_matrix(2,0) = t29;
-  local_mass_matrix(2,1) = t86;
-  local_mass_matrix(2,2) = -t81+t82-t117-t13+t118+t18;
-  local_mass_matrix(2,3) = t122;
-  local_mass_matrix(2,4) = t101;
-  local_mass_matrix(2,5) = t104;
-  local_mass_matrix(2,6) = t125;
-  local_mass_matrix(2,7) = t128;
-  local_mass_matrix(2,8) = t131;
-  local_mass_matrix(2,9) = t134;
-  local_mass_matrix(2,10) = t137;
-  local_mass_matrix(2,11) = t140;
-  local_mass_matrix(2,12) = t143;
-  local_mass_matrix(2,13) = t146;
-  local_mass_matrix(2,14) = t149;
-  local_mass_matrix(2,15) = t152;
-  local_mass_matrix(3,0) = t30;
-  local_mass_matrix(3,1) = t29;
-  local_mass_matrix(3,2) = t122;
-  local_mass_matrix(3,3) = -t4+t8-t117-t13+t118+t18;
-  local_mass_matrix(3,4) = t57;
-  local_mass_matrix(3,5) = t58;
-  local_mass_matrix(3,6) = t137;
-  local_mass_matrix(3,7) = t140;
-  local_mass_matrix(3,8) = t154;
-  local_mass_matrix(3,9) = t155;
-  local_mass_matrix(3,10) = t156;
-  local_mass_matrix(3,11) = t157;
-  local_mass_matrix(3,12) = t158;
-  local_mass_matrix(3,13) = t159;
-  local_mass_matrix(3,14) = t160;
-  local_mass_matrix(3,15) = t161;
-  local_mass_matrix(4,0) = t37;
-  local_mass_matrix(4,1) = t89;
-  local_mass_matrix(4,2) = t101;
-  local_mass_matrix(4,3) = t57;
-  local_mass_matrix(4,4) = -t162+t163-t164-t165+t166+t167;
-  local_mass_matrix(4,5) = t171;
-  local_mass_matrix(4,6) = t107;
-  local_mass_matrix(4,7) = t116;
-  local_mass_matrix(4,8) = t176;
-  local_mass_matrix(4,9) = t179;
-  local_mass_matrix(4,10) = t69;
-  local_mass_matrix(4,11) = t80;
-  local_mass_matrix(4,12) = t186;
-  local_mass_matrix(4,13) = t191;
-  local_mass_matrix(4,14) = t194;
-  local_mass_matrix(4,15) = t199;
-  local_mass_matrix(5,0) = t42;
-  local_mass_matrix(5,1) = t92;
-  local_mass_matrix(5,2) = t104;
-  local_mass_matrix(5,3) = t58;
-  local_mass_matrix(5,4) = t171;
-  local_mass_matrix(5,5) = -t200+t201-t164-t165+t166+t167;
-  local_mass_matrix(5,6) = t110;
-  local_mass_matrix(5,7) = t113;
-  local_mass_matrix(5,8) = t179;
-  local_mass_matrix(5,9) = t205;
-  local_mass_matrix(5,10) = t74;
-  local_mass_matrix(5,11) = t79;
-  local_mass_matrix(5,12) = t191;
-  local_mass_matrix(5,13) = t208;
-  local_mass_matrix(5,14) = t211;
-  local_mass_matrix(5,15) = t194;
-  local_mass_matrix(6,0) = t49;
-  local_mass_matrix(6,1) = t95;
-  local_mass_matrix(6,2) = t125;
-  local_mass_matrix(6,3) = t137;
-  local_mass_matrix(6,4) = t107;
-  local_mass_matrix(6,5) = t110;
-  local_mass_matrix(6,6) = -t212+t213-t214-t165+t215+t167;
-  local_mass_matrix(6,7) = t219;
-  local_mass_matrix(6,8) = t143;
-  local_mass_matrix(6,9) = t146;
-  local_mass_matrix(6,10) = t224;
-  local_mass_matrix(6,11) = t179;
-  local_mass_matrix(6,12) = t229;
-  local_mass_matrix(6,13) = t234;
-  local_mass_matrix(6,14) = t237;
-  local_mass_matrix(6,15) = t240;
-  local_mass_matrix(7,0) = t54;
-  local_mass_matrix(7,1) = t98;
-  local_mass_matrix(7,2) = t128;
-  local_mass_matrix(7,3) = t140;
-  local_mass_matrix(7,4) = t116;
-  local_mass_matrix(7,5) = t113;
-  local_mass_matrix(7,6) = t219;
-  local_mass_matrix(7,7) = -t212+t213-t241-t165+t242+t167;
-  local_mass_matrix(7,8) = t152;
-  local_mass_matrix(7,9) = t149;
-  local_mass_matrix(7,10) = t179;
-  local_mass_matrix(7,11) = t246;
-  local_mass_matrix(7,12) = t240;
-  local_mass_matrix(7,13) = t237;
-  local_mass_matrix(7,14) = t249;
-  local_mass_matrix(7,15) = t252;
-  local_mass_matrix(8,0) = t57;
-  local_mass_matrix(8,1) = t101;
-  local_mass_matrix(8,2) = t131;
-  local_mass_matrix(8,3) = t154;
-  local_mass_matrix(8,4) = t176;
-  local_mass_matrix(8,5) = t179;
-  local_mass_matrix(8,6) = t143;
-  local_mass_matrix(8,7) = t152;
-  local_mass_matrix(8,8) = -t162+t163-t253-t165+t254+t167;
-  local_mass_matrix(8,9) = t258;
-  local_mass_matrix(8,10) = t158;
-  local_mass_matrix(8,11) = t161;
-  local_mass_matrix(8,12) = t261;
-  local_mass_matrix(8,13) = t264;
-  local_mass_matrix(8,14) = t267;
-  local_mass_matrix(8,15) = t270;
-  local_mass_matrix(9,0) = t58;
-  local_mass_matrix(9,1) = t104;
-  local_mass_matrix(9,2) = t134;
-  local_mass_matrix(9,3) = t155;
-  local_mass_matrix(9,4) = t179;
-  local_mass_matrix(9,5) = t205;
-  local_mass_matrix(9,6) = t146;
-  local_mass_matrix(9,7) = t149;
-  local_mass_matrix(9,8) = t258;
-  local_mass_matrix(9,9) = -t200+t201-t253-t165+t254+t167;
-  local_mass_matrix(9,10) = t159;
-  local_mass_matrix(9,11) = t160;
-  local_mass_matrix(9,12) = t264;
-  local_mass_matrix(9,13) = t272;
-  local_mass_matrix(9,14) = t273;
-  local_mass_matrix(9,15) = t267;
-  local_mass_matrix(10,0) = t61;
-  local_mass_matrix(10,1) = t49;
-  local_mass_matrix(10,2) = t137;
-  local_mass_matrix(10,3) = t156;
-  local_mass_matrix(10,4) = t69;
-  local_mass_matrix(10,5) = t74;
-  local_mass_matrix(10,6) = t224;
-  local_mass_matrix(10,7) = t179;
-  local_mass_matrix(10,8) = t158;
-  local_mass_matrix(10,9) = t159;
-  local_mass_matrix(10,10) = -t220+t221-t214-t165+t215+t167;
-  local_mass_matrix(10,11) = t275;
-  local_mass_matrix(10,12) = t278;
-  local_mass_matrix(10,13) = t279;
-  local_mass_matrix(10,14) = t282;
-  local_mass_matrix(10,15) = t283;
-  local_mass_matrix(11,0) = t62;
-  local_mass_matrix(11,1) = t54;
-  local_mass_matrix(11,2) = t140;
-  local_mass_matrix(11,3) = t157;
-  local_mass_matrix(11,4) = t80;
-  local_mass_matrix(11,5) = t79;
-  local_mass_matrix(11,6) = t179;
-  local_mass_matrix(11,7) = t246;
-  local_mass_matrix(11,8) = t161;
-  local_mass_matrix(11,9) = t160;
-  local_mass_matrix(11,10) = t275;
-  local_mass_matrix(11,11) = -t220+t221-t241-t165+t242+t167;
-  local_mass_matrix(11,12) = t283;
-  local_mass_matrix(11,13) = t282;
-  local_mass_matrix(11,14) = t285;
-  local_mass_matrix(11,15) = t286;
-  local_mass_matrix(12,0) = t69;
-  local_mass_matrix(12,1) = t107;
-  local_mass_matrix(12,2) = t143;
-  local_mass_matrix(12,3) = t158;
-  local_mass_matrix(12,4) = t186;
-  local_mass_matrix(12,5) = t191;
-  local_mass_matrix(12,6) = t229;
-  local_mass_matrix(12,7) = t240;
-  local_mass_matrix(12,8) = t261;
-  local_mass_matrix(12,9) = t264;
-  local_mass_matrix(12,10) = t278;
-  local_mass_matrix(12,11) = t283;
-  local_mass_matrix(12,12) = -t287+t288-t289-t290+t291+t292;
-  local_mass_matrix(12,13) = t298;
-  local_mass_matrix(12,14) = t301;
-  local_mass_matrix(12,15) = t304;
-  local_mass_matrix(13,0) = t74;
-  local_mass_matrix(13,1) = t110;
-  local_mass_matrix(13,2) = t146;
-  local_mass_matrix(13,3) = t159;
-  local_mass_matrix(13,4) = t191;
-  local_mass_matrix(13,5) = t208;
-  local_mass_matrix(13,6) = t234;
-  local_mass_matrix(13,7) = t237;
-  local_mass_matrix(13,8) = t264;
-  local_mass_matrix(13,9) = t272;
-  local_mass_matrix(13,10) = t279;
-  local_mass_matrix(13,11) = t282;
-  local_mass_matrix(13,12) = t298;
-  local_mass_matrix(13,13) = -t305+t306-t289-t290+t291+t292;
-  local_mass_matrix(13,14) = t310;
-  local_mass_matrix(13,15) = t301;
-  local_mass_matrix(14,0) = t79;
-  local_mass_matrix(14,1) = t113;
-  local_mass_matrix(14,2) = t149;
-  local_mass_matrix(14,3) = t160;
-  local_mass_matrix(14,4) = t194;
-  local_mass_matrix(14,5) = t211;
-  local_mass_matrix(14,6) = t237;
-  local_mass_matrix(14,7) = t249;
-  local_mass_matrix(14,8) = t267;
-  local_mass_matrix(14,9) = t273;
-  local_mass_matrix(14,10) = t282;
-  local_mass_matrix(14,11) = t285;
-  local_mass_matrix(14,12) = t301;
-  local_mass_matrix(14,13) = t310;
-  local_mass_matrix(14,14) = -t305+t306-t311-t290+t312+t292;
-  local_mass_matrix(14,15) = t316;
-  local_mass_matrix(15,0) = t80;
-  local_mass_matrix(15,1) = t116;
-  local_mass_matrix(15,2) = t152;
-  local_mass_matrix(15,3) = t161;
-  local_mass_matrix(15,4) = t199;
-  local_mass_matrix(15,5) = t194;
-  local_mass_matrix(15,6) = t240;
-  local_mass_matrix(15,7) = t252;
-  local_mass_matrix(15,8) = t270;
-  local_mass_matrix(15,9) = t267;
-  local_mass_matrix(15,10) = t283;
-  local_mass_matrix(15,11) = t286;
-  local_mass_matrix(15,12) = t304;
-  local_mass_matrix(15,13) = t301;
-  local_mass_matrix(15,14) = t316;
-  local_mass_matrix(15,15) = -t287+t288-t311-t290+t312+t292;
-};
-
-
-template <>
-void FEQ3<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const {
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(), dofs_per_cell));
-
-  unit_points[0] = Point<2>(0,0);
-  unit_points[1] = Point<2>(1,0);
-  unit_points[2] = Point<2>(1,1);
-  unit_points[3] = Point<2>(0,1);
-  unit_points[4] = Point<2>(1./3,0);
-  unit_points[5] = Point<2>(2./3,0);
-  unit_points[6] = Point<2>(1,1./3);
-  unit_points[7] = Point<2>(1,2./3);
-  unit_points[8] = Point<2>(1./3,1);
-  unit_points[9] = Point<2>(2./3,1);
-  unit_points[10]= Point<2>(0,1./3);
-  unit_points[11]= Point<2>(0,2./3);
-  unit_points[12]= Point<2>(1./3,1./3);
-  unit_points[13]= Point<2>(2./3,1./3);
-  unit_points[14]= Point<2>(2./3,2./3);
-  unit_points[15]= Point<2>(1./3,2./3);
-};
-
-
-template <>
-void FEQ3<2>::get_support_points (const DoFHandler<2>::cell_iterator &cell,
-                                 std::vector<Point<2> >  &support_points) const {
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (support_points.size(), dofs_per_cell));
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-  const double t1 = 2.0/3.0*x[0];
-  const double t2 = x[1]/3.0;
-  const double t4 = 2.0/3.0*y[0];
-  const double t5 = y[1]/3.0;
-  const double t7 = x[0]/3.0;
-  const double t8 = 2.0/3.0*x[1];
-  const double t10 = y[0]/3.0;
-  const double t11 = 2.0/3.0*y[1];
-  const double t13 = x[2]/3.0;
-  const double t15 = y[2]/3.0;
-  const double t17 = 2.0/3.0*x[2];
-  const double t19 = 2.0/3.0*y[2];
-  const double t21 = 2.0/3.0*x[3];
-  const double t23 = 2.0/3.0*y[3];
-  const double t25 = x[3]/3.0;
-  const double t27 = y[3]/3.0;
-  const double t34 = 2.0/9.0*x[1];
-  const double t36 = 2.0/9.0*x[3];
-  const double t39 = 2.0/9.0*y[1];
-  const double t41 = 2.0/9.0*y[3];
-  const double t43 = 2.0/9.0*x[0];
-  const double t45 = 2.0/9.0*x[2];
-  const double t48 = 2.0/9.0*y[0];
-  const double t50 = 2.0/9.0*y[2];
-  support_points[0](0) = x[0];
-  support_points[0](1) = y[0];
-  support_points[1](0) = x[1];
-  support_points[1](1) = y[1];
-  support_points[2](0) = x[2];
-  support_points[2](1) = y[2];
-  support_points[3](0) = x[3];
-  support_points[3](1) = y[3];
-  support_points[4](0) = t1+t2;
-  support_points[4](1) = t4+t5;
-  support_points[5](0) = t7+t8;
-  support_points[5](1) = t10+t11;
-  support_points[6](0) = t8+t13;
-  support_points[6](1) = t11+t15;
-  support_points[7](0) = t2+t17;
-  support_points[7](1) = t5+t19;
-  support_points[8](0) = t13+t21;
-  support_points[8](1) = t15+t23;
-  support_points[9](0) = t17+t25;
-  support_points[9](1) = t19+t27;
-  support_points[10](0) = t1+t25;
-  support_points[10](1) = t4+t27;
-  support_points[11](0) = t7+t21;
-  support_points[11](1) = t10+t23;
-  support_points[12](0) = 4.0/9.0*x[0]+t34+x[2]/9.0+t36;
-  support_points[12](1) = 4.0/9.0*y[0]+t39+y[2]/9.0+t41;
-  support_points[13](0) = t43+4.0/9.0*x[1]+t45+x[3]/9.0;
-  support_points[13](1) = t48+4.0/9.0*y[1]+t50+y[3]/9.0;
-  support_points[14](0) = x[0]/9.0+t34+4.0/9.0*x[2]+t36;
-  support_points[14](1) = y[0]/9.0+t39+4.0/9.0*y[2]+t41;
-  support_points[15](0) = t43+x[1]/9.0+t45+4.0/9.0*x[3];
-  support_points[15](1) = t48+y[1]/9.0+t50+4.0/9.0*y[3];
-};
-
-
-template <>
-void FEQ3<2>::get_face_support_points (const DoFHandler<2>::face_iterator &face,
-                                      std::vector<Point<2> >  &support_points) const {
-  Assert (support_points.size() == dofs_per_face,
-         FiniteElementBase<2>::ExcWrongFieldDimension (support_points.size(), dofs_per_face));
-
-  for (unsigned int vertex=0; vertex<2; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-  support_points[2] = (2*support_points[0] + support_points[1]) / 3;
-  support_points[3] = (support_points[0] + 2*support_points[1]) / 3;
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-// ignore the following, since it doesn't compile properly. it simply
-// is too large. instead, in the `else' branch of the `if 0', we
-// provide dummy implementations.
-
-#if 0
-
-template <>
-FEQ3<3>::FEQ3 () :
-               FEQ1Mapping<3> (1, 2, 4, 8, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,0) = 1.0/256.0;
-  interface_constraints(0,1) = 1.0/256.0;
-  interface_constraints(0,2) = 1.0/256.0;
-  interface_constraints(0,3) = 1.0/256.0;
-  interface_constraints(0,4) = -9.0/256.0;
-  interface_constraints(0,5) = -9.0/256.0;
-  interface_constraints(0,6) = -9.0/256.0;
-  interface_constraints(0,7) = -9.0/256.0;
-  interface_constraints(0,8) = -9.0/256.0;
-  interface_constraints(0,9) = -9.0/256.0;
-  interface_constraints(0,10) = -9.0/256.0;
-  interface_constraints(0,11) = -9.0/256.0;
-  interface_constraints(0,12) = 81.0/256.0;
-  interface_constraints(0,13) = 81.0/256.0;
-  interface_constraints(0,14) = 81.0/256.0;
-  interface_constraints(0,15) = 81.0/256.0;
-  interface_constraints(1,0) = -1.0/16.0;
-  interface_constraints(1,1) = -1.0/16.0;
-  interface_constraints(1,4) = 9.0/16.0;
-  interface_constraints(1,5) = 9.0/16.0;
-  interface_constraints(2,1) = -1.0/16.0;
-  interface_constraints(2,2) = -1.0/16.0;
-  interface_constraints(2,6) = 9.0/16.0;
-  interface_constraints(2,7) = 9.0/16.0;
-  interface_constraints(3,2) = -1.0/16.0;
-  interface_constraints(3,3) = -1.0/16.0;
-  interface_constraints(3,8) = 9.0/16.0;
-  interface_constraints(3,9) = 9.0/16.0;
-  interface_constraints(4,0) = -1.0/16.0;
-  interface_constraints(4,3) = -1.0/16.0;
-  interface_constraints(4,10) = 9.0/16.0;
-  interface_constraints(4,11) = 9.0/16.0;
-  interface_constraints(5,0) = -5.0/256.0;
-  interface_constraints(5,1) = -5.0/256.0;
-  interface_constraints(5,2) = -1.0/256.0;
-  interface_constraints(5,3) = -1.0/256.0;
-  interface_constraints(5,4) = 45.0/256.0;
-  interface_constraints(5,5) = 45.0/256.0;
-  interface_constraints(5,6) = -15.0/256.0;
-  interface_constraints(5,7) = 5.0/256.0;
-  interface_constraints(5,8) = 9.0/256.0;
-  interface_constraints(5,9) = 9.0/256.0;
-  interface_constraints(5,10) = -15.0/256.0;
-  interface_constraints(5,11) = 5.0/256.0;
-  interface_constraints(5,12) = 135.0/256.0;
-  interface_constraints(5,13) = 135.0/256.0;
-  interface_constraints(5,14) = -45.0/256.0;
-  interface_constraints(5,15) = -45.0/256.0;
-  interface_constraints(6,6) = -1.0/16.0;
-  interface_constraints(6,10) = -1.0/16.0;
-  interface_constraints(6,12) = 9.0/16.0;
-  interface_constraints(6,13) = 9.0/16.0;
-  interface_constraints(7,5) = -1.0/16.0;
-  interface_constraints(7,9) = -1.0/16.0;
-  interface_constraints(7,13) = 9.0/16.0;
-  interface_constraints(7,15) = 9.0/16.0;
-  interface_constraints(8,0) = -1.0/256.0;
-  interface_constraints(8,1) = -5.0/256.0;
-  interface_constraints(8,2) = -5.0/256.0;
-  interface_constraints(8,3) = -1.0/256.0;
-  interface_constraints(8,4) = 5.0/256.0;
-  interface_constraints(8,5) = -15.0/256.0;
-  interface_constraints(8,6) = 45.0/256.0;
-  interface_constraints(8,7) = 45.0/256.0;
-  interface_constraints(8,8) = 5.0/256.0;
-  interface_constraints(8,9) = -15.0/256.0;
-  interface_constraints(8,10) = 9.0/256.0;
-  interface_constraints(8,11) = 9.0/256.0;
-  interface_constraints(8,12) = -45.0/256.0;
-  interface_constraints(8,13) = 135.0/256.0;
-  interface_constraints(8,14) = -45.0/256.0;
-  interface_constraints(8,15) = 135.0/256.0;
-  interface_constraints(9,7) = -1.0/16.0;
-  interface_constraints(9,11) = -1.0/16.0;
-  interface_constraints(9,14) = 9.0/16.0;
-  interface_constraints(9,15) = 9.0/16.0;
-  interface_constraints(10,0) = -1.0/256.0;
-  interface_constraints(10,1) = -1.0/256.0;
-  interface_constraints(10,2) = -5.0/256.0;
-  interface_constraints(10,3) = -5.0/256.0;
-  interface_constraints(10,4) = 9.0/256.0;
-  interface_constraints(10,5) = 9.0/256.0;
-  interface_constraints(10,6) = 5.0/256.0;
-  interface_constraints(10,7) = -15.0/256.0;
-  interface_constraints(10,8) = 45.0/256.0;
-  interface_constraints(10,9) = 45.0/256.0;
-  interface_constraints(10,10) = 5.0/256.0;
-  interface_constraints(10,11) = -15.0/256.0;
-  interface_constraints(10,12) = -45.0/256.0;
-  interface_constraints(10,13) = -45.0/256.0;
-  interface_constraints(10,14) = 135.0/256.0;
-  interface_constraints(10,15) = 135.0/256.0;
-  interface_constraints(11,0) = -5.0/256.0;
-  interface_constraints(11,1) = -1.0/256.0;
-  interface_constraints(11,2) = -1.0/256.0;
-  interface_constraints(11,3) = -5.0/256.0;
-  interface_constraints(11,4) = -15.0/256.0;
-  interface_constraints(11,5) = 5.0/256.0;
-  interface_constraints(11,6) = 9.0/256.0;
-  interface_constraints(11,7) = 9.0/256.0;
-  interface_constraints(11,8) = -15.0/256.0;
-  interface_constraints(11,9) = 5.0/256.0;
-  interface_constraints(11,10) = 45.0/256.0;
-  interface_constraints(11,11) = 45.0/256.0;
-  interface_constraints(11,12) = 135.0/256.0;
-  interface_constraints(11,13) = -45.0/256.0;
-  interface_constraints(11,14) = 135.0/256.0;
-  interface_constraints(11,15) = -45.0/256.0;
-  interface_constraints(12,4) = -1.0/16.0;
-  interface_constraints(12,8) = -1.0/16.0;
-  interface_constraints(12,12) = 9.0/16.0;
-  interface_constraints(12,14) = 9.0/16.0;
-  interface_constraints(13,0) = 5.0/16.0;
-  interface_constraints(13,1) = 1.0/16.0;
-  interface_constraints(13,4) = 15.0/16.0;
-  interface_constraints(13,5) = -5.0/16.0;
-  interface_constraints(14,4) = 1.0;
-  interface_constraints(15,5) = 1.0;
-  interface_constraints(16,0) = 1.0/16.0;
-  interface_constraints(16,1) = 5.0/16.0;
-  interface_constraints(16,4) = -5.0/16.0;
-  interface_constraints(16,5) = 15.0/16.0;
-  interface_constraints(17,1) = 5.0/16.0;
-  interface_constraints(17,2) = 1.0/16.0;
-  interface_constraints(17,6) = 15.0/16.0;
-  interface_constraints(17,7) = -5.0/16.0;
-  interface_constraints(18,6) = 1.0;
-  interface_constraints(19,7) = 1.0;
-  interface_constraints(20,1) = 1.0/16.0;
-  interface_constraints(20,2) = 5.0/16.0;
-  interface_constraints(20,6) = -5.0/16.0;
-  interface_constraints(20,7) = 15.0/16.0;
-  interface_constraints(21,2) = 1.0/16.0;
-  interface_constraints(21,3) = 5.0/16.0;
-  interface_constraints(21,8) = 15.0/16.0;
-  interface_constraints(21,9) = -5.0/16.0;
-  interface_constraints(22,8) = 1.0;
-  interface_constraints(23,9) = 1.0;
-  interface_constraints(24,2) = 5.0/16.0;
-  interface_constraints(24,3) = 1.0/16.0;
-  interface_constraints(24,8) = -5.0/16.0;
-  interface_constraints(24,9) = 15.0/16.0;
-  interface_constraints(25,0) = 5.0/16.0;
-  interface_constraints(25,3) = 1.0/16.0;
-  interface_constraints(25,10) = 15.0/16.0;
-  interface_constraints(25,11) = -5.0/16.0;
-  interface_constraints(26,10) = 1.0;
-  interface_constraints(27,11) = 1.0;
-  interface_constraints(28,0) = 1.0/16.0;
-  interface_constraints(28,3) = 5.0/16.0;
-  interface_constraints(28,10) = -5.0/16.0;
-  interface_constraints(28,11) = 15.0/16.0;
-  interface_constraints(29,0) = 25.0/256.0;
-  interface_constraints(29,1) = 5.0/256.0;
-  interface_constraints(29,2) = 1.0/256.0;
-  interface_constraints(29,3) = 5.0/256.0;
-  interface_constraints(29,4) = 75.0/256.0;
-  interface_constraints(29,5) = -25.0/256.0;
-  interface_constraints(29,6) = 15.0/256.0;
-  interface_constraints(29,7) = -5.0/256.0;
-  interface_constraints(29,8) = 15.0/256.0;
-  interface_constraints(29,9) = -5.0/256.0;
-  interface_constraints(29,10) = 75.0/256.0;
-  interface_constraints(29,11) = -25.0/256.0;
-  interface_constraints(29,12) = 225.0/256.0;
-  interface_constraints(29,13) = -75.0/256.0;
-  interface_constraints(29,14) = -75.0/256.0;
-  interface_constraints(29,15) = 25.0/256.0;
-  interface_constraints(30,4) = 5.0/16.0;
-  interface_constraints(30,8) = 1.0/16.0;
-  interface_constraints(30,12) = 15.0/16.0;
-  interface_constraints(30,14) = -5.0/16.0;
-  interface_constraints(31,6) = 1.0/16.0;
-  interface_constraints(31,10) = 5.0/16.0;
-  interface_constraints(31,12) = 15.0/16.0;
-  interface_constraints(31,13) = -5.0/16.0;
-  interface_constraints(32,12) = 1.0;
-  interface_constraints(33,5) = 5.0/16.0;
-  interface_constraints(33,9) = 1.0/16.0;
-  interface_constraints(33,13) = 15.0/16.0;
-  interface_constraints(33,15) = -5.0/16.0;
-  interface_constraints(34,0) = 5.0/256.0;
-  interface_constraints(34,1) = 25.0/256.0;
-  interface_constraints(34,2) = 5.0/256.0;
-  interface_constraints(34,3) = 1.0/256.0;
-  interface_constraints(34,4) = -25.0/256.0;
-  interface_constraints(34,5) = 75.0/256.0;
-  interface_constraints(34,6) = 75.0/256.0;
-  interface_constraints(34,7) = -25.0/256.0;
-  interface_constraints(34,8) = -5.0/256.0;
-  interface_constraints(34,9) = 15.0/256.0;
-  interface_constraints(34,10) = 15.0/256.0;
-  interface_constraints(34,11) = -5.0/256.0;
-  interface_constraints(34,12) = -75.0/256.0;
-  interface_constraints(34,13) = 225.0/256.0;
-  interface_constraints(34,14) = 25.0/256.0;
-  interface_constraints(34,15) = -75.0/256.0;
-  interface_constraints(35,13) = 1.0;
-  interface_constraints(36,6) = 5.0/16.0;
-  interface_constraints(36,10) = 1.0/16.0;
-  interface_constraints(36,12) = -5.0/16.0;
-  interface_constraints(36,13) = 15.0/16.0;
-  interface_constraints(37,15) = 1.0;
-  interface_constraints(38,7) = 5.0/16.0;
-  interface_constraints(38,11) = 1.0/16.0;
-  interface_constraints(38,14) = -5.0/16.0;
-  interface_constraints(38,15) = 15.0/16.0;
-  interface_constraints(39,5) = 1.0/16.0;
-  interface_constraints(39,9) = 5.0/16.0;
-  interface_constraints(39,13) = -5.0/16.0;
-  interface_constraints(39,15) = 15.0/16.0;
-  interface_constraints(40,0) = 1.0/256.0;
-  interface_constraints(40,1) = 5.0/256.0;
-  interface_constraints(40,2) = 25.0/256.0;
-  interface_constraints(40,3) = 5.0/256.0;
-  interface_constraints(40,4) = -5.0/256.0;
-  interface_constraints(40,5) = 15.0/256.0;
-  interface_constraints(40,6) = -25.0/256.0;
-  interface_constraints(40,7) = 75.0/256.0;
-  interface_constraints(40,8) = -25.0/256.0;
-  interface_constraints(40,9) = 75.0/256.0;
-  interface_constraints(40,10) = -5.0/256.0;
-  interface_constraints(40,11) = 15.0/256.0;
-  interface_constraints(40,12) = 25.0/256.0;
-  interface_constraints(40,13) = -75.0/256.0;
-  interface_constraints(40,14) = -75.0/256.0;
-  interface_constraints(40,15) = 225.0/256.0;
-  interface_constraints(41,7) = 1.0/16.0;
-  interface_constraints(41,11) = 5.0/16.0;
-  interface_constraints(41,14) = 15.0/16.0;
-  interface_constraints(41,15) = -5.0/16.0;
-  interface_constraints(42,14) = 1.0;
-  interface_constraints(43,0) = 5.0/256.0;
-  interface_constraints(43,1) = 1.0/256.0;
-  interface_constraints(43,2) = 5.0/256.0;
-  interface_constraints(43,3) = 25.0/256.0;
-  interface_constraints(43,4) = 15.0/256.0;
-  interface_constraints(43,5) = -5.0/256.0;
-  interface_constraints(43,6) = -5.0/256.0;
-  interface_constraints(43,7) = 15.0/256.0;
-  interface_constraints(43,8) = 75.0/256.0;
-  interface_constraints(43,9) = -25.0/256.0;
-  interface_constraints(43,10) = -25.0/256.0;
-  interface_constraints(43,11) = 75.0/256.0;
-  interface_constraints(43,12) = -75.0/256.0;
-  interface_constraints(43,13) = 25.0/256.0;
-  interface_constraints(43,14) = 225.0/256.0;
-  interface_constraints(43,15) = -75.0/256.0;
-  interface_constraints(44,4) = 1.0/16.0;
-  interface_constraints(44,8) = 5.0/16.0;
-  interface_constraints(44,12) = -5.0/16.0;
-  interface_constraints(44,14) = 15.0/16.0;
-
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ3<3>::FEQ3 (const int) :
-               FEQ1Mapping<3> (0, 0, 0, 64, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ3<3>::initialize_matrices ()
-{
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = -1.0/16.0;
-  prolongation[0](1,1) = -1.0/16.0;
-  prolongation[0](1,8) = 9.0/16.0;
-  prolongation[0](1,9) = 9.0/16.0;
-  prolongation[0](2,0) = 1.0/256.0;
-  prolongation[0](2,1) = 1.0/256.0;
-  prolongation[0](2,2) = 1.0/256.0;
-  prolongation[0](2,3) = 1.0/256.0;
-  prolongation[0](2,8) = -9.0/256.0;
-  prolongation[0](2,9) = -9.0/256.0;
-  prolongation[0](2,10) = -9.0/256.0;
-  prolongation[0](2,11) = -9.0/256.0;
-  prolongation[0](2,12) = -9.0/256.0;
-  prolongation[0](2,13) = -9.0/256.0;
-  prolongation[0](2,14) = -9.0/256.0;
-  prolongation[0](2,15) = -9.0/256.0;
-  prolongation[0](2,32) = 81.0/256.0;
-  prolongation[0](2,33) = 81.0/256.0;
-  prolongation[0](2,34) = 81.0/256.0;
-  prolongation[0](2,35) = 81.0/256.0;
-  prolongation[0](3,0) = -1.0/16.0;
-  prolongation[0](3,3) = -1.0/16.0;
-  prolongation[0](3,14) = 9.0/16.0;
-  prolongation[0](3,15) = 9.0/16.0;
-  prolongation[0](4,0) = -1.0/16.0;
-  prolongation[0](4,4) = -1.0/16.0;
-  prolongation[0](4,24) = 9.0/16.0;
-  prolongation[0](4,25) = 9.0/16.0;
-  prolongation[0](5,0) = 1.0/256.0;
-  prolongation[0](5,1) = 1.0/256.0;
-  prolongation[0](5,4) = 1.0/256.0;
-  prolongation[0](5,5) = 1.0/256.0;
-  prolongation[0](5,8) = -9.0/256.0;
-  prolongation[0](5,9) = -9.0/256.0;
-  prolongation[0](5,16) = -9.0/256.0;
-  prolongation[0](5,17) = -9.0/256.0;
-  prolongation[0](5,24) = -9.0/256.0;
-  prolongation[0](5,25) = -9.0/256.0;
-  prolongation[0](5,26) = -9.0/256.0;
-  prolongation[0](5,27) = -9.0/256.0;
-  prolongation[0](5,40) = 81.0/256.0;
-  prolongation[0](5,41) = 81.0/256.0;
-  prolongation[0](5,42) = 81.0/256.0;
-  prolongation[0](5,43) = 81.0/256.0;
-  prolongation[0](6,0) = -1.0/4096.0;
-  prolongation[0](6,1) = -1.0/4096.0;
-  prolongation[0](6,2) = -1.0/4096.0;
-  prolongation[0](6,3) = -1.0/4096.0;
-  prolongation[0](6,4) = -1.0/4096.0;
-  prolongation[0](6,5) = -1.0/4096.0;
-  prolongation[0](6,6) = -1.0/4096.0;
-  prolongation[0](6,7) = -1.0/4096.0;
-  prolongation[0](6,8) = 9.0/4096.0;
-  prolongation[0](6,9) = 9.0/4096.0;
-  prolongation[0](6,10) = 9.0/4096.0;
-  prolongation[0](6,11) = 9.0/4096.0;
-  prolongation[0](6,12) = 9.0/4096.0;
-  prolongation[0](6,13) = 9.0/4096.0;
-  prolongation[0](6,14) = 9.0/4096.0;
-  prolongation[0](6,15) = 9.0/4096.0;
-  prolongation[0](6,16) = 9.0/4096.0;
-  prolongation[0](6,17) = 9.0/4096.0;
-  prolongation[0](6,18) = 9.0/4096.0;
-  prolongation[0](6,19) = 9.0/4096.0;
-  prolongation[0](6,20) = 9.0/4096.0;
-  prolongation[0](6,21) = 9.0/4096.0;
-  prolongation[0](6,22) = 9.0/4096.0;
-  prolongation[0](6,23) = 9.0/4096.0;
-  prolongation[0](6,24) = 9.0/4096.0;
-  prolongation[0](6,25) = 9.0/4096.0;
-  prolongation[0](6,26) = 9.0/4096.0;
-  prolongation[0](6,27) = 9.0/4096.0;
-  prolongation[0](6,28) = 9.0/4096.0;
-  prolongation[0](6,29) = 9.0/4096.0;
-  prolongation[0](6,30) = 9.0/4096.0;
-  prolongation[0](6,31) = 9.0/4096.0;
-  prolongation[0](6,32) = -81.0/4096.0;
-  prolongation[0](6,33) = -81.0/4096.0;
-  prolongation[0](6,34) = -81.0/4096.0;
-  prolongation[0](6,35) = -81.0/4096.0;
-  prolongation[0](6,36) = -81.0/4096.0;
-  prolongation[0](6,37) = -81.0/4096.0;
-  prolongation[0](6,38) = -81.0/4096.0;
-  prolongation[0](6,39) = -81.0/4096.0;
-  prolongation[0](6,40) = -81.0/4096.0;
-  prolongation[0](6,41) = -81.0/4096.0;
-  prolongation[0](6,42) = -81.0/4096.0;
-  prolongation[0](6,43) = -81.0/4096.0;
-  prolongation[0](6,44) = -81.0/4096.0;
-  prolongation[0](6,45) = -81.0/4096.0;
-  prolongation[0](6,46) = -81.0/4096.0;
-  prolongation[0](6,47) = -81.0/4096.0;
-  prolongation[0](6,48) = -81.0/4096.0;
-  prolongation[0](6,49) = -81.0/4096.0;
-  prolongation[0](6,50) = -81.0/4096.0;
-  prolongation[0](6,51) = -81.0/4096.0;
-  prolongation[0](6,52) = -81.0/4096.0;
-  prolongation[0](6,53) = -81.0/4096.0;
-  prolongation[0](6,54) = -81.0/4096.0;
-  prolongation[0](6,55) = -81.0/4096.0;
-  prolongation[0](6,56) = 729.0/4096.0;
-  prolongation[0](6,57) = 729.0/4096.0;
-  prolongation[0](6,58) = 729.0/4096.0;
-  prolongation[0](6,59) = 729.0/4096.0;
-  prolongation[0](6,60) = 729.0/4096.0;
-  prolongation[0](6,61) = 729.0/4096.0;
-  prolongation[0](6,62) = 729.0/4096.0;
-  prolongation[0](6,63) = 729.0/4096.0;
-  prolongation[0](7,0) = 1.0/256.0;
-  prolongation[0](7,3) = 1.0/256.0;
-  prolongation[0](7,4) = 1.0/256.0;
-  prolongation[0](7,7) = 1.0/256.0;
-  prolongation[0](7,14) = -9.0/256.0;
-  prolongation[0](7,15) = -9.0/256.0;
-  prolongation[0](7,22) = -9.0/256.0;
-  prolongation[0](7,23) = -9.0/256.0;
-  prolongation[0](7,24) = -9.0/256.0;
-  prolongation[0](7,25) = -9.0/256.0;
-  prolongation[0](7,30) = -9.0/256.0;
-  prolongation[0](7,31) = -9.0/256.0;
-  prolongation[0](7,52) = 81.0/256.0;
-  prolongation[0](7,53) = 81.0/256.0;
-  prolongation[0](7,54) = 81.0/256.0;
-  prolongation[0](7,55) = 81.0/256.0;
-  prolongation[0](8,0) = 5.0/16.0;
-  prolongation[0](8,1) = 1.0/16.0;
-  prolongation[0](8,8) = 15.0/16.0;
-  prolongation[0](8,9) = -5.0/16.0;
-  prolongation[0](9,8) = 1.0;
-  prolongation[0](10,0) = -5.0/256.0;
-  prolongation[0](10,1) = -5.0/256.0;
-  prolongation[0](10,2) = -1.0/256.0;
-  prolongation[0](10,3) = -1.0/256.0;
-  prolongation[0](10,8) = 45.0/256.0;
-  prolongation[0](10,9) = 45.0/256.0;
-  prolongation[0](10,10) = -15.0/256.0;
-  prolongation[0](10,11) = 5.0/256.0;
-  prolongation[0](10,12) = 9.0/256.0;
-  prolongation[0](10,13) = 9.0/256.0;
-  prolongation[0](10,14) = -15.0/256.0;
-  prolongation[0](10,15) = 5.0/256.0;
-  prolongation[0](10,32) = 135.0/256.0;
-  prolongation[0](10,33) = 135.0/256.0;
-  prolongation[0](10,34) = -45.0/256.0;
-  prolongation[0](10,35) = -45.0/256.0;
-  prolongation[0](11,10) = -1.0/16.0;
-  prolongation[0](11,14) = -1.0/16.0;
-  prolongation[0](11,32) = 9.0/16.0;
-  prolongation[0](11,33) = 9.0/16.0;
-  prolongation[0](12,0) = -5.0/256.0;
-  prolongation[0](12,1) = -1.0/256.0;
-  prolongation[0](12,2) = -1.0/256.0;
-  prolongation[0](12,3) = -5.0/256.0;
-  prolongation[0](12,8) = -15.0/256.0;
-  prolongation[0](12,9) = 5.0/256.0;
-  prolongation[0](12,10) = 9.0/256.0;
-  prolongation[0](12,11) = 9.0/256.0;
-  prolongation[0](12,12) = -15.0/256.0;
-  prolongation[0](12,13) = 5.0/256.0;
-  prolongation[0](12,14) = 45.0/256.0;
-  prolongation[0](12,15) = 45.0/256.0;
-  prolongation[0](12,32) = 135.0/256.0;
-  prolongation[0](12,33) = -45.0/256.0;
-  prolongation[0](12,34) = 135.0/256.0;
-  prolongation[0](12,35) = -45.0/256.0;
-  prolongation[0](13,8) = -1.0/16.0;
-  prolongation[0](13,12) = -1.0/16.0;
-  prolongation[0](13,32) = 9.0/16.0;
-  prolongation[0](13,34) = 9.0/16.0;
-  prolongation[0](14,0) = 5.0/16.0;
-  prolongation[0](14,3) = 1.0/16.0;
-  prolongation[0](14,14) = 15.0/16.0;
-  prolongation[0](14,15) = -5.0/16.0;
-  prolongation[0](15,14) = 1.0;
-  prolongation[0](16,0) = -5.0/256.0;
-  prolongation[0](16,1) = -1.0/256.0;
-  prolongation[0](16,4) = -5.0/256.0;
-  prolongation[0](16,5) = -1.0/256.0;
-  prolongation[0](16,8) = -15.0/256.0;
-  prolongation[0](16,9) = 5.0/256.0;
-  prolongation[0](16,16) = -15.0/256.0;
-  prolongation[0](16,17) = 5.0/256.0;
-  prolongation[0](16,24) = 45.0/256.0;
-  prolongation[0](16,25) = 45.0/256.0;
-  prolongation[0](16,26) = 9.0/256.0;
-  prolongation[0](16,27) = 9.0/256.0;
-  prolongation[0](16,40) = 135.0/256.0;
-  prolongation[0](16,41) = -45.0/256.0;
-  prolongation[0](16,42) = 135.0/256.0;
-  prolongation[0](16,43) = -45.0/256.0;
-  prolongation[0](17,8) = -1.0/16.0;
-  prolongation[0](17,16) = -1.0/16.0;
-  prolongation[0](17,40) = 9.0/16.0;
-  prolongation[0](17,42) = 9.0/16.0;
-  prolongation[0](18,0) = 5.0/4096.0;
-  prolongation[0](18,1) = 5.0/4096.0;
-  prolongation[0](18,2) = 1.0/4096.0;
-  prolongation[0](18,3) = 1.0/4096.0;
-  prolongation[0](18,4) = 5.0/4096.0;
-  prolongation[0](18,5) = 5.0/4096.0;
-  prolongation[0](18,6) = 1.0/4096.0;
-  prolongation[0](18,7) = 1.0/4096.0;
-  prolongation[0](18,8) = -45.0/4096.0;
-  prolongation[0](18,9) = -45.0/4096.0;
-  prolongation[0](18,10) = 15.0/4096.0;
-  prolongation[0](18,11) = -5.0/4096.0;
-  prolongation[0](18,12) = -9.0/4096.0;
-  prolongation[0](18,13) = -9.0/4096.0;
-  prolongation[0](18,14) = 15.0/4096.0;
-  prolongation[0](18,15) = -5.0/4096.0;
-  prolongation[0](18,16) = -45.0/4096.0;
-  prolongation[0](18,17) = -45.0/4096.0;
-  prolongation[0](18,18) = 15.0/4096.0;
-  prolongation[0](18,19) = -5.0/4096.0;
-  prolongation[0](18,20) = -9.0/4096.0;
-  prolongation[0](18,21) = -9.0/4096.0;
-  prolongation[0](18,22) = 15.0/4096.0;
-  prolongation[0](18,23) = -5.0/4096.0;
-  prolongation[0](18,24) = -45.0/4096.0;
-  prolongation[0](18,25) = -45.0/4096.0;
-  prolongation[0](18,26) = -45.0/4096.0;
-  prolongation[0](18,27) = -45.0/4096.0;
-  prolongation[0](18,28) = -9.0/4096.0;
-  prolongation[0](18,29) = -9.0/4096.0;
-  prolongation[0](18,30) = -9.0/4096.0;
-  prolongation[0](18,31) = -9.0/4096.0;
-  prolongation[0](18,32) = -135.0/4096.0;
-  prolongation[0](18,33) = -135.0/4096.0;
-  prolongation[0](18,34) = 45.0/4096.0;
-  prolongation[0](18,35) = 45.0/4096.0;
-  prolongation[0](18,36) = -135.0/4096.0;
-  prolongation[0](18,37) = -135.0/4096.0;
-  prolongation[0](18,38) = 45.0/4096.0;
-  prolongation[0](18,39) = 45.0/4096.0;
-  prolongation[0](18,40) = 405.0/4096.0;
-  prolongation[0](18,41) = 405.0/4096.0;
-  prolongation[0](18,42) = 405.0/4096.0;
-  prolongation[0](18,43) = 405.0/4096.0;
-  prolongation[0](18,44) = -135.0/4096.0;
-  prolongation[0](18,45) = -135.0/4096.0;
-  prolongation[0](18,46) = 45.0/4096.0;
-  prolongation[0](18,47) = 45.0/4096.0;
-  prolongation[0](18,48) = 81.0/4096.0;
-  prolongation[0](18,49) = 81.0/4096.0;
-  prolongation[0](18,50) = 81.0/4096.0;
-  prolongation[0](18,51) = 81.0/4096.0;
-  prolongation[0](18,52) = -135.0/4096.0;
-  prolongation[0](18,53) = -135.0/4096.0;
-  prolongation[0](18,54) = 45.0/4096.0;
-  prolongation[0](18,55) = 45.0/4096.0;
-  prolongation[0](18,56) = 1215.0/4096.0;
-  prolongation[0](18,57) = 1215.0/4096.0;
-  prolongation[0](18,58) = 1215.0/4096.0;
-  prolongation[0](18,59) = 1215.0/4096.0;
-  prolongation[0](18,60) = -405.0/4096.0;
-  prolongation[0](18,61) = -405.0/4096.0;
-  prolongation[0](18,62) = -405.0/4096.0;
-  prolongation[0](18,63) = -405.0/4096.0;
-  prolongation[0](19,10) = 1.0/256.0;
-  prolongation[0](19,14) = 1.0/256.0;
-  prolongation[0](19,18) = 1.0/256.0;
-  prolongation[0](19,22) = 1.0/256.0;
-  prolongation[0](19,32) = -9.0/256.0;
-  prolongation[0](19,33) = -9.0/256.0;
-  prolongation[0](19,36) = -9.0/256.0;
-  prolongation[0](19,37) = -9.0/256.0;
-  prolongation[0](19,44) = -9.0/256.0;
-  prolongation[0](19,45) = -9.0/256.0;
-  prolongation[0](19,52) = -9.0/256.0;
-  prolongation[0](19,53) = -9.0/256.0;
-  prolongation[0](19,56) = 81.0/256.0;
-  prolongation[0](19,57) = 81.0/256.0;
-  prolongation[0](19,58) = 81.0/256.0;
-  prolongation[0](19,59) = 81.0/256.0;
-  prolongation[0](20,0) = 5.0/4096.0;
-  prolongation[0](20,1) = 1.0/4096.0;
-  prolongation[0](20,2) = 1.0/4096.0;
-  prolongation[0](20,3) = 5.0/4096.0;
-  prolongation[0](20,4) = 5.0/4096.0;
-  prolongation[0](20,5) = 1.0/4096.0;
-  prolongation[0](20,6) = 1.0/4096.0;
-  prolongation[0](20,7) = 5.0/4096.0;
-  prolongation[0](20,8) = 15.0/4096.0;
-  prolongation[0](20,9) = -5.0/4096.0;
-  prolongation[0](20,10) = -9.0/4096.0;
-  prolongation[0](20,11) = -9.0/4096.0;
-  prolongation[0](20,12) = 15.0/4096.0;
-  prolongation[0](20,13) = -5.0/4096.0;
-  prolongation[0](20,14) = -45.0/4096.0;
-  prolongation[0](20,15) = -45.0/4096.0;
-  prolongation[0](20,16) = 15.0/4096.0;
-  prolongation[0](20,17) = -5.0/4096.0;
-  prolongation[0](20,18) = -9.0/4096.0;
-  prolongation[0](20,19) = -9.0/4096.0;
-  prolongation[0](20,20) = 15.0/4096.0;
-  prolongation[0](20,21) = -5.0/4096.0;
-  prolongation[0](20,22) = -45.0/4096.0;
-  prolongation[0](20,23) = -45.0/4096.0;
-  prolongation[0](20,24) = -45.0/4096.0;
-  prolongation[0](20,25) = -45.0/4096.0;
-  prolongation[0](20,26) = -9.0/4096.0;
-  prolongation[0](20,27) = -9.0/4096.0;
-  prolongation[0](20,28) = -9.0/4096.0;
-  prolongation[0](20,29) = -9.0/4096.0;
-  prolongation[0](20,30) = -45.0/4096.0;
-  prolongation[0](20,31) = -45.0/4096.0;
-  prolongation[0](20,32) = -135.0/4096.0;
-  prolongation[0](20,33) = 45.0/4096.0;
-  prolongation[0](20,34) = -135.0/4096.0;
-  prolongation[0](20,35) = 45.0/4096.0;
-  prolongation[0](20,36) = -135.0/4096.0;
-  prolongation[0](20,37) = 45.0/4096.0;
-  prolongation[0](20,38) = -135.0/4096.0;
-  prolongation[0](20,39) = 45.0/4096.0;
-  prolongation[0](20,40) = -135.0/4096.0;
-  prolongation[0](20,41) = 45.0/4096.0;
-  prolongation[0](20,42) = -135.0/4096.0;
-  prolongation[0](20,43) = 45.0/4096.0;
-  prolongation[0](20,44) = 81.0/4096.0;
-  prolongation[0](20,45) = 81.0/4096.0;
-  prolongation[0](20,46) = 81.0/4096.0;
-  prolongation[0](20,47) = 81.0/4096.0;
-  prolongation[0](20,48) = -135.0/4096.0;
-  prolongation[0](20,49) = 45.0/4096.0;
-  prolongation[0](20,50) = -135.0/4096.0;
-  prolongation[0](20,51) = 45.0/4096.0;
-  prolongation[0](20,52) = 405.0/4096.0;
-  prolongation[0](20,53) = 405.0/4096.0;
-  prolongation[0](20,54) = 405.0/4096.0;
-  prolongation[0](20,55) = 405.0/4096.0;
-  prolongation[0](20,56) = 1215.0/4096.0;
-  prolongation[0](20,57) = -405.0/4096.0;
-  prolongation[0](20,58) = 1215.0/4096.0;
-  prolongation[0](20,59) = -405.0/4096.0;
-  prolongation[0](20,60) = 1215.0/4096.0;
-  prolongation[0](20,61) = -405.0/4096.0;
-  prolongation[0](20,62) = 1215.0/4096.0;
-  prolongation[0](20,63) = -405.0/4096.0;
-  prolongation[0](21,8) = 1.0/256.0;
-  prolongation[0](21,12) = 1.0/256.0;
-  prolongation[0](21,16) = 1.0/256.0;
-  prolongation[0](21,20) = 1.0/256.0;
-  prolongation[0](21,32) = -9.0/256.0;
-  prolongation[0](21,34) = -9.0/256.0;
-  prolongation[0](21,36) = -9.0/256.0;
-  prolongation[0](21,38) = -9.0/256.0;
-  prolongation[0](21,40) = -9.0/256.0;
-  prolongation[0](21,42) = -9.0/256.0;
-  prolongation[0](21,48) = -9.0/256.0;
-  prolongation[0](21,50) = -9.0/256.0;
-  prolongation[0](21,56) = 81.0/256.0;
-  prolongation[0](21,58) = 81.0/256.0;
-  prolongation[0](21,60) = 81.0/256.0;
-  prolongation[0](21,62) = 81.0/256.0;
-  prolongation[0](22,0) = -5.0/256.0;
-  prolongation[0](22,3) = -1.0/256.0;
-  prolongation[0](22,4) = -5.0/256.0;
-  prolongation[0](22,7) = -1.0/256.0;
-  prolongation[0](22,14) = -15.0/256.0;
-  prolongation[0](22,15) = 5.0/256.0;
-  prolongation[0](22,22) = -15.0/256.0;
-  prolongation[0](22,23) = 5.0/256.0;
-  prolongation[0](22,24) = 45.0/256.0;
-  prolongation[0](22,25) = 45.0/256.0;
-  prolongation[0](22,30) = 9.0/256.0;
-  prolongation[0](22,31) = 9.0/256.0;
-  prolongation[0](22,52) = 135.0/256.0;
-  prolongation[0](22,53) = 135.0/256.0;
-  prolongation[0](22,54) = -45.0/256.0;
-  prolongation[0](22,55) = -45.0/256.0;
-  prolongation[0](23,14) = -1.0/16.0;
-  prolongation[0](23,22) = -1.0/16.0;
-  prolongation[0](23,52) = 9.0/16.0;
-  prolongation[0](23,53) = 9.0/16.0;
-  prolongation[0](24,0) = 5.0/16.0;
-  prolongation[0](24,4) = 1.0/16.0;
-  prolongation[0](24,24) = 15.0/16.0;
-  prolongation[0](24,25) = -5.0/16.0;
-  prolongation[0](25,24) = 1.0;
-  prolongation[0](26,0) = -5.0/256.0;
-  prolongation[0](26,1) = -5.0/256.0;
-  prolongation[0](26,4) = -1.0/256.0;
-  prolongation[0](26,5) = -1.0/256.0;
-  prolongation[0](26,8) = 45.0/256.0;
-  prolongation[0](26,9) = 45.0/256.0;
-  prolongation[0](26,16) = 9.0/256.0;
-  prolongation[0](26,17) = 9.0/256.0;
-  prolongation[0](26,24) = -15.0/256.0;
-  prolongation[0](26,25) = 5.0/256.0;
-  prolongation[0](26,26) = -15.0/256.0;
-  prolongation[0](26,27) = 5.0/256.0;
-  prolongation[0](26,40) = 135.0/256.0;
-  prolongation[0](26,41) = 135.0/256.0;
-  prolongation[0](26,42) = -45.0/256.0;
-  prolongation[0](26,43) = -45.0/256.0;
-  prolongation[0](27,24) = -1.0/16.0;
-  prolongation[0](27,26) = -1.0/16.0;
-  prolongation[0](27,40) = 9.0/16.0;
-  prolongation[0](27,41) = 9.0/16.0;
-  prolongation[0](28,0) = 5.0/4096.0;
-  prolongation[0](28,1) = 5.0/4096.0;
-  prolongation[0](28,2) = 5.0/4096.0;
-  prolongation[0](28,3) = 5.0/4096.0;
-  prolongation[0](28,4) = 1.0/4096.0;
-  prolongation[0](28,5) = 1.0/4096.0;
-  prolongation[0](28,6) = 1.0/4096.0;
-  prolongation[0](28,7) = 1.0/4096.0;
-  prolongation[0](28,8) = -45.0/4096.0;
-  prolongation[0](28,9) = -45.0/4096.0;
-  prolongation[0](28,10) = -45.0/4096.0;
-  prolongation[0](28,11) = -45.0/4096.0;
-  prolongation[0](28,12) = -45.0/4096.0;
-  prolongation[0](28,13) = -45.0/4096.0;
-  prolongation[0](28,14) = -45.0/4096.0;
-  prolongation[0](28,15) = -45.0/4096.0;
-  prolongation[0](28,16) = -9.0/4096.0;
-  prolongation[0](28,17) = -9.0/4096.0;
-  prolongation[0](28,18) = -9.0/4096.0;
-  prolongation[0](28,19) = -9.0/4096.0;
-  prolongation[0](28,20) = -9.0/4096.0;
-  prolongation[0](28,21) = -9.0/4096.0;
-  prolongation[0](28,22) = -9.0/4096.0;
-  prolongation[0](28,23) = -9.0/4096.0;
-  prolongation[0](28,24) = 15.0/4096.0;
-  prolongation[0](28,25) = -5.0/4096.0;
-  prolongation[0](28,26) = 15.0/4096.0;
-  prolongation[0](28,27) = -5.0/4096.0;
-  prolongation[0](28,28) = 15.0/4096.0;
-  prolongation[0](28,29) = -5.0/4096.0;
-  prolongation[0](28,30) = 15.0/4096.0;
-  prolongation[0](28,31) = -5.0/4096.0;
-  prolongation[0](28,32) = 405.0/4096.0;
-  prolongation[0](28,33) = 405.0/4096.0;
-  prolongation[0](28,34) = 405.0/4096.0;
-  prolongation[0](28,35) = 405.0/4096.0;
-  prolongation[0](28,36) = 81.0/4096.0;
-  prolongation[0](28,37) = 81.0/4096.0;
-  prolongation[0](28,38) = 81.0/4096.0;
-  prolongation[0](28,39) = 81.0/4096.0;
-  prolongation[0](28,40) = -135.0/4096.0;
-  prolongation[0](28,41) = -135.0/4096.0;
-  prolongation[0](28,42) = 45.0/4096.0;
-  prolongation[0](28,43) = 45.0/4096.0;
-  prolongation[0](28,44) = -135.0/4096.0;
-  prolongation[0](28,45) = 45.0/4096.0;
-  prolongation[0](28,46) = -135.0/4096.0;
-  prolongation[0](28,47) = 45.0/4096.0;
-  prolongation[0](28,48) = -135.0/4096.0;
-  prolongation[0](28,49) = -135.0/4096.0;
-  prolongation[0](28,50) = 45.0/4096.0;
-  prolongation[0](28,51) = 45.0/4096.0;
-  prolongation[0](28,52) = -135.0/4096.0;
-  prolongation[0](28,53) = 45.0/4096.0;
-  prolongation[0](28,54) = -135.0/4096.0;
-  prolongation[0](28,55) = 45.0/4096.0;
-  prolongation[0](28,56) = 1215.0/4096.0;
-  prolongation[0](28,57) = 1215.0/4096.0;
-  prolongation[0](28,58) = -405.0/4096.0;
-  prolongation[0](28,59) = -405.0/4096.0;
-  prolongation[0](28,60) = 1215.0/4096.0;
-  prolongation[0](28,61) = 1215.0/4096.0;
-  prolongation[0](28,62) = -405.0/4096.0;
-  prolongation[0](28,63) = -405.0/4096.0;
-  prolongation[0](29,24) = 1.0/256.0;
-  prolongation[0](29,26) = 1.0/256.0;
-  prolongation[0](29,28) = 1.0/256.0;
-  prolongation[0](29,30) = 1.0/256.0;
-  prolongation[0](29,40) = -9.0/256.0;
-  prolongation[0](29,41) = -9.0/256.0;
-  prolongation[0](29,44) = -9.0/256.0;
-  prolongation[0](29,46) = -9.0/256.0;
-  prolongation[0](29,48) = -9.0/256.0;
-  prolongation[0](29,49) = -9.0/256.0;
-  prolongation[0](29,52) = -9.0/256.0;
-  prolongation[0](29,54) = -9.0/256.0;
-  prolongation[0](29,56) = 81.0/256.0;
-  prolongation[0](29,57) = 81.0/256.0;
-  prolongation[0](29,60) = 81.0/256.0;
-  prolongation[0](29,61) = 81.0/256.0;
-  prolongation[0](30,0) = -5.0/256.0;
-  prolongation[0](30,3) = -5.0/256.0;
-  prolongation[0](30,4) = -1.0/256.0;
-  prolongation[0](30,7) = -1.0/256.0;
-  prolongation[0](30,14) = 45.0/256.0;
-  prolongation[0](30,15) = 45.0/256.0;
-  prolongation[0](30,22) = 9.0/256.0;
-  prolongation[0](30,23) = 9.0/256.0;
-  prolongation[0](30,24) = -15.0/256.0;
-  prolongation[0](30,25) = 5.0/256.0;
-  prolongation[0](30,30) = -15.0/256.0;
-  prolongation[0](30,31) = 5.0/256.0;
-  prolongation[0](30,52) = 135.0/256.0;
-  prolongation[0](30,53) = -45.0/256.0;
-  prolongation[0](30,54) = 135.0/256.0;
-  prolongation[0](30,55) = -45.0/256.0;
-  prolongation[0](31,24) = -1.0/16.0;
-  prolongation[0](31,30) = -1.0/16.0;
-  prolongation[0](31,52) = 9.0/16.0;
-  prolongation[0](31,54) = 9.0/16.0;
-  prolongation[0](32,0) = 25.0/256.0;
-  prolongation[0](32,1) = 5.0/256.0;
-  prolongation[0](32,2) = 1.0/256.0;
-  prolongation[0](32,3) = 5.0/256.0;
-  prolongation[0](32,8) = 75.0/256.0;
-  prolongation[0](32,9) = -25.0/256.0;
-  prolongation[0](32,10) = 15.0/256.0;
-  prolongation[0](32,11) = -5.0/256.0;
-  prolongation[0](32,12) = 15.0/256.0;
-  prolongation[0](32,13) = -5.0/256.0;
-  prolongation[0](32,14) = 75.0/256.0;
-  prolongation[0](32,15) = -25.0/256.0;
-  prolongation[0](32,32) = 225.0/256.0;
-  prolongation[0](32,33) = -75.0/256.0;
-  prolongation[0](32,34) = -75.0/256.0;
-  prolongation[0](32,35) = 25.0/256.0;
-  prolongation[0](33,8) = 5.0/16.0;
-  prolongation[0](33,12) = 1.0/16.0;
-  prolongation[0](33,32) = 15.0/16.0;
-  prolongation[0](33,34) = -5.0/16.0;
-  prolongation[0](34,10) = 1.0/16.0;
-  prolongation[0](34,14) = 5.0/16.0;
-  prolongation[0](34,32) = 15.0/16.0;
-  prolongation[0](34,33) = -5.0/16.0;
-  prolongation[0](35,32) = 1.0;
-  prolongation[0](36,0) = -25.0/4096.0;
-  prolongation[0](36,1) = -5.0/4096.0;
-  prolongation[0](36,2) = -1.0/4096.0;
-  prolongation[0](36,3) = -5.0/4096.0;
-  prolongation[0](36,4) = -25.0/4096.0;
-  prolongation[0](36,5) = -5.0/4096.0;
-  prolongation[0](36,6) = -1.0/4096.0;
-  prolongation[0](36,7) = -5.0/4096.0;
-  prolongation[0](36,8) = -75.0/4096.0;
-  prolongation[0](36,9) = 25.0/4096.0;
-  prolongation[0](36,10) = -15.0/4096.0;
-  prolongation[0](36,11) = 5.0/4096.0;
-  prolongation[0](36,12) = -15.0/4096.0;
-  prolongation[0](36,13) = 5.0/4096.0;
-  prolongation[0](36,14) = -75.0/4096.0;
-  prolongation[0](36,15) = 25.0/4096.0;
-  prolongation[0](36,16) = -75.0/4096.0;
-  prolongation[0](36,17) = 25.0/4096.0;
-  prolongation[0](36,18) = -15.0/4096.0;
-  prolongation[0](36,19) = 5.0/4096.0;
-  prolongation[0](36,20) = -15.0/4096.0;
-  prolongation[0](36,21) = 5.0/4096.0;
-  prolongation[0](36,22) = -75.0/4096.0;
-  prolongation[0](36,23) = 25.0/4096.0;
-  prolongation[0](36,24) = 225.0/4096.0;
-  prolongation[0](36,25) = 225.0/4096.0;
-  prolongation[0](36,26) = 45.0/4096.0;
-  prolongation[0](36,27) = 45.0/4096.0;
-  prolongation[0](36,28) = 9.0/4096.0;
-  prolongation[0](36,29) = 9.0/4096.0;
-  prolongation[0](36,30) = 45.0/4096.0;
-  prolongation[0](36,31) = 45.0/4096.0;
-  prolongation[0](36,32) = -225.0/4096.0;
-  prolongation[0](36,33) = 75.0/4096.0;
-  prolongation[0](36,34) = 75.0/4096.0;
-  prolongation[0](36,35) = -25.0/4096.0;
-  prolongation[0](36,36) = -225.0/4096.0;
-  prolongation[0](36,37) = 75.0/4096.0;
-  prolongation[0](36,38) = 75.0/4096.0;
-  prolongation[0](36,39) = -25.0/4096.0;
-  prolongation[0](36,40) = 675.0/4096.0;
-  prolongation[0](36,41) = -225.0/4096.0;
-  prolongation[0](36,42) = 675.0/4096.0;
-  prolongation[0](36,43) = -225.0/4096.0;
-  prolongation[0](36,44) = 135.0/4096.0;
-  prolongation[0](36,45) = 135.0/4096.0;
-  prolongation[0](36,46) = -45.0/4096.0;
-  prolongation[0](36,47) = -45.0/4096.0;
-  prolongation[0](36,48) = 135.0/4096.0;
-  prolongation[0](36,49) = -45.0/4096.0;
-  prolongation[0](36,50) = 135.0/4096.0;
-  prolongation[0](36,51) = -45.0/4096.0;
-  prolongation[0](36,52) = 675.0/4096.0;
-  prolongation[0](36,53) = 675.0/4096.0;
-  prolongation[0](36,54) = -225.0/4096.0;
-  prolongation[0](36,55) = -225.0/4096.0;
-  prolongation[0](36,56) = 2025.0/4096.0;
-  prolongation[0](36,57) = -675.0/4096.0;
-  prolongation[0](36,58) = 2025.0/4096.0;
-  prolongation[0](36,59) = -675.0/4096.0;
-  prolongation[0](36,60) = -675.0/4096.0;
-  prolongation[0](36,61) = 225.0/4096.0;
-  prolongation[0](36,62) = -675.0/4096.0;
-  prolongation[0](36,63) = 225.0/4096.0;
-  prolongation[0](37,8) = -5.0/256.0;
-  prolongation[0](37,12) = -1.0/256.0;
-  prolongation[0](37,16) = -5.0/256.0;
-  prolongation[0](37,20) = -1.0/256.0;
-  prolongation[0](37,32) = -15.0/256.0;
-  prolongation[0](37,34) = 5.0/256.0;
-  prolongation[0](37,36) = -15.0/256.0;
-  prolongation[0](37,38) = 5.0/256.0;
-  prolongation[0](37,40) = 45.0/256.0;
-  prolongation[0](37,42) = 45.0/256.0;
-  prolongation[0](37,48) = 9.0/256.0;
-  prolongation[0](37,50) = 9.0/256.0;
-  prolongation[0](37,56) = 135.0/256.0;
-  prolongation[0](37,58) = 135.0/256.0;
-  prolongation[0](37,60) = -45.0/256.0;
-  prolongation[0](37,62) = -45.0/256.0;
-  prolongation[0](38,10) = -1.0/256.0;
-  prolongation[0](38,14) = -5.0/256.0;
-  prolongation[0](38,18) = -1.0/256.0;
-  prolongation[0](38,22) = -5.0/256.0;
-  prolongation[0](38,32) = -15.0/256.0;
-  prolongation[0](38,33) = 5.0/256.0;
-  prolongation[0](38,36) = -15.0/256.0;
-  prolongation[0](38,37) = 5.0/256.0;
-  prolongation[0](38,44) = 9.0/256.0;
-  prolongation[0](38,45) = 9.0/256.0;
-  prolongation[0](38,52) = 45.0/256.0;
-  prolongation[0](38,53) = 45.0/256.0;
-  prolongation[0](38,56) = 135.0/256.0;
-  prolongation[0](38,57) = -45.0/256.0;
-  prolongation[0](38,58) = 135.0/256.0;
-  prolongation[0](38,59) = -45.0/256.0;
-  prolongation[0](39,32) = -1.0/16.0;
-  prolongation[0](39,36) = -1.0/16.0;
-  prolongation[0](39,56) = 9.0/16.0;
-  prolongation[0](39,58) = 9.0/16.0;
-  prolongation[0](40,0) = 25.0/256.0;
-  prolongation[0](40,1) = 5.0/256.0;
-  prolongation[0](40,4) = 5.0/256.0;
-  prolongation[0](40,5) = 1.0/256.0;
-  prolongation[0](40,8) = 75.0/256.0;
-  prolongation[0](40,9) = -25.0/256.0;
-  prolongation[0](40,16) = 15.0/256.0;
-  prolongation[0](40,17) = -5.0/256.0;
-  prolongation[0](40,24) = 75.0/256.0;
-  prolongation[0](40,25) = -25.0/256.0;
-  prolongation[0](40,26) = 15.0/256.0;
-  prolongation[0](40,27) = -5.0/256.0;
-  prolongation[0](40,40) = 225.0/256.0;
-  prolongation[0](40,41) = -75.0/256.0;
-  prolongation[0](40,42) = -75.0/256.0;
-  prolongation[0](40,43) = 25.0/256.0;
-  prolongation[0](41,8) = 5.0/16.0;
-  prolongation[0](41,16) = 1.0/16.0;
-  prolongation[0](41,40) = 15.0/16.0;
-  prolongation[0](41,42) = -5.0/16.0;
-  prolongation[0](42,24) = 5.0/16.0;
-  prolongation[0](42,26) = 1.0/16.0;
-  prolongation[0](42,40) = 15.0/16.0;
-  prolongation[0](42,41) = -5.0/16.0;
-  prolongation[0](43,40) = 1.0;
-  prolongation[0](44,0) = -25.0/4096.0;
-  prolongation[0](44,1) = -25.0/4096.0;
-  prolongation[0](44,2) = -5.0/4096.0;
-  prolongation[0](44,3) = -5.0/4096.0;
-  prolongation[0](44,4) = -5.0/4096.0;
-  prolongation[0](44,5) = -5.0/4096.0;
-  prolongation[0](44,6) = -1.0/4096.0;
-  prolongation[0](44,7) = -1.0/4096.0;
-  prolongation[0](44,8) = 225.0/4096.0;
-  prolongation[0](44,9) = 225.0/4096.0;
-  prolongation[0](44,10) = -75.0/4096.0;
-  prolongation[0](44,11) = 25.0/4096.0;
-  prolongation[0](44,12) = 45.0/4096.0;
-  prolongation[0](44,13) = 45.0/4096.0;
-  prolongation[0](44,14) = -75.0/4096.0;
-  prolongation[0](44,15) = 25.0/4096.0;
-  prolongation[0](44,16) = 45.0/4096.0;
-  prolongation[0](44,17) = 45.0/4096.0;
-  prolongation[0](44,18) = -15.0/4096.0;
-  prolongation[0](44,19) = 5.0/4096.0;
-  prolongation[0](44,20) = 9.0/4096.0;
-  prolongation[0](44,21) = 9.0/4096.0;
-  prolongation[0](44,22) = -15.0/4096.0;
-  prolongation[0](44,23) = 5.0/4096.0;
-  prolongation[0](44,24) = -75.0/4096.0;
-  prolongation[0](44,25) = 25.0/4096.0;
-  prolongation[0](44,26) = -75.0/4096.0;
-  prolongation[0](44,27) = 25.0/4096.0;
-  prolongation[0](44,28) = -15.0/4096.0;
-  prolongation[0](44,29) = 5.0/4096.0;
-  prolongation[0](44,30) = -15.0/4096.0;
-  prolongation[0](44,31) = 5.0/4096.0;
-  prolongation[0](44,32) = 675.0/4096.0;
-  prolongation[0](44,33) = 675.0/4096.0;
-  prolongation[0](44,34) = -225.0/4096.0;
-  prolongation[0](44,35) = -225.0/4096.0;
-  prolongation[0](44,36) = 135.0/4096.0;
-  prolongation[0](44,37) = 135.0/4096.0;
-  prolongation[0](44,38) = -45.0/4096.0;
-  prolongation[0](44,39) = -45.0/4096.0;
-  prolongation[0](44,40) = 675.0/4096.0;
-  prolongation[0](44,41) = 675.0/4096.0;
-  prolongation[0](44,42) = -225.0/4096.0;
-  prolongation[0](44,43) = -225.0/4096.0;
-  prolongation[0](44,44) = -225.0/4096.0;
-  prolongation[0](44,45) = 75.0/4096.0;
-  prolongation[0](44,46) = 75.0/4096.0;
-  prolongation[0](44,47) = -25.0/4096.0;
-  prolongation[0](44,48) = 135.0/4096.0;
-  prolongation[0](44,49) = 135.0/4096.0;
-  prolongation[0](44,50) = -45.0/4096.0;
-  prolongation[0](44,51) = -45.0/4096.0;
-  prolongation[0](44,52) = -225.0/4096.0;
-  prolongation[0](44,53) = 75.0/4096.0;
-  prolongation[0](44,54) = 75.0/4096.0;
-  prolongation[0](44,55) = -25.0/4096.0;
-  prolongation[0](44,56) = 2025.0/4096.0;
-  prolongation[0](44,57) = 2025.0/4096.0;
-  prolongation[0](44,58) = -675.0/4096.0;
-  prolongation[0](44,59) = -675.0/4096.0;
-  prolongation[0](44,60) = -675.0/4096.0;
-  prolongation[0](44,61) = -675.0/4096.0;
-  prolongation[0](44,62) = 225.0/4096.0;
-  prolongation[0](44,63) = 225.0/4096.0;
-  prolongation[0](45,24) = -5.0/256.0;
-  prolongation[0](45,26) = -5.0/256.0;
-  prolongation[0](45,28) = -1.0/256.0;
-  prolongation[0](45,30) = -1.0/256.0;
-  prolongation[0](45,40) = 45.0/256.0;
-  prolongation[0](45,41) = 45.0/256.0;
-  prolongation[0](45,44) = -15.0/256.0;
-  prolongation[0](45,46) = 5.0/256.0;
-  prolongation[0](45,48) = 9.0/256.0;
-  prolongation[0](45,49) = 9.0/256.0;
-  prolongation[0](45,52) = -15.0/256.0;
-  prolongation[0](45,54) = 5.0/256.0;
-  prolongation[0](45,56) = 135.0/256.0;
-  prolongation[0](45,57) = 135.0/256.0;
-  prolongation[0](45,60) = -45.0/256.0;
-  prolongation[0](45,61) = -45.0/256.0;
-  prolongation[0](46,10) = -5.0/256.0;
-  prolongation[0](46,14) = -5.0/256.0;
-  prolongation[0](46,18) = -1.0/256.0;
-  prolongation[0](46,22) = -1.0/256.0;
-  prolongation[0](46,32) = 45.0/256.0;
-  prolongation[0](46,33) = 45.0/256.0;
-  prolongation[0](46,36) = 9.0/256.0;
-  prolongation[0](46,37) = 9.0/256.0;
-  prolongation[0](46,44) = -15.0/256.0;
-  prolongation[0](46,45) = 5.0/256.0;
-  prolongation[0](46,52) = -15.0/256.0;
-  prolongation[0](46,53) = 5.0/256.0;
-  prolongation[0](46,56) = 135.0/256.0;
-  prolongation[0](46,57) = 135.0/256.0;
-  prolongation[0](46,58) = -45.0/256.0;
-  prolongation[0](46,59) = -45.0/256.0;
-  prolongation[0](47,44) = -1.0/16.0;
-  prolongation[0](47,52) = -1.0/16.0;
-  prolongation[0](47,56) = 9.0/16.0;
-  prolongation[0](47,57) = 9.0/16.0;
-  prolongation[0](48,0) = -25.0/4096.0;
-  prolongation[0](48,1) = -5.0/4096.0;
-  prolongation[0](48,2) = -5.0/4096.0;
-  prolongation[0](48,3) = -25.0/4096.0;
-  prolongation[0](48,4) = -5.0/4096.0;
-  prolongation[0](48,5) = -1.0/4096.0;
-  prolongation[0](48,6) = -1.0/4096.0;
-  prolongation[0](48,7) = -5.0/4096.0;
-  prolongation[0](48,8) = -75.0/4096.0;
-  prolongation[0](48,9) = 25.0/4096.0;
-  prolongation[0](48,10) = 45.0/4096.0;
-  prolongation[0](48,11) = 45.0/4096.0;
-  prolongation[0](48,12) = -75.0/4096.0;
-  prolongation[0](48,13) = 25.0/4096.0;
-  prolongation[0](48,14) = 225.0/4096.0;
-  prolongation[0](48,15) = 225.0/4096.0;
-  prolongation[0](48,16) = -15.0/4096.0;
-  prolongation[0](48,17) = 5.0/4096.0;
-  prolongation[0](48,18) = 9.0/4096.0;
-  prolongation[0](48,19) = 9.0/4096.0;
-  prolongation[0](48,20) = -15.0/4096.0;
-  prolongation[0](48,21) = 5.0/4096.0;
-  prolongation[0](48,22) = 45.0/4096.0;
-  prolongation[0](48,23) = 45.0/4096.0;
-  prolongation[0](48,24) = -75.0/4096.0;
-  prolongation[0](48,25) = 25.0/4096.0;
-  prolongation[0](48,26) = -15.0/4096.0;
-  prolongation[0](48,27) = 5.0/4096.0;
-  prolongation[0](48,28) = -15.0/4096.0;
-  prolongation[0](48,29) = 5.0/4096.0;
-  prolongation[0](48,30) = -75.0/4096.0;
-  prolongation[0](48,31) = 25.0/4096.0;
-  prolongation[0](48,32) = 675.0/4096.0;
-  prolongation[0](48,33) = -225.0/4096.0;
-  prolongation[0](48,34) = 675.0/4096.0;
-  prolongation[0](48,35) = -225.0/4096.0;
-  prolongation[0](48,36) = 135.0/4096.0;
-  prolongation[0](48,37) = -45.0/4096.0;
-  prolongation[0](48,38) = 135.0/4096.0;
-  prolongation[0](48,39) = -45.0/4096.0;
-  prolongation[0](48,40) = -225.0/4096.0;
-  prolongation[0](48,41) = 75.0/4096.0;
-  prolongation[0](48,42) = 75.0/4096.0;
-  prolongation[0](48,43) = -25.0/4096.0;
-  prolongation[0](48,44) = 135.0/4096.0;
-  prolongation[0](48,45) = -45.0/4096.0;
-  prolongation[0](48,46) = 135.0/4096.0;
-  prolongation[0](48,47) = -45.0/4096.0;
-  prolongation[0](48,48) = -225.0/4096.0;
-  prolongation[0](48,49) = 75.0/4096.0;
-  prolongation[0](48,50) = 75.0/4096.0;
-  prolongation[0](48,51) = -25.0/4096.0;
-  prolongation[0](48,52) = 675.0/4096.0;
-  prolongation[0](48,53) = -225.0/4096.0;
-  prolongation[0](48,54) = 675.0/4096.0;
-  prolongation[0](48,55) = -225.0/4096.0;
-  prolongation[0](48,56) = 2025.0/4096.0;
-  prolongation[0](48,57) = -675.0/4096.0;
-  prolongation[0](48,58) = -675.0/4096.0;
-  prolongation[0](48,59) = 225.0/4096.0;
-  prolongation[0](48,60) = 2025.0/4096.0;
-  prolongation[0](48,61) = -675.0/4096.0;
-  prolongation[0](48,62) = -675.0/4096.0;
-  prolongation[0](48,63) = 225.0/4096.0;
-  prolongation[0](49,8) = -5.0/256.0;
-  prolongation[0](49,12) = -5.0/256.0;
-  prolongation[0](49,16) = -1.0/256.0;
-  prolongation[0](49,20) = -1.0/256.0;
-  prolongation[0](49,32) = 45.0/256.0;
-  prolongation[0](49,34) = 45.0/256.0;
-  prolongation[0](49,36) = 9.0/256.0;
-  prolongation[0](49,38) = 9.0/256.0;
-  prolongation[0](49,40) = -15.0/256.0;
-  prolongation[0](49,42) = 5.0/256.0;
-  prolongation[0](49,48) = -15.0/256.0;
-  prolongation[0](49,50) = 5.0/256.0;
-  prolongation[0](49,56) = 135.0/256.0;
-  prolongation[0](49,58) = -45.0/256.0;
-  prolongation[0](49,60) = 135.0/256.0;
-  prolongation[0](49,62) = -45.0/256.0;
-  prolongation[0](50,24) = -5.0/256.0;
-  prolongation[0](50,26) = -1.0/256.0;
-  prolongation[0](50,28) = -1.0/256.0;
-  prolongation[0](50,30) = -5.0/256.0;
-  prolongation[0](50,40) = -15.0/256.0;
-  prolongation[0](50,41) = 5.0/256.0;
-  prolongation[0](50,44) = 9.0/256.0;
-  prolongation[0](50,46) = 9.0/256.0;
-  prolongation[0](50,48) = -15.0/256.0;
-  prolongation[0](50,49) = 5.0/256.0;
-  prolongation[0](50,52) = 45.0/256.0;
-  prolongation[0](50,54) = 45.0/256.0;
-  prolongation[0](50,56) = 135.0/256.0;
-  prolongation[0](50,57) = -45.0/256.0;
-  prolongation[0](50,60) = 135.0/256.0;
-  prolongation[0](50,61) = -45.0/256.0;
-  prolongation[0](51,40) = -1.0/16.0;
-  prolongation[0](51,48) = -1.0/16.0;
-  prolongation[0](51,56) = 9.0/16.0;
-  prolongation[0](51,60) = 9.0/16.0;
-  prolongation[0](52,0) = 25.0/256.0;
-  prolongation[0](52,3) = 5.0/256.0;
-  prolongation[0](52,4) = 5.0/256.0;
-  prolongation[0](52,7) = 1.0/256.0;
-  prolongation[0](52,14) = 75.0/256.0;
-  prolongation[0](52,15) = -25.0/256.0;
-  prolongation[0](52,22) = 15.0/256.0;
-  prolongation[0](52,23) = -5.0/256.0;
-  prolongation[0](52,24) = 75.0/256.0;
-  prolongation[0](52,25) = -25.0/256.0;
-  prolongation[0](52,30) = 15.0/256.0;
-  prolongation[0](52,31) = -5.0/256.0;
-  prolongation[0](52,52) = 225.0/256.0;
-  prolongation[0](52,53) = -75.0/256.0;
-  prolongation[0](52,54) = -75.0/256.0;
-  prolongation[0](52,55) = 25.0/256.0;
-  prolongation[0](53,24) = 5.0/16.0;
-  prolongation[0](53,30) = 1.0/16.0;
-  prolongation[0](53,52) = 15.0/16.0;
-  prolongation[0](53,54) = -5.0/16.0;
-  prolongation[0](54,14) = 5.0/16.0;
-  prolongation[0](54,22) = 1.0/16.0;
-  prolongation[0](54,52) = 15.0/16.0;
-  prolongation[0](54,53) = -5.0/16.0;
-  prolongation[0](55,52) = 1.0;
-  prolongation[0](56,0) = 125.0/4096.0;
-  prolongation[0](56,1) = 25.0/4096.0;
-  prolongation[0](56,2) = 5.0/4096.0;
-  prolongation[0](56,3) = 25.0/4096.0;
-  prolongation[0](56,4) = 25.0/4096.0;
-  prolongation[0](56,5) = 5.0/4096.0;
-  prolongation[0](56,6) = 1.0/4096.0;
-  prolongation[0](56,7) = 5.0/4096.0;
-  prolongation[0](56,8) = 375.0/4096.0;
-  prolongation[0](56,9) = -125.0/4096.0;
-  prolongation[0](56,10) = 75.0/4096.0;
-  prolongation[0](56,11) = -25.0/4096.0;
-  prolongation[0](56,12) = 75.0/4096.0;
-  prolongation[0](56,13) = -25.0/4096.0;
-  prolongation[0](56,14) = 375.0/4096.0;
-  prolongation[0](56,15) = -125.0/4096.0;
-  prolongation[0](56,16) = 75.0/4096.0;
-  prolongation[0](56,17) = -25.0/4096.0;
-  prolongation[0](56,18) = 15.0/4096.0;
-  prolongation[0](56,19) = -5.0/4096.0;
-  prolongation[0](56,20) = 15.0/4096.0;
-  prolongation[0](56,21) = -5.0/4096.0;
-  prolongation[0](56,22) = 75.0/4096.0;
-  prolongation[0](56,23) = -25.0/4096.0;
-  prolongation[0](56,24) = 375.0/4096.0;
-  prolongation[0](56,25) = -125.0/4096.0;
-  prolongation[0](56,26) = 75.0/4096.0;
-  prolongation[0](56,27) = -25.0/4096.0;
-  prolongation[0](56,28) = 15.0/4096.0;
-  prolongation[0](56,29) = -5.0/4096.0;
-  prolongation[0](56,30) = 75.0/4096.0;
-  prolongation[0](56,31) = -25.0/4096.0;
-  prolongation[0](56,32) = 1125.0/4096.0;
-  prolongation[0](56,33) = -375.0/4096.0;
-  prolongation[0](56,34) = -375.0/4096.0;
-  prolongation[0](56,35) = 125.0/4096.0;
-  prolongation[0](56,36) = 225.0/4096.0;
-  prolongation[0](56,37) = -75.0/4096.0;
-  prolongation[0](56,38) = -75.0/4096.0;
-  prolongation[0](56,39) = 25.0/4096.0;
-  prolongation[0](56,40) = 1125.0/4096.0;
-  prolongation[0](56,41) = -375.0/4096.0;
-  prolongation[0](56,42) = -375.0/4096.0;
-  prolongation[0](56,43) = 125.0/4096.0;
-  prolongation[0](56,44) = 225.0/4096.0;
-  prolongation[0](56,45) = -75.0/4096.0;
-  prolongation[0](56,46) = -75.0/4096.0;
-  prolongation[0](56,47) = 25.0/4096.0;
-  prolongation[0](56,48) = 225.0/4096.0;
-  prolongation[0](56,49) = -75.0/4096.0;
-  prolongation[0](56,50) = -75.0/4096.0;
-  prolongation[0](56,51) = 25.0/4096.0;
-  prolongation[0](56,52) = 1125.0/4096.0;
-  prolongation[0](56,53) = -375.0/4096.0;
-  prolongation[0](56,54) = -375.0/4096.0;
-  prolongation[0](56,55) = 125.0/4096.0;
-  prolongation[0](56,56) = 3375.0/4096.0;
-  prolongation[0](56,57) = -1125.0/4096.0;
-  prolongation[0](56,58) = -1125.0/4096.0;
-  prolongation[0](56,59) = 375.0/4096.0;
-  prolongation[0](56,60) = -1125.0/4096.0;
-  prolongation[0](56,61) = 375.0/4096.0;
-  prolongation[0](56,62) = 375.0/4096.0;
-  prolongation[0](56,63) = -125.0/4096.0;
-  prolongation[0](57,8) = 25.0/256.0;
-  prolongation[0](57,12) = 5.0/256.0;
-  prolongation[0](57,16) = 5.0/256.0;
-  prolongation[0](57,20) = 1.0/256.0;
-  prolongation[0](57,32) = 75.0/256.0;
-  prolongation[0](57,34) = -25.0/256.0;
-  prolongation[0](57,36) = 15.0/256.0;
-  prolongation[0](57,38) = -5.0/256.0;
-  prolongation[0](57,40) = 75.0/256.0;
-  prolongation[0](57,42) = -25.0/256.0;
-  prolongation[0](57,48) = 15.0/256.0;
-  prolongation[0](57,50) = -5.0/256.0;
-  prolongation[0](57,56) = 225.0/256.0;
-  prolongation[0](57,58) = -75.0/256.0;
-  prolongation[0](57,60) = -75.0/256.0;
-  prolongation[0](57,62) = 25.0/256.0;
-  prolongation[0](58,24) = 25.0/256.0;
-  prolongation[0](58,26) = 5.0/256.0;
-  prolongation[0](58,28) = 1.0/256.0;
-  prolongation[0](58,30) = 5.0/256.0;
-  prolongation[0](58,40) = 75.0/256.0;
-  prolongation[0](58,41) = -25.0/256.0;
-  prolongation[0](58,44) = 15.0/256.0;
-  prolongation[0](58,46) = -5.0/256.0;
-  prolongation[0](58,48) = 15.0/256.0;
-  prolongation[0](58,49) = -5.0/256.0;
-  prolongation[0](58,52) = 75.0/256.0;
-  prolongation[0](58,54) = -25.0/256.0;
-  prolongation[0](58,56) = 225.0/256.0;
-  prolongation[0](58,57) = -75.0/256.0;
-  prolongation[0](58,60) = -75.0/256.0;
-  prolongation[0](58,61) = 25.0/256.0;
-  prolongation[0](59,40) = 5.0/16.0;
-  prolongation[0](59,48) = 1.0/16.0;
-  prolongation[0](59,56) = 15.0/16.0;
-  prolongation[0](59,60) = -5.0/16.0;
-  prolongation[0](60,10) = 5.0/256.0;
-  prolongation[0](60,14) = 25.0/256.0;
-  prolongation[0](60,18) = 1.0/256.0;
-  prolongation[0](60,22) = 5.0/256.0;
-  prolongation[0](60,32) = 75.0/256.0;
-  prolongation[0](60,33) = -25.0/256.0;
-  prolongation[0](60,36) = 15.0/256.0;
-  prolongation[0](60,37) = -5.0/256.0;
-  prolongation[0](60,44) = 15.0/256.0;
-  prolongation[0](60,45) = -5.0/256.0;
-  prolongation[0](60,52) = 75.0/256.0;
-  prolongation[0](60,53) = -25.0/256.0;
-  prolongation[0](60,56) = 225.0/256.0;
-  prolongation[0](60,57) = -75.0/256.0;
-  prolongation[0](60,58) = -75.0/256.0;
-  prolongation[0](60,59) = 25.0/256.0;
-  prolongation[0](61,32) = 5.0/16.0;
-  prolongation[0](61,36) = 1.0/16.0;
-  prolongation[0](61,56) = 15.0/16.0;
-  prolongation[0](61,58) = -5.0/16.0;
-  prolongation[0](62,44) = 1.0/16.0;
-  prolongation[0](62,52) = 5.0/16.0;
-  prolongation[0](62,56) = 15.0/16.0;
-  prolongation[0](62,57) = -5.0/16.0;
-  prolongation[0](63,56) = 1.0;
-  prolongation[1](0,0) = -1.0/16.0;
-  prolongation[1](0,1) = -1.0/16.0;
-  prolongation[1](0,8) = 9.0/16.0;
-  prolongation[1](0,9) = 9.0/16.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,1) = -1.0/16.0;
-  prolongation[1](2,2) = -1.0/16.0;
-  prolongation[1](2,10) = 9.0/16.0;
-  prolongation[1](2,11) = 9.0/16.0;
-  prolongation[1](3,0) = 1.0/256.0;
-  prolongation[1](3,1) = 1.0/256.0;
-  prolongation[1](3,2) = 1.0/256.0;
-  prolongation[1](3,3) = 1.0/256.0;
-  prolongation[1](3,8) = -9.0/256.0;
-  prolongation[1](3,9) = -9.0/256.0;
-  prolongation[1](3,10) = -9.0/256.0;
-  prolongation[1](3,11) = -9.0/256.0;
-  prolongation[1](3,12) = -9.0/256.0;
-  prolongation[1](3,13) = -9.0/256.0;
-  prolongation[1](3,14) = -9.0/256.0;
-  prolongation[1](3,15) = -9.0/256.0;
-  prolongation[1](3,32) = 81.0/256.0;
-  prolongation[1](3,33) = 81.0/256.0;
-  prolongation[1](3,34) = 81.0/256.0;
-  prolongation[1](3,35) = 81.0/256.0;
-  prolongation[1](4,0) = 1.0/256.0;
-  prolongation[1](4,1) = 1.0/256.0;
-  prolongation[1](4,4) = 1.0/256.0;
-  prolongation[1](4,5) = 1.0/256.0;
-  prolongation[1](4,8) = -9.0/256.0;
-  prolongation[1](4,9) = -9.0/256.0;
-  prolongation[1](4,16) = -9.0/256.0;
-  prolongation[1](4,17) = -9.0/256.0;
-  prolongation[1](4,24) = -9.0/256.0;
-  prolongation[1](4,25) = -9.0/256.0;
-  prolongation[1](4,26) = -9.0/256.0;
-  prolongation[1](4,27) = -9.0/256.0;
-  prolongation[1](4,40) = 81.0/256.0;
-  prolongation[1](4,41) = 81.0/256.0;
-  prolongation[1](4,42) = 81.0/256.0;
-  prolongation[1](4,43) = 81.0/256.0;
-  prolongation[1](5,1) = -1.0/16.0;
-  prolongation[1](5,5) = -1.0/16.0;
-  prolongation[1](5,26) = 9.0/16.0;
-  prolongation[1](5,27) = 9.0/16.0;
-  prolongation[1](6,1) = 1.0/256.0;
-  prolongation[1](6,2) = 1.0/256.0;
-  prolongation[1](6,5) = 1.0/256.0;
-  prolongation[1](6,6) = 1.0/256.0;
-  prolongation[1](6,10) = -9.0/256.0;
-  prolongation[1](6,11) = -9.0/256.0;
-  prolongation[1](6,18) = -9.0/256.0;
-  prolongation[1](6,19) = -9.0/256.0;
-  prolongation[1](6,26) = -9.0/256.0;
-  prolongation[1](6,27) = -9.0/256.0;
-  prolongation[1](6,28) = -9.0/256.0;
-  prolongation[1](6,29) = -9.0/256.0;
-  prolongation[1](6,44) = 81.0/256.0;
-  prolongation[1](6,45) = 81.0/256.0;
-  prolongation[1](6,46) = 81.0/256.0;
-  prolongation[1](6,47) = 81.0/256.0;
-  prolongation[1](7,0) = -1.0/4096.0;
-  prolongation[1](7,1) = -1.0/4096.0;
-  prolongation[1](7,2) = -1.0/4096.0;
-  prolongation[1](7,3) = -1.0/4096.0;
-  prolongation[1](7,4) = -1.0/4096.0;
-  prolongation[1](7,5) = -1.0/4096.0;
-  prolongation[1](7,6) = -1.0/4096.0;
-  prolongation[1](7,7) = -1.0/4096.0;
-  prolongation[1](7,8) = 9.0/4096.0;
-  prolongation[1](7,9) = 9.0/4096.0;
-  prolongation[1](7,10) = 9.0/4096.0;
-  prolongation[1](7,11) = 9.0/4096.0;
-  prolongation[1](7,12) = 9.0/4096.0;
-  prolongation[1](7,13) = 9.0/4096.0;
-  prolongation[1](7,14) = 9.0/4096.0;
-  prolongation[1](7,15) = 9.0/4096.0;
-  prolongation[1](7,16) = 9.0/4096.0;
-  prolongation[1](7,17) = 9.0/4096.0;
-  prolongation[1](7,18) = 9.0/4096.0;
-  prolongation[1](7,19) = 9.0/4096.0;
-  prolongation[1](7,20) = 9.0/4096.0;
-  prolongation[1](7,21) = 9.0/4096.0;
-  prolongation[1](7,22) = 9.0/4096.0;
-  prolongation[1](7,23) = 9.0/4096.0;
-  prolongation[1](7,24) = 9.0/4096.0;
-  prolongation[1](7,25) = 9.0/4096.0;
-  prolongation[1](7,26) = 9.0/4096.0;
-  prolongation[1](7,27) = 9.0/4096.0;
-  prolongation[1](7,28) = 9.0/4096.0;
-  prolongation[1](7,29) = 9.0/4096.0;
-  prolongation[1](7,30) = 9.0/4096.0;
-  prolongation[1](7,31) = 9.0/4096.0;
-  prolongation[1](7,32) = -81.0/4096.0;
-  prolongation[1](7,33) = -81.0/4096.0;
-  prolongation[1](7,34) = -81.0/4096.0;
-  prolongation[1](7,35) = -81.0/4096.0;
-  prolongation[1](7,36) = -81.0/4096.0;
-  prolongation[1](7,37) = -81.0/4096.0;
-  prolongation[1](7,38) = -81.0/4096.0;
-  prolongation[1](7,39) = -81.0/4096.0;
-  prolongation[1](7,40) = -81.0/4096.0;
-  prolongation[1](7,41) = -81.0/4096.0;
-  prolongation[1](7,42) = -81.0/4096.0;
-  prolongation[1](7,43) = -81.0/4096.0;
-  prolongation[1](7,44) = -81.0/4096.0;
-  prolongation[1](7,45) = -81.0/4096.0;
-  prolongation[1](7,46) = -81.0/4096.0;
-  prolongation[1](7,47) = -81.0/4096.0;
-  prolongation[1](7,48) = -81.0/4096.0;
-  prolongation[1](7,49) = -81.0/4096.0;
-  prolongation[1](7,50) = -81.0/4096.0;
-  prolongation[1](7,51) = -81.0/4096.0;
-  prolongation[1](7,52) = -81.0/4096.0;
-  prolongation[1](7,53) = -81.0/4096.0;
-  prolongation[1](7,54) = -81.0/4096.0;
-  prolongation[1](7,55) = -81.0/4096.0;
-  prolongation[1](7,56) = 729.0/4096.0;
-  prolongation[1](7,57) = 729.0/4096.0;
-  prolongation[1](7,58) = 729.0/4096.0;
-  prolongation[1](7,59) = 729.0/4096.0;
-  prolongation[1](7,60) = 729.0/4096.0;
-  prolongation[1](7,61) = 729.0/4096.0;
-  prolongation[1](7,62) = 729.0/4096.0;
-  prolongation[1](7,63) = 729.0/4096.0;
-  prolongation[1](8,9) = 1.0;
-  prolongation[1](9,0) = 1.0/16.0;
-  prolongation[1](9,1) = 5.0/16.0;
-  prolongation[1](9,8) = -5.0/16.0;
-  prolongation[1](9,9) = 15.0/16.0;
-  prolongation[1](10,1) = 5.0/16.0;
-  prolongation[1](10,2) = 1.0/16.0;
-  prolongation[1](10,10) = 15.0/16.0;
-  prolongation[1](10,11) = -5.0/16.0;
-  prolongation[1](11,10) = 1.0;
-  prolongation[1](12,9) = -1.0/16.0;
-  prolongation[1](12,13) = -1.0/16.0;
-  prolongation[1](12,33) = 9.0/16.0;
-  prolongation[1](12,35) = 9.0/16.0;
-  prolongation[1](13,0) = -1.0/256.0;
-  prolongation[1](13,1) = -5.0/256.0;
-  prolongation[1](13,2) = -5.0/256.0;
-  prolongation[1](13,3) = -1.0/256.0;
-  prolongation[1](13,8) = 5.0/256.0;
-  prolongation[1](13,9) = -15.0/256.0;
-  prolongation[1](13,10) = 45.0/256.0;
-  prolongation[1](13,11) = 45.0/256.0;
-  prolongation[1](13,12) = 5.0/256.0;
-  prolongation[1](13,13) = -15.0/256.0;
-  prolongation[1](13,14) = 9.0/256.0;
-  prolongation[1](13,15) = 9.0/256.0;
-  prolongation[1](13,32) = -45.0/256.0;
-  prolongation[1](13,33) = 135.0/256.0;
-  prolongation[1](13,34) = -45.0/256.0;
-  prolongation[1](13,35) = 135.0/256.0;
-  prolongation[1](14,0) = -5.0/256.0;
-  prolongation[1](14,1) = -5.0/256.0;
-  prolongation[1](14,2) = -1.0/256.0;
-  prolongation[1](14,3) = -1.0/256.0;
-  prolongation[1](14,8) = 45.0/256.0;
-  prolongation[1](14,9) = 45.0/256.0;
-  prolongation[1](14,10) = -15.0/256.0;
-  prolongation[1](14,11) = 5.0/256.0;
-  prolongation[1](14,12) = 9.0/256.0;
-  prolongation[1](14,13) = 9.0/256.0;
-  prolongation[1](14,14) = -15.0/256.0;
-  prolongation[1](14,15) = 5.0/256.0;
-  prolongation[1](14,32) = 135.0/256.0;
-  prolongation[1](14,33) = 135.0/256.0;
-  prolongation[1](14,34) = -45.0/256.0;
-  prolongation[1](14,35) = -45.0/256.0;
-  prolongation[1](15,10) = -1.0/16.0;
-  prolongation[1](15,14) = -1.0/16.0;
-  prolongation[1](15,32) = 9.0/16.0;
-  prolongation[1](15,33) = 9.0/16.0;
-  prolongation[1](16,9) = -1.0/16.0;
-  prolongation[1](16,17) = -1.0/16.0;
-  prolongation[1](16,41) = 9.0/16.0;
-  prolongation[1](16,43) = 9.0/16.0;
-  prolongation[1](17,0) = -1.0/256.0;
-  prolongation[1](17,1) = -5.0/256.0;
-  prolongation[1](17,4) = -1.0/256.0;
-  prolongation[1](17,5) = -5.0/256.0;
-  prolongation[1](17,8) = 5.0/256.0;
-  prolongation[1](17,9) = -15.0/256.0;
-  prolongation[1](17,16) = 5.0/256.0;
-  prolongation[1](17,17) = -15.0/256.0;
-  prolongation[1](17,24) = 9.0/256.0;
-  prolongation[1](17,25) = 9.0/256.0;
-  prolongation[1](17,26) = 45.0/256.0;
-  prolongation[1](17,27) = 45.0/256.0;
-  prolongation[1](17,40) = -45.0/256.0;
-  prolongation[1](17,41) = 135.0/256.0;
-  prolongation[1](17,42) = -45.0/256.0;
-  prolongation[1](17,43) = 135.0/256.0;
-  prolongation[1](18,1) = -5.0/256.0;
-  prolongation[1](18,2) = -1.0/256.0;
-  prolongation[1](18,5) = -5.0/256.0;
-  prolongation[1](18,6) = -1.0/256.0;
-  prolongation[1](18,10) = -15.0/256.0;
-  prolongation[1](18,11) = 5.0/256.0;
-  prolongation[1](18,18) = -15.0/256.0;
-  prolongation[1](18,19) = 5.0/256.0;
-  prolongation[1](18,26) = 45.0/256.0;
-  prolongation[1](18,27) = 45.0/256.0;
-  prolongation[1](18,28) = 9.0/256.0;
-  prolongation[1](18,29) = 9.0/256.0;
-  prolongation[1](18,44) = 135.0/256.0;
-  prolongation[1](18,45) = 135.0/256.0;
-  prolongation[1](18,46) = -45.0/256.0;
-  prolongation[1](18,47) = -45.0/256.0;
-  prolongation[1](19,10) = -1.0/16.0;
-  prolongation[1](19,18) = -1.0/16.0;
-  prolongation[1](19,44) = 9.0/16.0;
-  prolongation[1](19,45) = 9.0/16.0;
-  prolongation[1](20,9) = 1.0/256.0;
-  prolongation[1](20,13) = 1.0/256.0;
-  prolongation[1](20,17) = 1.0/256.0;
-  prolongation[1](20,21) = 1.0/256.0;
-  prolongation[1](20,33) = -9.0/256.0;
-  prolongation[1](20,35) = -9.0/256.0;
-  prolongation[1](20,37) = -9.0/256.0;
-  prolongation[1](20,39) = -9.0/256.0;
-  prolongation[1](20,41) = -9.0/256.0;
-  prolongation[1](20,43) = -9.0/256.0;
-  prolongation[1](20,49) = -9.0/256.0;
-  prolongation[1](20,51) = -9.0/256.0;
-  prolongation[1](20,57) = 81.0/256.0;
-  prolongation[1](20,59) = 81.0/256.0;
-  prolongation[1](20,61) = 81.0/256.0;
-  prolongation[1](20,63) = 81.0/256.0;
-  prolongation[1](21,0) = 1.0/4096.0;
-  prolongation[1](21,1) = 5.0/4096.0;
-  prolongation[1](21,2) = 5.0/4096.0;
-  prolongation[1](21,3) = 1.0/4096.0;
-  prolongation[1](21,4) = 1.0/4096.0;
-  prolongation[1](21,5) = 5.0/4096.0;
-  prolongation[1](21,6) = 5.0/4096.0;
-  prolongation[1](21,7) = 1.0/4096.0;
-  prolongation[1](21,8) = -5.0/4096.0;
-  prolongation[1](21,9) = 15.0/4096.0;
-  prolongation[1](21,10) = -45.0/4096.0;
-  prolongation[1](21,11) = -45.0/4096.0;
-  prolongation[1](21,12) = -5.0/4096.0;
-  prolongation[1](21,13) = 15.0/4096.0;
-  prolongation[1](21,14) = -9.0/4096.0;
-  prolongation[1](21,15) = -9.0/4096.0;
-  prolongation[1](21,16) = -5.0/4096.0;
-  prolongation[1](21,17) = 15.0/4096.0;
-  prolongation[1](21,18) = -45.0/4096.0;
-  prolongation[1](21,19) = -45.0/4096.0;
-  prolongation[1](21,20) = -5.0/4096.0;
-  prolongation[1](21,21) = 15.0/4096.0;
-  prolongation[1](21,22) = -9.0/4096.0;
-  prolongation[1](21,23) = -9.0/4096.0;
-  prolongation[1](21,24) = -9.0/4096.0;
-  prolongation[1](21,25) = -9.0/4096.0;
-  prolongation[1](21,26) = -45.0/4096.0;
-  prolongation[1](21,27) = -45.0/4096.0;
-  prolongation[1](21,28) = -45.0/4096.0;
-  prolongation[1](21,29) = -45.0/4096.0;
-  prolongation[1](21,30) = -9.0/4096.0;
-  prolongation[1](21,31) = -9.0/4096.0;
-  prolongation[1](21,32) = 45.0/4096.0;
-  prolongation[1](21,33) = -135.0/4096.0;
-  prolongation[1](21,34) = 45.0/4096.0;
-  prolongation[1](21,35) = -135.0/4096.0;
-  prolongation[1](21,36) = 45.0/4096.0;
-  prolongation[1](21,37) = -135.0/4096.0;
-  prolongation[1](21,38) = 45.0/4096.0;
-  prolongation[1](21,39) = -135.0/4096.0;
-  prolongation[1](21,40) = 45.0/4096.0;
-  prolongation[1](21,41) = -135.0/4096.0;
-  prolongation[1](21,42) = 45.0/4096.0;
-  prolongation[1](21,43) = -135.0/4096.0;
-  prolongation[1](21,44) = 405.0/4096.0;
-  prolongation[1](21,45) = 405.0/4096.0;
-  prolongation[1](21,46) = 405.0/4096.0;
-  prolongation[1](21,47) = 405.0/4096.0;
-  prolongation[1](21,48) = 45.0/4096.0;
-  prolongation[1](21,49) = -135.0/4096.0;
-  prolongation[1](21,50) = 45.0/4096.0;
-  prolongation[1](21,51) = -135.0/4096.0;
-  prolongation[1](21,52) = 81.0/4096.0;
-  prolongation[1](21,53) = 81.0/4096.0;
-  prolongation[1](21,54) = 81.0/4096.0;
-  prolongation[1](21,55) = 81.0/4096.0;
-  prolongation[1](21,56) = -405.0/4096.0;
-  prolongation[1](21,57) = 1215.0/4096.0;
-  prolongation[1](21,58) = -405.0/4096.0;
-  prolongation[1](21,59) = 1215.0/4096.0;
-  prolongation[1](21,60) = -405.0/4096.0;
-  prolongation[1](21,61) = 1215.0/4096.0;
-  prolongation[1](21,62) = -405.0/4096.0;
-  prolongation[1](21,63) = 1215.0/4096.0;
-  prolongation[1](22,0) = 5.0/4096.0;
-  prolongation[1](22,1) = 5.0/4096.0;
-  prolongation[1](22,2) = 1.0/4096.0;
-  prolongation[1](22,3) = 1.0/4096.0;
-  prolongation[1](22,4) = 5.0/4096.0;
-  prolongation[1](22,5) = 5.0/4096.0;
-  prolongation[1](22,6) = 1.0/4096.0;
-  prolongation[1](22,7) = 1.0/4096.0;
-  prolongation[1](22,8) = -45.0/4096.0;
-  prolongation[1](22,9) = -45.0/4096.0;
-  prolongation[1](22,10) = 15.0/4096.0;
-  prolongation[1](22,11) = -5.0/4096.0;
-  prolongation[1](22,12) = -9.0/4096.0;
-  prolongation[1](22,13) = -9.0/4096.0;
-  prolongation[1](22,14) = 15.0/4096.0;
-  prolongation[1](22,15) = -5.0/4096.0;
-  prolongation[1](22,16) = -45.0/4096.0;
-  prolongation[1](22,17) = -45.0/4096.0;
-  prolongation[1](22,18) = 15.0/4096.0;
-  prolongation[1](22,19) = -5.0/4096.0;
-  prolongation[1](22,20) = -9.0/4096.0;
-  prolongation[1](22,21) = -9.0/4096.0;
-  prolongation[1](22,22) = 15.0/4096.0;
-  prolongation[1](22,23) = -5.0/4096.0;
-  prolongation[1](22,24) = -45.0/4096.0;
-  prolongation[1](22,25) = -45.0/4096.0;
-  prolongation[1](22,26) = -45.0/4096.0;
-  prolongation[1](22,27) = -45.0/4096.0;
-  prolongation[1](22,28) = -9.0/4096.0;
-  prolongation[1](22,29) = -9.0/4096.0;
-  prolongation[1](22,30) = -9.0/4096.0;
-  prolongation[1](22,31) = -9.0/4096.0;
-  prolongation[1](22,32) = -135.0/4096.0;
-  prolongation[1](22,33) = -135.0/4096.0;
-  prolongation[1](22,34) = 45.0/4096.0;
-  prolongation[1](22,35) = 45.0/4096.0;
-  prolongation[1](22,36) = -135.0/4096.0;
-  prolongation[1](22,37) = -135.0/4096.0;
-  prolongation[1](22,38) = 45.0/4096.0;
-  prolongation[1](22,39) = 45.0/4096.0;
-  prolongation[1](22,40) = 405.0/4096.0;
-  prolongation[1](22,41) = 405.0/4096.0;
-  prolongation[1](22,42) = 405.0/4096.0;
-  prolongation[1](22,43) = 405.0/4096.0;
-  prolongation[1](22,44) = -135.0/4096.0;
-  prolongation[1](22,45) = -135.0/4096.0;
-  prolongation[1](22,46) = 45.0/4096.0;
-  prolongation[1](22,47) = 45.0/4096.0;
-  prolongation[1](22,48) = 81.0/4096.0;
-  prolongation[1](22,49) = 81.0/4096.0;
-  prolongation[1](22,50) = 81.0/4096.0;
-  prolongation[1](22,51) = 81.0/4096.0;
-  prolongation[1](22,52) = -135.0/4096.0;
-  prolongation[1](22,53) = -135.0/4096.0;
-  prolongation[1](22,54) = 45.0/4096.0;
-  prolongation[1](22,55) = 45.0/4096.0;
-  prolongation[1](22,56) = 1215.0/4096.0;
-  prolongation[1](22,57) = 1215.0/4096.0;
-  prolongation[1](22,58) = 1215.0/4096.0;
-  prolongation[1](22,59) = 1215.0/4096.0;
-  prolongation[1](22,60) = -405.0/4096.0;
-  prolongation[1](22,61) = -405.0/4096.0;
-  prolongation[1](22,62) = -405.0/4096.0;
-  prolongation[1](22,63) = -405.0/4096.0;
-  prolongation[1](23,10) = 1.0/256.0;
-  prolongation[1](23,14) = 1.0/256.0;
-  prolongation[1](23,18) = 1.0/256.0;
-  prolongation[1](23,22) = 1.0/256.0;
-  prolongation[1](23,32) = -9.0/256.0;
-  prolongation[1](23,33) = -9.0/256.0;
-  prolongation[1](23,36) = -9.0/256.0;
-  prolongation[1](23,37) = -9.0/256.0;
-  prolongation[1](23,44) = -9.0/256.0;
-  prolongation[1](23,45) = -9.0/256.0;
-  prolongation[1](23,52) = -9.0/256.0;
-  prolongation[1](23,53) = -9.0/256.0;
-  prolongation[1](23,56) = 81.0/256.0;
-  prolongation[1](23,57) = 81.0/256.0;
-  prolongation[1](23,58) = 81.0/256.0;
-  prolongation[1](23,59) = 81.0/256.0;
-  prolongation[1](24,0) = -5.0/256.0;
-  prolongation[1](24,1) = -5.0/256.0;
-  prolongation[1](24,4) = -1.0/256.0;
-  prolongation[1](24,5) = -1.0/256.0;
-  prolongation[1](24,8) = 45.0/256.0;
-  prolongation[1](24,9) = 45.0/256.0;
-  prolongation[1](24,16) = 9.0/256.0;
-  prolongation[1](24,17) = 9.0/256.0;
-  prolongation[1](24,24) = -15.0/256.0;
-  prolongation[1](24,25) = 5.0/256.0;
-  prolongation[1](24,26) = -15.0/256.0;
-  prolongation[1](24,27) = 5.0/256.0;
-  prolongation[1](24,40) = 135.0/256.0;
-  prolongation[1](24,41) = 135.0/256.0;
-  prolongation[1](24,42) = -45.0/256.0;
-  prolongation[1](24,43) = -45.0/256.0;
-  prolongation[1](25,24) = -1.0/16.0;
-  prolongation[1](25,26) = -1.0/16.0;
-  prolongation[1](25,40) = 9.0/16.0;
-  prolongation[1](25,41) = 9.0/16.0;
-  prolongation[1](26,1) = 5.0/16.0;
-  prolongation[1](26,5) = 1.0/16.0;
-  prolongation[1](26,26) = 15.0/16.0;
-  prolongation[1](26,27) = -5.0/16.0;
-  prolongation[1](27,26) = 1.0;
-  prolongation[1](28,1) = -5.0/256.0;
-  prolongation[1](28,2) = -5.0/256.0;
-  prolongation[1](28,5) = -1.0/256.0;
-  prolongation[1](28,6) = -1.0/256.0;
-  prolongation[1](28,10) = 45.0/256.0;
-  prolongation[1](28,11) = 45.0/256.0;
-  prolongation[1](28,18) = 9.0/256.0;
-  prolongation[1](28,19) = 9.0/256.0;
-  prolongation[1](28,26) = -15.0/256.0;
-  prolongation[1](28,27) = 5.0/256.0;
-  prolongation[1](28,28) = -15.0/256.0;
-  prolongation[1](28,29) = 5.0/256.0;
-  prolongation[1](28,44) = 135.0/256.0;
-  prolongation[1](28,45) = -45.0/256.0;
-  prolongation[1](28,46) = 135.0/256.0;
-  prolongation[1](28,47) = -45.0/256.0;
-  prolongation[1](29,26) = -1.0/16.0;
-  prolongation[1](29,28) = -1.0/16.0;
-  prolongation[1](29,44) = 9.0/16.0;
-  prolongation[1](29,46) = 9.0/16.0;
-  prolongation[1](30,0) = 5.0/4096.0;
-  prolongation[1](30,1) = 5.0/4096.0;
-  prolongation[1](30,2) = 5.0/4096.0;
-  prolongation[1](30,3) = 5.0/4096.0;
-  prolongation[1](30,4) = 1.0/4096.0;
-  prolongation[1](30,5) = 1.0/4096.0;
-  prolongation[1](30,6) = 1.0/4096.0;
-  prolongation[1](30,7) = 1.0/4096.0;
-  prolongation[1](30,8) = -45.0/4096.0;
-  prolongation[1](30,9) = -45.0/4096.0;
-  prolongation[1](30,10) = -45.0/4096.0;
-  prolongation[1](30,11) = -45.0/4096.0;
-  prolongation[1](30,12) = -45.0/4096.0;
-  prolongation[1](30,13) = -45.0/4096.0;
-  prolongation[1](30,14) = -45.0/4096.0;
-  prolongation[1](30,15) = -45.0/4096.0;
-  prolongation[1](30,16) = -9.0/4096.0;
-  prolongation[1](30,17) = -9.0/4096.0;
-  prolongation[1](30,18) = -9.0/4096.0;
-  prolongation[1](30,19) = -9.0/4096.0;
-  prolongation[1](30,20) = -9.0/4096.0;
-  prolongation[1](30,21) = -9.0/4096.0;
-  prolongation[1](30,22) = -9.0/4096.0;
-  prolongation[1](30,23) = -9.0/4096.0;
-  prolongation[1](30,24) = 15.0/4096.0;
-  prolongation[1](30,25) = -5.0/4096.0;
-  prolongation[1](30,26) = 15.0/4096.0;
-  prolongation[1](30,27) = -5.0/4096.0;
-  prolongation[1](30,28) = 15.0/4096.0;
-  prolongation[1](30,29) = -5.0/4096.0;
-  prolongation[1](30,30) = 15.0/4096.0;
-  prolongation[1](30,31) = -5.0/4096.0;
-  prolongation[1](30,32) = 405.0/4096.0;
-  prolongation[1](30,33) = 405.0/4096.0;
-  prolongation[1](30,34) = 405.0/4096.0;
-  prolongation[1](30,35) = 405.0/4096.0;
-  prolongation[1](30,36) = 81.0/4096.0;
-  prolongation[1](30,37) = 81.0/4096.0;
-  prolongation[1](30,38) = 81.0/4096.0;
-  prolongation[1](30,39) = 81.0/4096.0;
-  prolongation[1](30,40) = -135.0/4096.0;
-  prolongation[1](30,41) = -135.0/4096.0;
-  prolongation[1](30,42) = 45.0/4096.0;
-  prolongation[1](30,43) = 45.0/4096.0;
-  prolongation[1](30,44) = -135.0/4096.0;
-  prolongation[1](30,45) = 45.0/4096.0;
-  prolongation[1](30,46) = -135.0/4096.0;
-  prolongation[1](30,47) = 45.0/4096.0;
-  prolongation[1](30,48) = -135.0/4096.0;
-  prolongation[1](30,49) = -135.0/4096.0;
-  prolongation[1](30,50) = 45.0/4096.0;
-  prolongation[1](30,51) = 45.0/4096.0;
-  prolongation[1](30,52) = -135.0/4096.0;
-  prolongation[1](30,53) = 45.0/4096.0;
-  prolongation[1](30,54) = -135.0/4096.0;
-  prolongation[1](30,55) = 45.0/4096.0;
-  prolongation[1](30,56) = 1215.0/4096.0;
-  prolongation[1](30,57) = 1215.0/4096.0;
-  prolongation[1](30,58) = -405.0/4096.0;
-  prolongation[1](30,59) = -405.0/4096.0;
-  prolongation[1](30,60) = 1215.0/4096.0;
-  prolongation[1](30,61) = 1215.0/4096.0;
-  prolongation[1](30,62) = -405.0/4096.0;
-  prolongation[1](30,63) = -405.0/4096.0;
-  prolongation[1](31,24) = 1.0/256.0;
-  prolongation[1](31,26) = 1.0/256.0;
-  prolongation[1](31,28) = 1.0/256.0;
-  prolongation[1](31,30) = 1.0/256.0;
-  prolongation[1](31,40) = -9.0/256.0;
-  prolongation[1](31,41) = -9.0/256.0;
-  prolongation[1](31,44) = -9.0/256.0;
-  prolongation[1](31,46) = -9.0/256.0;
-  prolongation[1](31,48) = -9.0/256.0;
-  prolongation[1](31,49) = -9.0/256.0;
-  prolongation[1](31,52) = -9.0/256.0;
-  prolongation[1](31,54) = -9.0/256.0;
-  prolongation[1](31,56) = 81.0/256.0;
-  prolongation[1](31,57) = 81.0/256.0;
-  prolongation[1](31,60) = 81.0/256.0;
-  prolongation[1](31,61) = 81.0/256.0;
-  prolongation[1](32,9) = 5.0/16.0;
-  prolongation[1](32,13) = 1.0/16.0;
-  prolongation[1](32,33) = 15.0/16.0;
-  prolongation[1](32,35) = -5.0/16.0;
-  prolongation[1](33,0) = 5.0/256.0;
-  prolongation[1](33,1) = 25.0/256.0;
-  prolongation[1](33,2) = 5.0/256.0;
-  prolongation[1](33,3) = 1.0/256.0;
-  prolongation[1](33,8) = -25.0/256.0;
-  prolongation[1](33,9) = 75.0/256.0;
-  prolongation[1](33,10) = 75.0/256.0;
-  prolongation[1](33,11) = -25.0/256.0;
-  prolongation[1](33,12) = -5.0/256.0;
-  prolongation[1](33,13) = 15.0/256.0;
-  prolongation[1](33,14) = 15.0/256.0;
-  prolongation[1](33,15) = -5.0/256.0;
-  prolongation[1](33,32) = -75.0/256.0;
-  prolongation[1](33,33) = 225.0/256.0;
-  prolongation[1](33,34) = 25.0/256.0;
-  prolongation[1](33,35) = -75.0/256.0;
-  prolongation[1](34,33) = 1.0;
-  prolongation[1](35,10) = 5.0/16.0;
-  prolongation[1](35,14) = 1.0/16.0;
-  prolongation[1](35,32) = -5.0/16.0;
-  prolongation[1](35,33) = 15.0/16.0;
-  prolongation[1](36,9) = -5.0/256.0;
-  prolongation[1](36,13) = -1.0/256.0;
-  prolongation[1](36,17) = -5.0/256.0;
-  prolongation[1](36,21) = -1.0/256.0;
-  prolongation[1](36,33) = -15.0/256.0;
-  prolongation[1](36,35) = 5.0/256.0;
-  prolongation[1](36,37) = -15.0/256.0;
-  prolongation[1](36,39) = 5.0/256.0;
-  prolongation[1](36,41) = 45.0/256.0;
-  prolongation[1](36,43) = 45.0/256.0;
-  prolongation[1](36,49) = 9.0/256.0;
-  prolongation[1](36,51) = 9.0/256.0;
-  prolongation[1](36,57) = 135.0/256.0;
-  prolongation[1](36,59) = 135.0/256.0;
-  prolongation[1](36,61) = -45.0/256.0;
-  prolongation[1](36,63) = -45.0/256.0;
-  prolongation[1](37,0) = -5.0/4096.0;
-  prolongation[1](37,1) = -25.0/4096.0;
-  prolongation[1](37,2) = -5.0/4096.0;
-  prolongation[1](37,3) = -1.0/4096.0;
-  prolongation[1](37,4) = -5.0/4096.0;
-  prolongation[1](37,5) = -25.0/4096.0;
-  prolongation[1](37,6) = -5.0/4096.0;
-  prolongation[1](37,7) = -1.0/4096.0;
-  prolongation[1](37,8) = 25.0/4096.0;
-  prolongation[1](37,9) = -75.0/4096.0;
-  prolongation[1](37,10) = -75.0/4096.0;
-  prolongation[1](37,11) = 25.0/4096.0;
-  prolongation[1](37,12) = 5.0/4096.0;
-  prolongation[1](37,13) = -15.0/4096.0;
-  prolongation[1](37,14) = -15.0/4096.0;
-  prolongation[1](37,15) = 5.0/4096.0;
-  prolongation[1](37,16) = 25.0/4096.0;
-  prolongation[1](37,17) = -75.0/4096.0;
-  prolongation[1](37,18) = -75.0/4096.0;
-  prolongation[1](37,19) = 25.0/4096.0;
-  prolongation[1](37,20) = 5.0/4096.0;
-  prolongation[1](37,21) = -15.0/4096.0;
-  prolongation[1](37,22) = -15.0/4096.0;
-  prolongation[1](37,23) = 5.0/4096.0;
-  prolongation[1](37,24) = 45.0/4096.0;
-  prolongation[1](37,25) = 45.0/4096.0;
-  prolongation[1](37,26) = 225.0/4096.0;
-  prolongation[1](37,27) = 225.0/4096.0;
-  prolongation[1](37,28) = 45.0/4096.0;
-  prolongation[1](37,29) = 45.0/4096.0;
-  prolongation[1](37,30) = 9.0/4096.0;
-  prolongation[1](37,31) = 9.0/4096.0;
-  prolongation[1](37,32) = 75.0/4096.0;
-  prolongation[1](37,33) = -225.0/4096.0;
-  prolongation[1](37,34) = -25.0/4096.0;
-  prolongation[1](37,35) = 75.0/4096.0;
-  prolongation[1](37,36) = 75.0/4096.0;
-  prolongation[1](37,37) = -225.0/4096.0;
-  prolongation[1](37,38) = -25.0/4096.0;
-  prolongation[1](37,39) = 75.0/4096.0;
-  prolongation[1](37,40) = -225.0/4096.0;
-  prolongation[1](37,41) = 675.0/4096.0;
-  prolongation[1](37,42) = -225.0/4096.0;
-  prolongation[1](37,43) = 675.0/4096.0;
-  prolongation[1](37,44) = 675.0/4096.0;
-  prolongation[1](37,45) = 675.0/4096.0;
-  prolongation[1](37,46) = -225.0/4096.0;
-  prolongation[1](37,47) = -225.0/4096.0;
-  prolongation[1](37,48) = -45.0/4096.0;
-  prolongation[1](37,49) = 135.0/4096.0;
-  prolongation[1](37,50) = -45.0/4096.0;
-  prolongation[1](37,51) = 135.0/4096.0;
-  prolongation[1](37,52) = 135.0/4096.0;
-  prolongation[1](37,53) = 135.0/4096.0;
-  prolongation[1](37,54) = -45.0/4096.0;
-  prolongation[1](37,55) = -45.0/4096.0;
-  prolongation[1](37,56) = -675.0/4096.0;
-  prolongation[1](37,57) = 2025.0/4096.0;
-  prolongation[1](37,58) = -675.0/4096.0;
-  prolongation[1](37,59) = 2025.0/4096.0;
-  prolongation[1](37,60) = 225.0/4096.0;
-  prolongation[1](37,61) = -675.0/4096.0;
-  prolongation[1](37,62) = 225.0/4096.0;
-  prolongation[1](37,63) = -675.0/4096.0;
-  prolongation[1](38,33) = -1.0/16.0;
-  prolongation[1](38,37) = -1.0/16.0;
-  prolongation[1](38,57) = 9.0/16.0;
-  prolongation[1](38,59) = 9.0/16.0;
-  prolongation[1](39,10) = -5.0/256.0;
-  prolongation[1](39,14) = -1.0/256.0;
-  prolongation[1](39,18) = -5.0/256.0;
-  prolongation[1](39,22) = -1.0/256.0;
-  prolongation[1](39,32) = 5.0/256.0;
-  prolongation[1](39,33) = -15.0/256.0;
-  prolongation[1](39,36) = 5.0/256.0;
-  prolongation[1](39,37) = -15.0/256.0;
-  prolongation[1](39,44) = 45.0/256.0;
-  prolongation[1](39,45) = 45.0/256.0;
-  prolongation[1](39,52) = 9.0/256.0;
-  prolongation[1](39,53) = 9.0/256.0;
-  prolongation[1](39,56) = -45.0/256.0;
-  prolongation[1](39,57) = 135.0/256.0;
-  prolongation[1](39,58) = -45.0/256.0;
-  prolongation[1](39,59) = 135.0/256.0;
-  prolongation[1](40,9) = 5.0/16.0;
-  prolongation[1](40,17) = 1.0/16.0;
-  prolongation[1](40,41) = 15.0/16.0;
-  prolongation[1](40,43) = -5.0/16.0;
-  prolongation[1](41,0) = 5.0/256.0;
-  prolongation[1](41,1) = 25.0/256.0;
-  prolongation[1](41,4) = 1.0/256.0;
-  prolongation[1](41,5) = 5.0/256.0;
-  prolongation[1](41,8) = -25.0/256.0;
-  prolongation[1](41,9) = 75.0/256.0;
-  prolongation[1](41,16) = -5.0/256.0;
-  prolongation[1](41,17) = 15.0/256.0;
-  prolongation[1](41,24) = 15.0/256.0;
-  prolongation[1](41,25) = -5.0/256.0;
-  prolongation[1](41,26) = 75.0/256.0;
-  prolongation[1](41,27) = -25.0/256.0;
-  prolongation[1](41,40) = -75.0/256.0;
-  prolongation[1](41,41) = 225.0/256.0;
-  prolongation[1](41,42) = 25.0/256.0;
-  prolongation[1](41,43) = -75.0/256.0;
-  prolongation[1](42,41) = 1.0;
-  prolongation[1](43,24) = 1.0/16.0;
-  prolongation[1](43,26) = 5.0/16.0;
-  prolongation[1](43,40) = -5.0/16.0;
-  prolongation[1](43,41) = 15.0/16.0;
-  prolongation[1](44,1) = 25.0/256.0;
-  prolongation[1](44,2) = 5.0/256.0;
-  prolongation[1](44,5) = 5.0/256.0;
-  prolongation[1](44,6) = 1.0/256.0;
-  prolongation[1](44,10) = 75.0/256.0;
-  prolongation[1](44,11) = -25.0/256.0;
-  prolongation[1](44,18) = 15.0/256.0;
-  prolongation[1](44,19) = -5.0/256.0;
-  prolongation[1](44,26) = 75.0/256.0;
-  prolongation[1](44,27) = -25.0/256.0;
-  prolongation[1](44,28) = 15.0/256.0;
-  prolongation[1](44,29) = -5.0/256.0;
-  prolongation[1](44,44) = 225.0/256.0;
-  prolongation[1](44,45) = -75.0/256.0;
-  prolongation[1](44,46) = -75.0/256.0;
-  prolongation[1](44,47) = 25.0/256.0;
-  prolongation[1](45,26) = 5.0/16.0;
-  prolongation[1](45,28) = 1.0/16.0;
-  prolongation[1](45,44) = 15.0/16.0;
-  prolongation[1](45,46) = -5.0/16.0;
-  prolongation[1](46,10) = 5.0/16.0;
-  prolongation[1](46,18) = 1.0/16.0;
-  prolongation[1](46,44) = 15.0/16.0;
-  prolongation[1](46,45) = -5.0/16.0;
-  prolongation[1](47,44) = 1.0;
-  prolongation[1](48,9) = -5.0/256.0;
-  prolongation[1](48,13) = -5.0/256.0;
-  prolongation[1](48,17) = -1.0/256.0;
-  prolongation[1](48,21) = -1.0/256.0;
-  prolongation[1](48,33) = 45.0/256.0;
-  prolongation[1](48,35) = 45.0/256.0;
-  prolongation[1](48,37) = 9.0/256.0;
-  prolongation[1](48,39) = 9.0/256.0;
-  prolongation[1](48,41) = -15.0/256.0;
-  prolongation[1](48,43) = 5.0/256.0;
-  prolongation[1](48,49) = -15.0/256.0;
-  prolongation[1](48,51) = 5.0/256.0;
-  prolongation[1](48,57) = 135.0/256.0;
-  prolongation[1](48,59) = -45.0/256.0;
-  prolongation[1](48,61) = 135.0/256.0;
-  prolongation[1](48,63) = -45.0/256.0;
-  prolongation[1](49,0) = -5.0/4096.0;
-  prolongation[1](49,1) = -25.0/4096.0;
-  prolongation[1](49,2) = -25.0/4096.0;
-  prolongation[1](49,3) = -5.0/4096.0;
-  prolongation[1](49,4) = -1.0/4096.0;
-  prolongation[1](49,5) = -5.0/4096.0;
-  prolongation[1](49,6) = -5.0/4096.0;
-  prolongation[1](49,7) = -1.0/4096.0;
-  prolongation[1](49,8) = 25.0/4096.0;
-  prolongation[1](49,9) = -75.0/4096.0;
-  prolongation[1](49,10) = 225.0/4096.0;
-  prolongation[1](49,11) = 225.0/4096.0;
-  prolongation[1](49,12) = 25.0/4096.0;
-  prolongation[1](49,13) = -75.0/4096.0;
-  prolongation[1](49,14) = 45.0/4096.0;
-  prolongation[1](49,15) = 45.0/4096.0;
-  prolongation[1](49,16) = 5.0/4096.0;
-  prolongation[1](49,17) = -15.0/4096.0;
-  prolongation[1](49,18) = 45.0/4096.0;
-  prolongation[1](49,19) = 45.0/4096.0;
-  prolongation[1](49,20) = 5.0/4096.0;
-  prolongation[1](49,21) = -15.0/4096.0;
-  prolongation[1](49,22) = 9.0/4096.0;
-  prolongation[1](49,23) = 9.0/4096.0;
-  prolongation[1](49,24) = -15.0/4096.0;
-  prolongation[1](49,25) = 5.0/4096.0;
-  prolongation[1](49,26) = -75.0/4096.0;
-  prolongation[1](49,27) = 25.0/4096.0;
-  prolongation[1](49,28) = -75.0/4096.0;
-  prolongation[1](49,29) = 25.0/4096.0;
-  prolongation[1](49,30) = -15.0/4096.0;
-  prolongation[1](49,31) = 5.0/4096.0;
-  prolongation[1](49,32) = -225.0/4096.0;
-  prolongation[1](49,33) = 675.0/4096.0;
-  prolongation[1](49,34) = -225.0/4096.0;
-  prolongation[1](49,35) = 675.0/4096.0;
-  prolongation[1](49,36) = -45.0/4096.0;
-  prolongation[1](49,37) = 135.0/4096.0;
-  prolongation[1](49,38) = -45.0/4096.0;
-  prolongation[1](49,39) = 135.0/4096.0;
-  prolongation[1](49,40) = 75.0/4096.0;
-  prolongation[1](49,41) = -225.0/4096.0;
-  prolongation[1](49,42) = -25.0/4096.0;
-  prolongation[1](49,43) = 75.0/4096.0;
-  prolongation[1](49,44) = 675.0/4096.0;
-  prolongation[1](49,45) = -225.0/4096.0;
-  prolongation[1](49,46) = 675.0/4096.0;
-  prolongation[1](49,47) = -225.0/4096.0;
-  prolongation[1](49,48) = 75.0/4096.0;
-  prolongation[1](49,49) = -225.0/4096.0;
-  prolongation[1](49,50) = -25.0/4096.0;
-  prolongation[1](49,51) = 75.0/4096.0;
-  prolongation[1](49,52) = 135.0/4096.0;
-  prolongation[1](49,53) = -45.0/4096.0;
-  prolongation[1](49,54) = 135.0/4096.0;
-  prolongation[1](49,55) = -45.0/4096.0;
-  prolongation[1](49,56) = -675.0/4096.0;
-  prolongation[1](49,57) = 2025.0/4096.0;
-  prolongation[1](49,58) = 225.0/4096.0;
-  prolongation[1](49,59) = -675.0/4096.0;
-  prolongation[1](49,60) = -675.0/4096.0;
-  prolongation[1](49,61) = 2025.0/4096.0;
-  prolongation[1](49,62) = 225.0/4096.0;
-  prolongation[1](49,63) = -675.0/4096.0;
-  prolongation[1](50,41) = -1.0/16.0;
-  prolongation[1](50,49) = -1.0/16.0;
-  prolongation[1](50,57) = 9.0/16.0;
-  prolongation[1](50,61) = 9.0/16.0;
-  prolongation[1](51,24) = -1.0/256.0;
-  prolongation[1](51,26) = -5.0/256.0;
-  prolongation[1](51,28) = -5.0/256.0;
-  prolongation[1](51,30) = -1.0/256.0;
-  prolongation[1](51,40) = 5.0/256.0;
-  prolongation[1](51,41) = -15.0/256.0;
-  prolongation[1](51,44) = 45.0/256.0;
-  prolongation[1](51,46) = 45.0/256.0;
-  prolongation[1](51,48) = 5.0/256.0;
-  prolongation[1](51,49) = -15.0/256.0;
-  prolongation[1](51,52) = 9.0/256.0;
-  prolongation[1](51,54) = 9.0/256.0;
-  prolongation[1](51,56) = -45.0/256.0;
-  prolongation[1](51,57) = 135.0/256.0;
-  prolongation[1](51,60) = -45.0/256.0;
-  prolongation[1](51,61) = 135.0/256.0;
-  prolongation[1](52,0) = -25.0/4096.0;
-  prolongation[1](52,1) = -25.0/4096.0;
-  prolongation[1](52,2) = -5.0/4096.0;
-  prolongation[1](52,3) = -5.0/4096.0;
-  prolongation[1](52,4) = -5.0/4096.0;
-  prolongation[1](52,5) = -5.0/4096.0;
-  prolongation[1](52,6) = -1.0/4096.0;
-  prolongation[1](52,7) = -1.0/4096.0;
-  prolongation[1](52,8) = 225.0/4096.0;
-  prolongation[1](52,9) = 225.0/4096.0;
-  prolongation[1](52,10) = -75.0/4096.0;
-  prolongation[1](52,11) = 25.0/4096.0;
-  prolongation[1](52,12) = 45.0/4096.0;
-  prolongation[1](52,13) = 45.0/4096.0;
-  prolongation[1](52,14) = -75.0/4096.0;
-  prolongation[1](52,15) = 25.0/4096.0;
-  prolongation[1](52,16) = 45.0/4096.0;
-  prolongation[1](52,17) = 45.0/4096.0;
-  prolongation[1](52,18) = -15.0/4096.0;
-  prolongation[1](52,19) = 5.0/4096.0;
-  prolongation[1](52,20) = 9.0/4096.0;
-  prolongation[1](52,21) = 9.0/4096.0;
-  prolongation[1](52,22) = -15.0/4096.0;
-  prolongation[1](52,23) = 5.0/4096.0;
-  prolongation[1](52,24) = -75.0/4096.0;
-  prolongation[1](52,25) = 25.0/4096.0;
-  prolongation[1](52,26) = -75.0/4096.0;
-  prolongation[1](52,27) = 25.0/4096.0;
-  prolongation[1](52,28) = -15.0/4096.0;
-  prolongation[1](52,29) = 5.0/4096.0;
-  prolongation[1](52,30) = -15.0/4096.0;
-  prolongation[1](52,31) = 5.0/4096.0;
-  prolongation[1](52,32) = 675.0/4096.0;
-  prolongation[1](52,33) = 675.0/4096.0;
-  prolongation[1](52,34) = -225.0/4096.0;
-  prolongation[1](52,35) = -225.0/4096.0;
-  prolongation[1](52,36) = 135.0/4096.0;
-  prolongation[1](52,37) = 135.0/4096.0;
-  prolongation[1](52,38) = -45.0/4096.0;
-  prolongation[1](52,39) = -45.0/4096.0;
-  prolongation[1](52,40) = 675.0/4096.0;
-  prolongation[1](52,41) = 675.0/4096.0;
-  prolongation[1](52,42) = -225.0/4096.0;
-  prolongation[1](52,43) = -225.0/4096.0;
-  prolongation[1](52,44) = -225.0/4096.0;
-  prolongation[1](52,45) = 75.0/4096.0;
-  prolongation[1](52,46) = 75.0/4096.0;
-  prolongation[1](52,47) = -25.0/4096.0;
-  prolongation[1](52,48) = 135.0/4096.0;
-  prolongation[1](52,49) = 135.0/4096.0;
-  prolongation[1](52,50) = -45.0/4096.0;
-  prolongation[1](52,51) = -45.0/4096.0;
-  prolongation[1](52,52) = -225.0/4096.0;
-  prolongation[1](52,53) = 75.0/4096.0;
-  prolongation[1](52,54) = 75.0/4096.0;
-  prolongation[1](52,55) = -25.0/4096.0;
-  prolongation[1](52,56) = 2025.0/4096.0;
-  prolongation[1](52,57) = 2025.0/4096.0;
-  prolongation[1](52,58) = -675.0/4096.0;
-  prolongation[1](52,59) = -675.0/4096.0;
-  prolongation[1](52,60) = -675.0/4096.0;
-  prolongation[1](52,61) = -675.0/4096.0;
-  prolongation[1](52,62) = 225.0/4096.0;
-  prolongation[1](52,63) = 225.0/4096.0;
-  prolongation[1](53,24) = -5.0/256.0;
-  prolongation[1](53,26) = -5.0/256.0;
-  prolongation[1](53,28) = -1.0/256.0;
-  prolongation[1](53,30) = -1.0/256.0;
-  prolongation[1](53,40) = 45.0/256.0;
-  prolongation[1](53,41) = 45.0/256.0;
-  prolongation[1](53,44) = -15.0/256.0;
-  prolongation[1](53,46) = 5.0/256.0;
-  prolongation[1](53,48) = 9.0/256.0;
-  prolongation[1](53,49) = 9.0/256.0;
-  prolongation[1](53,52) = -15.0/256.0;
-  prolongation[1](53,54) = 5.0/256.0;
-  prolongation[1](53,56) = 135.0/256.0;
-  prolongation[1](53,57) = 135.0/256.0;
-  prolongation[1](53,60) = -45.0/256.0;
-  prolongation[1](53,61) = -45.0/256.0;
-  prolongation[1](54,10) = -5.0/256.0;
-  prolongation[1](54,14) = -5.0/256.0;
-  prolongation[1](54,18) = -1.0/256.0;
-  prolongation[1](54,22) = -1.0/256.0;
-  prolongation[1](54,32) = 45.0/256.0;
-  prolongation[1](54,33) = 45.0/256.0;
-  prolongation[1](54,36) = 9.0/256.0;
-  prolongation[1](54,37) = 9.0/256.0;
-  prolongation[1](54,44) = -15.0/256.0;
-  prolongation[1](54,45) = 5.0/256.0;
-  prolongation[1](54,52) = -15.0/256.0;
-  prolongation[1](54,53) = 5.0/256.0;
-  prolongation[1](54,56) = 135.0/256.0;
-  prolongation[1](54,57) = 135.0/256.0;
-  prolongation[1](54,58) = -45.0/256.0;
-  prolongation[1](54,59) = -45.0/256.0;
-  prolongation[1](55,44) = -1.0/16.0;
-  prolongation[1](55,52) = -1.0/16.0;
-  prolongation[1](55,56) = 9.0/16.0;
-  prolongation[1](55,57) = 9.0/16.0;
-  prolongation[1](56,9) = 25.0/256.0;
-  prolongation[1](56,13) = 5.0/256.0;
-  prolongation[1](56,17) = 5.0/256.0;
-  prolongation[1](56,21) = 1.0/256.0;
-  prolongation[1](56,33) = 75.0/256.0;
-  prolongation[1](56,35) = -25.0/256.0;
-  prolongation[1](56,37) = 15.0/256.0;
-  prolongation[1](56,39) = -5.0/256.0;
-  prolongation[1](56,41) = 75.0/256.0;
-  prolongation[1](56,43) = -25.0/256.0;
-  prolongation[1](56,49) = 15.0/256.0;
-  prolongation[1](56,51) = -5.0/256.0;
-  prolongation[1](56,57) = 225.0/256.0;
-  prolongation[1](56,59) = -75.0/256.0;
-  prolongation[1](56,61) = -75.0/256.0;
-  prolongation[1](56,63) = 25.0/256.0;
-  prolongation[1](57,0) = 25.0/4096.0;
-  prolongation[1](57,1) = 125.0/4096.0;
-  prolongation[1](57,2) = 25.0/4096.0;
-  prolongation[1](57,3) = 5.0/4096.0;
-  prolongation[1](57,4) = 5.0/4096.0;
-  prolongation[1](57,5) = 25.0/4096.0;
-  prolongation[1](57,6) = 5.0/4096.0;
-  prolongation[1](57,7) = 1.0/4096.0;
-  prolongation[1](57,8) = -125.0/4096.0;
-  prolongation[1](57,9) = 375.0/4096.0;
-  prolongation[1](57,10) = 375.0/4096.0;
-  prolongation[1](57,11) = -125.0/4096.0;
-  prolongation[1](57,12) = -25.0/4096.0;
-  prolongation[1](57,13) = 75.0/4096.0;
-  prolongation[1](57,14) = 75.0/4096.0;
-  prolongation[1](57,15) = -25.0/4096.0;
-  prolongation[1](57,16) = -25.0/4096.0;
-  prolongation[1](57,17) = 75.0/4096.0;
-  prolongation[1](57,18) = 75.0/4096.0;
-  prolongation[1](57,19) = -25.0/4096.0;
-  prolongation[1](57,20) = -5.0/4096.0;
-  prolongation[1](57,21) = 15.0/4096.0;
-  prolongation[1](57,22) = 15.0/4096.0;
-  prolongation[1](57,23) = -5.0/4096.0;
-  prolongation[1](57,24) = 75.0/4096.0;
-  prolongation[1](57,25) = -25.0/4096.0;
-  prolongation[1](57,26) = 375.0/4096.0;
-  prolongation[1](57,27) = -125.0/4096.0;
-  prolongation[1](57,28) = 75.0/4096.0;
-  prolongation[1](57,29) = -25.0/4096.0;
-  prolongation[1](57,30) = 15.0/4096.0;
-  prolongation[1](57,31) = -5.0/4096.0;
-  prolongation[1](57,32) = -375.0/4096.0;
-  prolongation[1](57,33) = 1125.0/4096.0;
-  prolongation[1](57,34) = 125.0/4096.0;
-  prolongation[1](57,35) = -375.0/4096.0;
-  prolongation[1](57,36) = -75.0/4096.0;
-  prolongation[1](57,37) = 225.0/4096.0;
-  prolongation[1](57,38) = 25.0/4096.0;
-  prolongation[1](57,39) = -75.0/4096.0;
-  prolongation[1](57,40) = -375.0/4096.0;
-  prolongation[1](57,41) = 1125.0/4096.0;
-  prolongation[1](57,42) = 125.0/4096.0;
-  prolongation[1](57,43) = -375.0/4096.0;
-  prolongation[1](57,44) = 1125.0/4096.0;
-  prolongation[1](57,45) = -375.0/4096.0;
-  prolongation[1](57,46) = -375.0/4096.0;
-  prolongation[1](57,47) = 125.0/4096.0;
-  prolongation[1](57,48) = -75.0/4096.0;
-  prolongation[1](57,49) = 225.0/4096.0;
-  prolongation[1](57,50) = 25.0/4096.0;
-  prolongation[1](57,51) = -75.0/4096.0;
-  prolongation[1](57,52) = 225.0/4096.0;
-  prolongation[1](57,53) = -75.0/4096.0;
-  prolongation[1](57,54) = -75.0/4096.0;
-  prolongation[1](57,55) = 25.0/4096.0;
-  prolongation[1](57,56) = -1125.0/4096.0;
-  prolongation[1](57,57) = 3375.0/4096.0;
-  prolongation[1](57,58) = 375.0/4096.0;
-  prolongation[1](57,59) = -1125.0/4096.0;
-  prolongation[1](57,60) = 375.0/4096.0;
-  prolongation[1](57,61) = -1125.0/4096.0;
-  prolongation[1](57,62) = -125.0/4096.0;
-  prolongation[1](57,63) = 375.0/4096.0;
-  prolongation[1](58,41) = 5.0/16.0;
-  prolongation[1](58,49) = 1.0/16.0;
-  prolongation[1](58,57) = 15.0/16.0;
-  prolongation[1](58,61) = -5.0/16.0;
-  prolongation[1](59,24) = 5.0/256.0;
-  prolongation[1](59,26) = 25.0/256.0;
-  prolongation[1](59,28) = 5.0/256.0;
-  prolongation[1](59,30) = 1.0/256.0;
-  prolongation[1](59,40) = -25.0/256.0;
-  prolongation[1](59,41) = 75.0/256.0;
-  prolongation[1](59,44) = 75.0/256.0;
-  prolongation[1](59,46) = -25.0/256.0;
-  prolongation[1](59,48) = -5.0/256.0;
-  prolongation[1](59,49) = 15.0/256.0;
-  prolongation[1](59,52) = 15.0/256.0;
-  prolongation[1](59,54) = -5.0/256.0;
-  prolongation[1](59,56) = -75.0/256.0;
-  prolongation[1](59,57) = 225.0/256.0;
-  prolongation[1](59,60) = 25.0/256.0;
-  prolongation[1](59,61) = -75.0/256.0;
-  prolongation[1](60,33) = 5.0/16.0;
-  prolongation[1](60,37) = 1.0/16.0;
-  prolongation[1](60,57) = 15.0/16.0;
-  prolongation[1](60,59) = -5.0/16.0;
-  prolongation[1](61,10) = 25.0/256.0;
-  prolongation[1](61,14) = 5.0/256.0;
-  prolongation[1](61,18) = 5.0/256.0;
-  prolongation[1](61,22) = 1.0/256.0;
-  prolongation[1](61,32) = -25.0/256.0;
-  prolongation[1](61,33) = 75.0/256.0;
-  prolongation[1](61,36) = -5.0/256.0;
-  prolongation[1](61,37) = 15.0/256.0;
-  prolongation[1](61,44) = 75.0/256.0;
-  prolongation[1](61,45) = -25.0/256.0;
-  prolongation[1](61,52) = 15.0/256.0;
-  prolongation[1](61,53) = -5.0/256.0;
-  prolongation[1](61,56) = -75.0/256.0;
-  prolongation[1](61,57) = 225.0/256.0;
-  prolongation[1](61,58) = 25.0/256.0;
-  prolongation[1](61,59) = -75.0/256.0;
-  prolongation[1](62,57) = 1.0;
-  prolongation[1](63,44) = 5.0/16.0;
-  prolongation[1](63,52) = 1.0/16.0;
-  prolongation[1](63,56) = -5.0/16.0;
-  prolongation[1](63,57) = 15.0/16.0;
-  prolongation[2](0,0) = 1.0/256.0;
-  prolongation[2](0,1) = 1.0/256.0;
-  prolongation[2](0,2) = 1.0/256.0;
-  prolongation[2](0,3) = 1.0/256.0;
-  prolongation[2](0,8) = -9.0/256.0;
-  prolongation[2](0,9) = -9.0/256.0;
-  prolongation[2](0,10) = -9.0/256.0;
-  prolongation[2](0,11) = -9.0/256.0;
-  prolongation[2](0,12) = -9.0/256.0;
-  prolongation[2](0,13) = -9.0/256.0;
-  prolongation[2](0,14) = -9.0/256.0;
-  prolongation[2](0,15) = -9.0/256.0;
-  prolongation[2](0,32) = 81.0/256.0;
-  prolongation[2](0,33) = 81.0/256.0;
-  prolongation[2](0,34) = 81.0/256.0;
-  prolongation[2](0,35) = 81.0/256.0;
-  prolongation[2](1,1) = -1.0/16.0;
-  prolongation[2](1,2) = -1.0/16.0;
-  prolongation[2](1,10) = 9.0/16.0;
-  prolongation[2](1,11) = 9.0/16.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](3,2) = -1.0/16.0;
-  prolongation[2](3,3) = -1.0/16.0;
-  prolongation[2](3,12) = 9.0/16.0;
-  prolongation[2](3,13) = 9.0/16.0;
-  prolongation[2](4,0) = -1.0/4096.0;
-  prolongation[2](4,1) = -1.0/4096.0;
-  prolongation[2](4,2) = -1.0/4096.0;
-  prolongation[2](4,3) = -1.0/4096.0;
-  prolongation[2](4,4) = -1.0/4096.0;
-  prolongation[2](4,5) = -1.0/4096.0;
-  prolongation[2](4,6) = -1.0/4096.0;
-  prolongation[2](4,7) = -1.0/4096.0;
-  prolongation[2](4,8) = 9.0/4096.0;
-  prolongation[2](4,9) = 9.0/4096.0;
-  prolongation[2](4,10) = 9.0/4096.0;
-  prolongation[2](4,11) = 9.0/4096.0;
-  prolongation[2](4,12) = 9.0/4096.0;
-  prolongation[2](4,13) = 9.0/4096.0;
-  prolongation[2](4,14) = 9.0/4096.0;
-  prolongation[2](4,15) = 9.0/4096.0;
-  prolongation[2](4,16) = 9.0/4096.0;
-  prolongation[2](4,17) = 9.0/4096.0;
-  prolongation[2](4,18) = 9.0/4096.0;
-  prolongation[2](4,19) = 9.0/4096.0;
-  prolongation[2](4,20) = 9.0/4096.0;
-  prolongation[2](4,21) = 9.0/4096.0;
-  prolongation[2](4,22) = 9.0/4096.0;
-  prolongation[2](4,23) = 9.0/4096.0;
-  prolongation[2](4,24) = 9.0/4096.0;
-  prolongation[2](4,25) = 9.0/4096.0;
-  prolongation[2](4,26) = 9.0/4096.0;
-  prolongation[2](4,27) = 9.0/4096.0;
-  prolongation[2](4,28) = 9.0/4096.0;
-  prolongation[2](4,29) = 9.0/4096.0;
-  prolongation[2](4,30) = 9.0/4096.0;
-  prolongation[2](4,31) = 9.0/4096.0;
-  prolongation[2](4,32) = -81.0/4096.0;
-  prolongation[2](4,33) = -81.0/4096.0;
-  prolongation[2](4,34) = -81.0/4096.0;
-  prolongation[2](4,35) = -81.0/4096.0;
-  prolongation[2](4,36) = -81.0/4096.0;
-  prolongation[2](4,37) = -81.0/4096.0;
-  prolongation[2](4,38) = -81.0/4096.0;
-  prolongation[2](4,39) = -81.0/4096.0;
-  prolongation[2](4,40) = -81.0/4096.0;
-  prolongation[2](4,41) = -81.0/4096.0;
-  prolongation[2](4,42) = -81.0/4096.0;
-  prolongation[2](4,43) = -81.0/4096.0;
-  prolongation[2](4,44) = -81.0/4096.0;
-  prolongation[2](4,45) = -81.0/4096.0;
-  prolongation[2](4,46) = -81.0/4096.0;
-  prolongation[2](4,47) = -81.0/4096.0;
-  prolongation[2](4,48) = -81.0/4096.0;
-  prolongation[2](4,49) = -81.0/4096.0;
-  prolongation[2](4,50) = -81.0/4096.0;
-  prolongation[2](4,51) = -81.0/4096.0;
-  prolongation[2](4,52) = -81.0/4096.0;
-  prolongation[2](4,53) = -81.0/4096.0;
-  prolongation[2](4,54) = -81.0/4096.0;
-  prolongation[2](4,55) = -81.0/4096.0;
-  prolongation[2](4,56) = 729.0/4096.0;
-  prolongation[2](4,57) = 729.0/4096.0;
-  prolongation[2](4,58) = 729.0/4096.0;
-  prolongation[2](4,59) = 729.0/4096.0;
-  prolongation[2](4,60) = 729.0/4096.0;
-  prolongation[2](4,61) = 729.0/4096.0;
-  prolongation[2](4,62) = 729.0/4096.0;
-  prolongation[2](4,63) = 729.0/4096.0;
-  prolongation[2](5,1) = 1.0/256.0;
-  prolongation[2](5,2) = 1.0/256.0;
-  prolongation[2](5,5) = 1.0/256.0;
-  prolongation[2](5,6) = 1.0/256.0;
-  prolongation[2](5,10) = -9.0/256.0;
-  prolongation[2](5,11) = -9.0/256.0;
-  prolongation[2](5,18) = -9.0/256.0;
-  prolongation[2](5,19) = -9.0/256.0;
-  prolongation[2](5,26) = -9.0/256.0;
-  prolongation[2](5,27) = -9.0/256.0;
-  prolongation[2](5,28) = -9.0/256.0;
-  prolongation[2](5,29) = -9.0/256.0;
-  prolongation[2](5,44) = 81.0/256.0;
-  prolongation[2](5,45) = 81.0/256.0;
-  prolongation[2](5,46) = 81.0/256.0;
-  prolongation[2](5,47) = 81.0/256.0;
-  prolongation[2](6,2) = -1.0/16.0;
-  prolongation[2](6,6) = -1.0/16.0;
-  prolongation[2](6,28) = 9.0/16.0;
-  prolongation[2](6,29) = 9.0/16.0;
-  prolongation[2](7,2) = 1.0/256.0;
-  prolongation[2](7,3) = 1.0/256.0;
-  prolongation[2](7,6) = 1.0/256.0;
-  prolongation[2](7,7) = 1.0/256.0;
-  prolongation[2](7,12) = -9.0/256.0;
-  prolongation[2](7,13) = -9.0/256.0;
-  prolongation[2](7,20) = -9.0/256.0;
-  prolongation[2](7,21) = -9.0/256.0;
-  prolongation[2](7,28) = -9.0/256.0;
-  prolongation[2](7,29) = -9.0/256.0;
-  prolongation[2](7,30) = -9.0/256.0;
-  prolongation[2](7,31) = -9.0/256.0;
-  prolongation[2](7,48) = 81.0/256.0;
-  prolongation[2](7,49) = 81.0/256.0;
-  prolongation[2](7,50) = 81.0/256.0;
-  prolongation[2](7,51) = 81.0/256.0;
-  prolongation[2](8,9) = -1.0/16.0;
-  prolongation[2](8,13) = -1.0/16.0;
-  prolongation[2](8,33) = 9.0/16.0;
-  prolongation[2](8,35) = 9.0/16.0;
-  prolongation[2](9,0) = -1.0/256.0;
-  prolongation[2](9,1) = -5.0/256.0;
-  prolongation[2](9,2) = -5.0/256.0;
-  prolongation[2](9,3) = -1.0/256.0;
-  prolongation[2](9,8) = 5.0/256.0;
-  prolongation[2](9,9) = -15.0/256.0;
-  prolongation[2](9,10) = 45.0/256.0;
-  prolongation[2](9,11) = 45.0/256.0;
-  prolongation[2](9,12) = 5.0/256.0;
-  prolongation[2](9,13) = -15.0/256.0;
-  prolongation[2](9,14) = 9.0/256.0;
-  prolongation[2](9,15) = 9.0/256.0;
-  prolongation[2](9,32) = -45.0/256.0;
-  prolongation[2](9,33) = 135.0/256.0;
-  prolongation[2](9,34) = -45.0/256.0;
-  prolongation[2](9,35) = 135.0/256.0;
-  prolongation[2](10,11) = 1.0;
-  prolongation[2](11,1) = 1.0/16.0;
-  prolongation[2](11,2) = 5.0/16.0;
-  prolongation[2](11,10) = -5.0/16.0;
-  prolongation[2](11,11) = 15.0/16.0;
-  prolongation[2](12,13) = 1.0;
-  prolongation[2](13,2) = 5.0/16.0;
-  prolongation[2](13,3) = 1.0/16.0;
-  prolongation[2](13,12) = -5.0/16.0;
-  prolongation[2](13,13) = 15.0/16.0;
-  prolongation[2](14,11) = -1.0/16.0;
-  prolongation[2](14,15) = -1.0/16.0;
-  prolongation[2](14,34) = 9.0/16.0;
-  prolongation[2](14,35) = 9.0/16.0;
-  prolongation[2](15,0) = -1.0/256.0;
-  prolongation[2](15,1) = -1.0/256.0;
-  prolongation[2](15,2) = -5.0/256.0;
-  prolongation[2](15,3) = -5.0/256.0;
-  prolongation[2](15,8) = 9.0/256.0;
-  prolongation[2](15,9) = 9.0/256.0;
-  prolongation[2](15,10) = 5.0/256.0;
-  prolongation[2](15,11) = -15.0/256.0;
-  prolongation[2](15,12) = 45.0/256.0;
-  prolongation[2](15,13) = 45.0/256.0;
-  prolongation[2](15,14) = 5.0/256.0;
-  prolongation[2](15,15) = -15.0/256.0;
-  prolongation[2](15,32) = -45.0/256.0;
-  prolongation[2](15,33) = -45.0/256.0;
-  prolongation[2](15,34) = 135.0/256.0;
-  prolongation[2](15,35) = 135.0/256.0;
-  prolongation[2](16,9) = 1.0/256.0;
-  prolongation[2](16,13) = 1.0/256.0;
-  prolongation[2](16,17) = 1.0/256.0;
-  prolongation[2](16,21) = 1.0/256.0;
-  prolongation[2](16,33) = -9.0/256.0;
-  prolongation[2](16,35) = -9.0/256.0;
-  prolongation[2](16,37) = -9.0/256.0;
-  prolongation[2](16,39) = -9.0/256.0;
-  prolongation[2](16,41) = -9.0/256.0;
-  prolongation[2](16,43) = -9.0/256.0;
-  prolongation[2](16,49) = -9.0/256.0;
-  prolongation[2](16,51) = -9.0/256.0;
-  prolongation[2](16,57) = 81.0/256.0;
-  prolongation[2](16,59) = 81.0/256.0;
-  prolongation[2](16,61) = 81.0/256.0;
-  prolongation[2](16,63) = 81.0/256.0;
-  prolongation[2](17,0) = 1.0/4096.0;
-  prolongation[2](17,1) = 5.0/4096.0;
-  prolongation[2](17,2) = 5.0/4096.0;
-  prolongation[2](17,3) = 1.0/4096.0;
-  prolongation[2](17,4) = 1.0/4096.0;
-  prolongation[2](17,5) = 5.0/4096.0;
-  prolongation[2](17,6) = 5.0/4096.0;
-  prolongation[2](17,7) = 1.0/4096.0;
-  prolongation[2](17,8) = -5.0/4096.0;
-  prolongation[2](17,9) = 15.0/4096.0;
-  prolongation[2](17,10) = -45.0/4096.0;
-  prolongation[2](17,11) = -45.0/4096.0;
-  prolongation[2](17,12) = -5.0/4096.0;
-  prolongation[2](17,13) = 15.0/4096.0;
-  prolongation[2](17,14) = -9.0/4096.0;
-  prolongation[2](17,15) = -9.0/4096.0;
-  prolongation[2](17,16) = -5.0/4096.0;
-  prolongation[2](17,17) = 15.0/4096.0;
-  prolongation[2](17,18) = -45.0/4096.0;
-  prolongation[2](17,19) = -45.0/4096.0;
-  prolongation[2](17,20) = -5.0/4096.0;
-  prolongation[2](17,21) = 15.0/4096.0;
-  prolongation[2](17,22) = -9.0/4096.0;
-  prolongation[2](17,23) = -9.0/4096.0;
-  prolongation[2](17,24) = -9.0/4096.0;
-  prolongation[2](17,25) = -9.0/4096.0;
-  prolongation[2](17,26) = -45.0/4096.0;
-  prolongation[2](17,27) = -45.0/4096.0;
-  prolongation[2](17,28) = -45.0/4096.0;
-  prolongation[2](17,29) = -45.0/4096.0;
-  prolongation[2](17,30) = -9.0/4096.0;
-  prolongation[2](17,31) = -9.0/4096.0;
-  prolongation[2](17,32) = 45.0/4096.0;
-  prolongation[2](17,33) = -135.0/4096.0;
-  prolongation[2](17,34) = 45.0/4096.0;
-  prolongation[2](17,35) = -135.0/4096.0;
-  prolongation[2](17,36) = 45.0/4096.0;
-  prolongation[2](17,37) = -135.0/4096.0;
-  prolongation[2](17,38) = 45.0/4096.0;
-  prolongation[2](17,39) = -135.0/4096.0;
-  prolongation[2](17,40) = 45.0/4096.0;
-  prolongation[2](17,41) = -135.0/4096.0;
-  prolongation[2](17,42) = 45.0/4096.0;
-  prolongation[2](17,43) = -135.0/4096.0;
-  prolongation[2](17,44) = 405.0/4096.0;
-  prolongation[2](17,45) = 405.0/4096.0;
-  prolongation[2](17,46) = 405.0/4096.0;
-  prolongation[2](17,47) = 405.0/4096.0;
-  prolongation[2](17,48) = 45.0/4096.0;
-  prolongation[2](17,49) = -135.0/4096.0;
-  prolongation[2](17,50) = 45.0/4096.0;
-  prolongation[2](17,51) = -135.0/4096.0;
-  prolongation[2](17,52) = 81.0/4096.0;
-  prolongation[2](17,53) = 81.0/4096.0;
-  prolongation[2](17,54) = 81.0/4096.0;
-  prolongation[2](17,55) = 81.0/4096.0;
-  prolongation[2](17,56) = -405.0/4096.0;
-  prolongation[2](17,57) = 1215.0/4096.0;
-  prolongation[2](17,58) = -405.0/4096.0;
-  prolongation[2](17,59) = 1215.0/4096.0;
-  prolongation[2](17,60) = -405.0/4096.0;
-  prolongation[2](17,61) = 1215.0/4096.0;
-  prolongation[2](17,62) = -405.0/4096.0;
-  prolongation[2](17,63) = 1215.0/4096.0;
-  prolongation[2](18,11) = -1.0/16.0;
-  prolongation[2](18,19) = -1.0/16.0;
-  prolongation[2](18,46) = 9.0/16.0;
-  prolongation[2](18,47) = 9.0/16.0;
-  prolongation[2](19,1) = -1.0/256.0;
-  prolongation[2](19,2) = -5.0/256.0;
-  prolongation[2](19,5) = -1.0/256.0;
-  prolongation[2](19,6) = -5.0/256.0;
-  prolongation[2](19,10) = 5.0/256.0;
-  prolongation[2](19,11) = -15.0/256.0;
-  prolongation[2](19,18) = 5.0/256.0;
-  prolongation[2](19,19) = -15.0/256.0;
-  prolongation[2](19,26) = 9.0/256.0;
-  prolongation[2](19,27) = 9.0/256.0;
-  prolongation[2](19,28) = 45.0/256.0;
-  prolongation[2](19,29) = 45.0/256.0;
-  prolongation[2](19,44) = -45.0/256.0;
-  prolongation[2](19,45) = -45.0/256.0;
-  prolongation[2](19,46) = 135.0/256.0;
-  prolongation[2](19,47) = 135.0/256.0;
-  prolongation[2](20,13) = -1.0/16.0;
-  prolongation[2](20,21) = -1.0/16.0;
-  prolongation[2](20,49) = 9.0/16.0;
-  prolongation[2](20,51) = 9.0/16.0;
-  prolongation[2](21,2) = -5.0/256.0;
-  prolongation[2](21,3) = -1.0/256.0;
-  prolongation[2](21,6) = -5.0/256.0;
-  prolongation[2](21,7) = -1.0/256.0;
-  prolongation[2](21,12) = 5.0/256.0;
-  prolongation[2](21,13) = -15.0/256.0;
-  prolongation[2](21,20) = 5.0/256.0;
-  prolongation[2](21,21) = -15.0/256.0;
-  prolongation[2](21,28) = 45.0/256.0;
-  prolongation[2](21,29) = 45.0/256.0;
-  prolongation[2](21,30) = 9.0/256.0;
-  prolongation[2](21,31) = 9.0/256.0;
-  prolongation[2](21,48) = -45.0/256.0;
-  prolongation[2](21,49) = 135.0/256.0;
-  prolongation[2](21,50) = -45.0/256.0;
-  prolongation[2](21,51) = 135.0/256.0;
-  prolongation[2](22,11) = 1.0/256.0;
-  prolongation[2](22,15) = 1.0/256.0;
-  prolongation[2](22,19) = 1.0/256.0;
-  prolongation[2](22,23) = 1.0/256.0;
-  prolongation[2](22,34) = -9.0/256.0;
-  prolongation[2](22,35) = -9.0/256.0;
-  prolongation[2](22,38) = -9.0/256.0;
-  prolongation[2](22,39) = -9.0/256.0;
-  prolongation[2](22,46) = -9.0/256.0;
-  prolongation[2](22,47) = -9.0/256.0;
-  prolongation[2](22,54) = -9.0/256.0;
-  prolongation[2](22,55) = -9.0/256.0;
-  prolongation[2](22,60) = 81.0/256.0;
-  prolongation[2](22,61) = 81.0/256.0;
-  prolongation[2](22,62) = 81.0/256.0;
-  prolongation[2](22,63) = 81.0/256.0;
-  prolongation[2](23,0) = 1.0/4096.0;
-  prolongation[2](23,1) = 1.0/4096.0;
-  prolongation[2](23,2) = 5.0/4096.0;
-  prolongation[2](23,3) = 5.0/4096.0;
-  prolongation[2](23,4) = 1.0/4096.0;
-  prolongation[2](23,5) = 1.0/4096.0;
-  prolongation[2](23,6) = 5.0/4096.0;
-  prolongation[2](23,7) = 5.0/4096.0;
-  prolongation[2](23,8) = -9.0/4096.0;
-  prolongation[2](23,9) = -9.0/4096.0;
-  prolongation[2](23,10) = -5.0/4096.0;
-  prolongation[2](23,11) = 15.0/4096.0;
-  prolongation[2](23,12) = -45.0/4096.0;
-  prolongation[2](23,13) = -45.0/4096.0;
-  prolongation[2](23,14) = -5.0/4096.0;
-  prolongation[2](23,15) = 15.0/4096.0;
-  prolongation[2](23,16) = -9.0/4096.0;
-  prolongation[2](23,17) = -9.0/4096.0;
-  prolongation[2](23,18) = -5.0/4096.0;
-  prolongation[2](23,19) = 15.0/4096.0;
-  prolongation[2](23,20) = -45.0/4096.0;
-  prolongation[2](23,21) = -45.0/4096.0;
-  prolongation[2](23,22) = -5.0/4096.0;
-  prolongation[2](23,23) = 15.0/4096.0;
-  prolongation[2](23,24) = -9.0/4096.0;
-  prolongation[2](23,25) = -9.0/4096.0;
-  prolongation[2](23,26) = -9.0/4096.0;
-  prolongation[2](23,27) = -9.0/4096.0;
-  prolongation[2](23,28) = -45.0/4096.0;
-  prolongation[2](23,29) = -45.0/4096.0;
-  prolongation[2](23,30) = -45.0/4096.0;
-  prolongation[2](23,31) = -45.0/4096.0;
-  prolongation[2](23,32) = 45.0/4096.0;
-  prolongation[2](23,33) = 45.0/4096.0;
-  prolongation[2](23,34) = -135.0/4096.0;
-  prolongation[2](23,35) = -135.0/4096.0;
-  prolongation[2](23,36) = 45.0/4096.0;
-  prolongation[2](23,37) = 45.0/4096.0;
-  prolongation[2](23,38) = -135.0/4096.0;
-  prolongation[2](23,39) = -135.0/4096.0;
-  prolongation[2](23,40) = 81.0/4096.0;
-  prolongation[2](23,41) = 81.0/4096.0;
-  prolongation[2](23,42) = 81.0/4096.0;
-  prolongation[2](23,43) = 81.0/4096.0;
-  prolongation[2](23,44) = 45.0/4096.0;
-  prolongation[2](23,45) = 45.0/4096.0;
-  prolongation[2](23,46) = -135.0/4096.0;
-  prolongation[2](23,47) = -135.0/4096.0;
-  prolongation[2](23,48) = 405.0/4096.0;
-  prolongation[2](23,49) = 405.0/4096.0;
-  prolongation[2](23,50) = 405.0/4096.0;
-  prolongation[2](23,51) = 405.0/4096.0;
-  prolongation[2](23,52) = 45.0/4096.0;
-  prolongation[2](23,53) = 45.0/4096.0;
-  prolongation[2](23,54) = -135.0/4096.0;
-  prolongation[2](23,55) = -135.0/4096.0;
-  prolongation[2](23,56) = -405.0/4096.0;
-  prolongation[2](23,57) = -405.0/4096.0;
-  prolongation[2](23,58) = -405.0/4096.0;
-  prolongation[2](23,59) = -405.0/4096.0;
-  prolongation[2](23,60) = 1215.0/4096.0;
-  prolongation[2](23,61) = 1215.0/4096.0;
-  prolongation[2](23,62) = 1215.0/4096.0;
-  prolongation[2](23,63) = 1215.0/4096.0;
-  prolongation[2](24,0) = 5.0/4096.0;
-  prolongation[2](24,1) = 5.0/4096.0;
-  prolongation[2](24,2) = 5.0/4096.0;
-  prolongation[2](24,3) = 5.0/4096.0;
-  prolongation[2](24,4) = 1.0/4096.0;
-  prolongation[2](24,5) = 1.0/4096.0;
-  prolongation[2](24,6) = 1.0/4096.0;
-  prolongation[2](24,7) = 1.0/4096.0;
-  prolongation[2](24,8) = -45.0/4096.0;
-  prolongation[2](24,9) = -45.0/4096.0;
-  prolongation[2](24,10) = -45.0/4096.0;
-  prolongation[2](24,11) = -45.0/4096.0;
-  prolongation[2](24,12) = -45.0/4096.0;
-  prolongation[2](24,13) = -45.0/4096.0;
-  prolongation[2](24,14) = -45.0/4096.0;
-  prolongation[2](24,15) = -45.0/4096.0;
-  prolongation[2](24,16) = -9.0/4096.0;
-  prolongation[2](24,17) = -9.0/4096.0;
-  prolongation[2](24,18) = -9.0/4096.0;
-  prolongation[2](24,19) = -9.0/4096.0;
-  prolongation[2](24,20) = -9.0/4096.0;
-  prolongation[2](24,21) = -9.0/4096.0;
-  prolongation[2](24,22) = -9.0/4096.0;
-  prolongation[2](24,23) = -9.0/4096.0;
-  prolongation[2](24,24) = 15.0/4096.0;
-  prolongation[2](24,25) = -5.0/4096.0;
-  prolongation[2](24,26) = 15.0/4096.0;
-  prolongation[2](24,27) = -5.0/4096.0;
-  prolongation[2](24,28) = 15.0/4096.0;
-  prolongation[2](24,29) = -5.0/4096.0;
-  prolongation[2](24,30) = 15.0/4096.0;
-  prolongation[2](24,31) = -5.0/4096.0;
-  prolongation[2](24,32) = 405.0/4096.0;
-  prolongation[2](24,33) = 405.0/4096.0;
-  prolongation[2](24,34) = 405.0/4096.0;
-  prolongation[2](24,35) = 405.0/4096.0;
-  prolongation[2](24,36) = 81.0/4096.0;
-  prolongation[2](24,37) = 81.0/4096.0;
-  prolongation[2](24,38) = 81.0/4096.0;
-  prolongation[2](24,39) = 81.0/4096.0;
-  prolongation[2](24,40) = -135.0/4096.0;
-  prolongation[2](24,41) = -135.0/4096.0;
-  prolongation[2](24,42) = 45.0/4096.0;
-  prolongation[2](24,43) = 45.0/4096.0;
-  prolongation[2](24,44) = -135.0/4096.0;
-  prolongation[2](24,45) = 45.0/4096.0;
-  prolongation[2](24,46) = -135.0/4096.0;
-  prolongation[2](24,47) = 45.0/4096.0;
-  prolongation[2](24,48) = -135.0/4096.0;
-  prolongation[2](24,49) = -135.0/4096.0;
-  prolongation[2](24,50) = 45.0/4096.0;
-  prolongation[2](24,51) = 45.0/4096.0;
-  prolongation[2](24,52) = -135.0/4096.0;
-  prolongation[2](24,53) = 45.0/4096.0;
-  prolongation[2](24,54) = -135.0/4096.0;
-  prolongation[2](24,55) = 45.0/4096.0;
-  prolongation[2](24,56) = 1215.0/4096.0;
-  prolongation[2](24,57) = 1215.0/4096.0;
-  prolongation[2](24,58) = -405.0/4096.0;
-  prolongation[2](24,59) = -405.0/4096.0;
-  prolongation[2](24,60) = 1215.0/4096.0;
-  prolongation[2](24,61) = 1215.0/4096.0;
-  prolongation[2](24,62) = -405.0/4096.0;
-  prolongation[2](24,63) = -405.0/4096.0;
-  prolongation[2](25,24) = 1.0/256.0;
-  prolongation[2](25,26) = 1.0/256.0;
-  prolongation[2](25,28) = 1.0/256.0;
-  prolongation[2](25,30) = 1.0/256.0;
-  prolongation[2](25,40) = -9.0/256.0;
-  prolongation[2](25,41) = -9.0/256.0;
-  prolongation[2](25,44) = -9.0/256.0;
-  prolongation[2](25,46) = -9.0/256.0;
-  prolongation[2](25,48) = -9.0/256.0;
-  prolongation[2](25,49) = -9.0/256.0;
-  prolongation[2](25,52) = -9.0/256.0;
-  prolongation[2](25,54) = -9.0/256.0;
-  prolongation[2](25,56) = 81.0/256.0;
-  prolongation[2](25,57) = 81.0/256.0;
-  prolongation[2](25,60) = 81.0/256.0;
-  prolongation[2](25,61) = 81.0/256.0;
-  prolongation[2](26,1) = -5.0/256.0;
-  prolongation[2](26,2) = -5.0/256.0;
-  prolongation[2](26,5) = -1.0/256.0;
-  prolongation[2](26,6) = -1.0/256.0;
-  prolongation[2](26,10) = 45.0/256.0;
-  prolongation[2](26,11) = 45.0/256.0;
-  prolongation[2](26,18) = 9.0/256.0;
-  prolongation[2](26,19) = 9.0/256.0;
-  prolongation[2](26,26) = -15.0/256.0;
-  prolongation[2](26,27) = 5.0/256.0;
-  prolongation[2](26,28) = -15.0/256.0;
-  prolongation[2](26,29) = 5.0/256.0;
-  prolongation[2](26,44) = 135.0/256.0;
-  prolongation[2](26,45) = -45.0/256.0;
-  prolongation[2](26,46) = 135.0/256.0;
-  prolongation[2](26,47) = -45.0/256.0;
-  prolongation[2](27,26) = -1.0/16.0;
-  prolongation[2](27,28) = -1.0/16.0;
-  prolongation[2](27,44) = 9.0/16.0;
-  prolongation[2](27,46) = 9.0/16.0;
-  prolongation[2](28,2) = 5.0/16.0;
-  prolongation[2](28,6) = 1.0/16.0;
-  prolongation[2](28,28) = 15.0/16.0;
-  prolongation[2](28,29) = -5.0/16.0;
-  prolongation[2](29,28) = 1.0;
-  prolongation[2](30,2) = -5.0/256.0;
-  prolongation[2](30,3) = -5.0/256.0;
-  prolongation[2](30,6) = -1.0/256.0;
-  prolongation[2](30,7) = -1.0/256.0;
-  prolongation[2](30,12) = 45.0/256.0;
-  prolongation[2](30,13) = 45.0/256.0;
-  prolongation[2](30,20) = 9.0/256.0;
-  prolongation[2](30,21) = 9.0/256.0;
-  prolongation[2](30,28) = -15.0/256.0;
-  prolongation[2](30,29) = 5.0/256.0;
-  prolongation[2](30,30) = -15.0/256.0;
-  prolongation[2](30,31) = 5.0/256.0;
-  prolongation[2](30,48) = 135.0/256.0;
-  prolongation[2](30,49) = 135.0/256.0;
-  prolongation[2](30,50) = -45.0/256.0;
-  prolongation[2](30,51) = -45.0/256.0;
-  prolongation[2](31,28) = -1.0/16.0;
-  prolongation[2](31,30) = -1.0/16.0;
-  prolongation[2](31,48) = 9.0/16.0;
-  prolongation[2](31,49) = 9.0/16.0;
-  prolongation[2](32,35) = 1.0;
-  prolongation[2](33,11) = 5.0/16.0;
-  prolongation[2](33,15) = 1.0/16.0;
-  prolongation[2](33,34) = -5.0/16.0;
-  prolongation[2](33,35) = 15.0/16.0;
-  prolongation[2](34,9) = 1.0/16.0;
-  prolongation[2](34,13) = 5.0/16.0;
-  prolongation[2](34,33) = -5.0/16.0;
-  prolongation[2](34,35) = 15.0/16.0;
-  prolongation[2](35,0) = 1.0/256.0;
-  prolongation[2](35,1) = 5.0/256.0;
-  prolongation[2](35,2) = 25.0/256.0;
-  prolongation[2](35,3) = 5.0/256.0;
-  prolongation[2](35,8) = -5.0/256.0;
-  prolongation[2](35,9) = 15.0/256.0;
-  prolongation[2](35,10) = -25.0/256.0;
-  prolongation[2](35,11) = 75.0/256.0;
-  prolongation[2](35,12) = -25.0/256.0;
-  prolongation[2](35,13) = 75.0/256.0;
-  prolongation[2](35,14) = -5.0/256.0;
-  prolongation[2](35,15) = 15.0/256.0;
-  prolongation[2](35,32) = 25.0/256.0;
-  prolongation[2](35,33) = -75.0/256.0;
-  prolongation[2](35,34) = -75.0/256.0;
-  prolongation[2](35,35) = 225.0/256.0;
-  prolongation[2](36,35) = -1.0/16.0;
-  prolongation[2](36,39) = -1.0/16.0;
-  prolongation[2](36,61) = 9.0/16.0;
-  prolongation[2](36,63) = 9.0/16.0;
-  prolongation[2](37,11) = -5.0/256.0;
-  prolongation[2](37,15) = -1.0/256.0;
-  prolongation[2](37,19) = -5.0/256.0;
-  prolongation[2](37,23) = -1.0/256.0;
-  prolongation[2](37,34) = 5.0/256.0;
-  prolongation[2](37,35) = -15.0/256.0;
-  prolongation[2](37,38) = 5.0/256.0;
-  prolongation[2](37,39) = -15.0/256.0;
-  prolongation[2](37,46) = 45.0/256.0;
-  prolongation[2](37,47) = 45.0/256.0;
-  prolongation[2](37,54) = 9.0/256.0;
-  prolongation[2](37,55) = 9.0/256.0;
-  prolongation[2](37,60) = -45.0/256.0;
-  prolongation[2](37,61) = 135.0/256.0;
-  prolongation[2](37,62) = -45.0/256.0;
-  prolongation[2](37,63) = 135.0/256.0;
-  prolongation[2](38,9) = -1.0/256.0;
-  prolongation[2](38,13) = -5.0/256.0;
-  prolongation[2](38,17) = -1.0/256.0;
-  prolongation[2](38,21) = -5.0/256.0;
-  prolongation[2](38,33) = 5.0/256.0;
-  prolongation[2](38,35) = -15.0/256.0;
-  prolongation[2](38,37) = 5.0/256.0;
-  prolongation[2](38,39) = -15.0/256.0;
-  prolongation[2](38,41) = 9.0/256.0;
-  prolongation[2](38,43) = 9.0/256.0;
-  prolongation[2](38,49) = 45.0/256.0;
-  prolongation[2](38,51) = 45.0/256.0;
-  prolongation[2](38,57) = -45.0/256.0;
-  prolongation[2](38,59) = -45.0/256.0;
-  prolongation[2](38,61) = 135.0/256.0;
-  prolongation[2](38,63) = 135.0/256.0;
-  prolongation[2](39,0) = -1.0/4096.0;
-  prolongation[2](39,1) = -5.0/4096.0;
-  prolongation[2](39,2) = -25.0/4096.0;
-  prolongation[2](39,3) = -5.0/4096.0;
-  prolongation[2](39,4) = -1.0/4096.0;
-  prolongation[2](39,5) = -5.0/4096.0;
-  prolongation[2](39,6) = -25.0/4096.0;
-  prolongation[2](39,7) = -5.0/4096.0;
-  prolongation[2](39,8) = 5.0/4096.0;
-  prolongation[2](39,9) = -15.0/4096.0;
-  prolongation[2](39,10) = 25.0/4096.0;
-  prolongation[2](39,11) = -75.0/4096.0;
-  prolongation[2](39,12) = 25.0/4096.0;
-  prolongation[2](39,13) = -75.0/4096.0;
-  prolongation[2](39,14) = 5.0/4096.0;
-  prolongation[2](39,15) = -15.0/4096.0;
-  prolongation[2](39,16) = 5.0/4096.0;
-  prolongation[2](39,17) = -15.0/4096.0;
-  prolongation[2](39,18) = 25.0/4096.0;
-  prolongation[2](39,19) = -75.0/4096.0;
-  prolongation[2](39,20) = 25.0/4096.0;
-  prolongation[2](39,21) = -75.0/4096.0;
-  prolongation[2](39,22) = 5.0/4096.0;
-  prolongation[2](39,23) = -15.0/4096.0;
-  prolongation[2](39,24) = 9.0/4096.0;
-  prolongation[2](39,25) = 9.0/4096.0;
-  prolongation[2](39,26) = 45.0/4096.0;
-  prolongation[2](39,27) = 45.0/4096.0;
-  prolongation[2](39,28) = 225.0/4096.0;
-  prolongation[2](39,29) = 225.0/4096.0;
-  prolongation[2](39,30) = 45.0/4096.0;
-  prolongation[2](39,31) = 45.0/4096.0;
-  prolongation[2](39,32) = -25.0/4096.0;
-  prolongation[2](39,33) = 75.0/4096.0;
-  prolongation[2](39,34) = 75.0/4096.0;
-  prolongation[2](39,35) = -225.0/4096.0;
-  prolongation[2](39,36) = -25.0/4096.0;
-  prolongation[2](39,37) = 75.0/4096.0;
-  prolongation[2](39,38) = 75.0/4096.0;
-  prolongation[2](39,39) = -225.0/4096.0;
-  prolongation[2](39,40) = -45.0/4096.0;
-  prolongation[2](39,41) = 135.0/4096.0;
-  prolongation[2](39,42) = -45.0/4096.0;
-  prolongation[2](39,43) = 135.0/4096.0;
-  prolongation[2](39,44) = -225.0/4096.0;
-  prolongation[2](39,45) = -225.0/4096.0;
-  prolongation[2](39,46) = 675.0/4096.0;
-  prolongation[2](39,47) = 675.0/4096.0;
-  prolongation[2](39,48) = -225.0/4096.0;
-  prolongation[2](39,49) = 675.0/4096.0;
-  prolongation[2](39,50) = -225.0/4096.0;
-  prolongation[2](39,51) = 675.0/4096.0;
-  prolongation[2](39,52) = -45.0/4096.0;
-  prolongation[2](39,53) = -45.0/4096.0;
-  prolongation[2](39,54) = 135.0/4096.0;
-  prolongation[2](39,55) = 135.0/4096.0;
-  prolongation[2](39,56) = 225.0/4096.0;
-  prolongation[2](39,57) = -675.0/4096.0;
-  prolongation[2](39,58) = 225.0/4096.0;
-  prolongation[2](39,59) = -675.0/4096.0;
-  prolongation[2](39,60) = -675.0/4096.0;
-  prolongation[2](39,61) = 2025.0/4096.0;
-  prolongation[2](39,62) = -675.0/4096.0;
-  prolongation[2](39,63) = 2025.0/4096.0;
-  prolongation[2](40,9) = -5.0/256.0;
-  prolongation[2](40,13) = -5.0/256.0;
-  prolongation[2](40,17) = -1.0/256.0;
-  prolongation[2](40,21) = -1.0/256.0;
-  prolongation[2](40,33) = 45.0/256.0;
-  prolongation[2](40,35) = 45.0/256.0;
-  prolongation[2](40,37) = 9.0/256.0;
-  prolongation[2](40,39) = 9.0/256.0;
-  prolongation[2](40,41) = -15.0/256.0;
-  prolongation[2](40,43) = 5.0/256.0;
-  prolongation[2](40,49) = -15.0/256.0;
-  prolongation[2](40,51) = 5.0/256.0;
-  prolongation[2](40,57) = 135.0/256.0;
-  prolongation[2](40,59) = -45.0/256.0;
-  prolongation[2](40,61) = 135.0/256.0;
-  prolongation[2](40,63) = -45.0/256.0;
-  prolongation[2](41,0) = -5.0/4096.0;
-  prolongation[2](41,1) = -25.0/4096.0;
-  prolongation[2](41,2) = -25.0/4096.0;
-  prolongation[2](41,3) = -5.0/4096.0;
-  prolongation[2](41,4) = -1.0/4096.0;
-  prolongation[2](41,5) = -5.0/4096.0;
-  prolongation[2](41,6) = -5.0/4096.0;
-  prolongation[2](41,7) = -1.0/4096.0;
-  prolongation[2](41,8) = 25.0/4096.0;
-  prolongation[2](41,9) = -75.0/4096.0;
-  prolongation[2](41,10) = 225.0/4096.0;
-  prolongation[2](41,11) = 225.0/4096.0;
-  prolongation[2](41,12) = 25.0/4096.0;
-  prolongation[2](41,13) = -75.0/4096.0;
-  prolongation[2](41,14) = 45.0/4096.0;
-  prolongation[2](41,15) = 45.0/4096.0;
-  prolongation[2](41,16) = 5.0/4096.0;
-  prolongation[2](41,17) = -15.0/4096.0;
-  prolongation[2](41,18) = 45.0/4096.0;
-  prolongation[2](41,19) = 45.0/4096.0;
-  prolongation[2](41,20) = 5.0/4096.0;
-  prolongation[2](41,21) = -15.0/4096.0;
-  prolongation[2](41,22) = 9.0/4096.0;
-  prolongation[2](41,23) = 9.0/4096.0;
-  prolongation[2](41,24) = -15.0/4096.0;
-  prolongation[2](41,25) = 5.0/4096.0;
-  prolongation[2](41,26) = -75.0/4096.0;
-  prolongation[2](41,27) = 25.0/4096.0;
-  prolongation[2](41,28) = -75.0/4096.0;
-  prolongation[2](41,29) = 25.0/4096.0;
-  prolongation[2](41,30) = -15.0/4096.0;
-  prolongation[2](41,31) = 5.0/4096.0;
-  prolongation[2](41,32) = -225.0/4096.0;
-  prolongation[2](41,33) = 675.0/4096.0;
-  prolongation[2](41,34) = -225.0/4096.0;
-  prolongation[2](41,35) = 675.0/4096.0;
-  prolongation[2](41,36) = -45.0/4096.0;
-  prolongation[2](41,37) = 135.0/4096.0;
-  prolongation[2](41,38) = -45.0/4096.0;
-  prolongation[2](41,39) = 135.0/4096.0;
-  prolongation[2](41,40) = 75.0/4096.0;
-  prolongation[2](41,41) = -225.0/4096.0;
-  prolongation[2](41,42) = -25.0/4096.0;
-  prolongation[2](41,43) = 75.0/4096.0;
-  prolongation[2](41,44) = 675.0/4096.0;
-  prolongation[2](41,45) = -225.0/4096.0;
-  prolongation[2](41,46) = 675.0/4096.0;
-  prolongation[2](41,47) = -225.0/4096.0;
-  prolongation[2](41,48) = 75.0/4096.0;
-  prolongation[2](41,49) = -225.0/4096.0;
-  prolongation[2](41,50) = -25.0/4096.0;
-  prolongation[2](41,51) = 75.0/4096.0;
-  prolongation[2](41,52) = 135.0/4096.0;
-  prolongation[2](41,53) = -45.0/4096.0;
-  prolongation[2](41,54) = 135.0/4096.0;
-  prolongation[2](41,55) = -45.0/4096.0;
-  prolongation[2](41,56) = -675.0/4096.0;
-  prolongation[2](41,57) = 2025.0/4096.0;
-  prolongation[2](41,58) = 225.0/4096.0;
-  prolongation[2](41,59) = -675.0/4096.0;
-  prolongation[2](41,60) = -675.0/4096.0;
-  prolongation[2](41,61) = 2025.0/4096.0;
-  prolongation[2](41,62) = 225.0/4096.0;
-  prolongation[2](41,63) = -675.0/4096.0;
-  prolongation[2](42,41) = -1.0/16.0;
-  prolongation[2](42,49) = -1.0/16.0;
-  prolongation[2](42,57) = 9.0/16.0;
-  prolongation[2](42,61) = 9.0/16.0;
-  prolongation[2](43,24) = -1.0/256.0;
-  prolongation[2](43,26) = -5.0/256.0;
-  prolongation[2](43,28) = -5.0/256.0;
-  prolongation[2](43,30) = -1.0/256.0;
-  prolongation[2](43,40) = 5.0/256.0;
-  prolongation[2](43,41) = -15.0/256.0;
-  prolongation[2](43,44) = 45.0/256.0;
-  prolongation[2](43,46) = 45.0/256.0;
-  prolongation[2](43,48) = 5.0/256.0;
-  prolongation[2](43,49) = -15.0/256.0;
-  prolongation[2](43,52) = 9.0/256.0;
-  prolongation[2](43,54) = 9.0/256.0;
-  prolongation[2](43,56) = -45.0/256.0;
-  prolongation[2](43,57) = 135.0/256.0;
-  prolongation[2](43,60) = -45.0/256.0;
-  prolongation[2](43,61) = 135.0/256.0;
-  prolongation[2](44,11) = 5.0/16.0;
-  prolongation[2](44,19) = 1.0/16.0;
-  prolongation[2](44,46) = 15.0/16.0;
-  prolongation[2](44,47) = -5.0/16.0;
-  prolongation[2](45,46) = 1.0;
-  prolongation[2](46,1) = 5.0/256.0;
-  prolongation[2](46,2) = 25.0/256.0;
-  prolongation[2](46,5) = 1.0/256.0;
-  prolongation[2](46,6) = 5.0/256.0;
-  prolongation[2](46,10) = -25.0/256.0;
-  prolongation[2](46,11) = 75.0/256.0;
-  prolongation[2](46,18) = -5.0/256.0;
-  prolongation[2](46,19) = 15.0/256.0;
-  prolongation[2](46,26) = 15.0/256.0;
-  prolongation[2](46,27) = -5.0/256.0;
-  prolongation[2](46,28) = 75.0/256.0;
-  prolongation[2](46,29) = -25.0/256.0;
-  prolongation[2](46,44) = -75.0/256.0;
-  prolongation[2](46,45) = 25.0/256.0;
-  prolongation[2](46,46) = 225.0/256.0;
-  prolongation[2](46,47) = -75.0/256.0;
-  prolongation[2](47,26) = 1.0/16.0;
-  prolongation[2](47,28) = 5.0/16.0;
-  prolongation[2](47,44) = -5.0/16.0;
-  prolongation[2](47,46) = 15.0/16.0;
-  prolongation[2](48,13) = 5.0/16.0;
-  prolongation[2](48,21) = 1.0/16.0;
-  prolongation[2](48,49) = 15.0/16.0;
-  prolongation[2](48,51) = -5.0/16.0;
-  prolongation[2](49,2) = 25.0/256.0;
-  prolongation[2](49,3) = 5.0/256.0;
-  prolongation[2](49,6) = 5.0/256.0;
-  prolongation[2](49,7) = 1.0/256.0;
-  prolongation[2](49,12) = -25.0/256.0;
-  prolongation[2](49,13) = 75.0/256.0;
-  prolongation[2](49,20) = -5.0/256.0;
-  prolongation[2](49,21) = 15.0/256.0;
-  prolongation[2](49,28) = 75.0/256.0;
-  prolongation[2](49,29) = -25.0/256.0;
-  prolongation[2](49,30) = 15.0/256.0;
-  prolongation[2](49,31) = -5.0/256.0;
-  prolongation[2](49,48) = -75.0/256.0;
-  prolongation[2](49,49) = 225.0/256.0;
-  prolongation[2](49,50) = 25.0/256.0;
-  prolongation[2](49,51) = -75.0/256.0;
-  prolongation[2](50,49) = 1.0;
-  prolongation[2](51,28) = 5.0/16.0;
-  prolongation[2](51,30) = 1.0/16.0;
-  prolongation[2](51,48) = -5.0/16.0;
-  prolongation[2](51,49) = 15.0/16.0;
-  prolongation[2](52,11) = -5.0/256.0;
-  prolongation[2](52,15) = -5.0/256.0;
-  prolongation[2](52,19) = -1.0/256.0;
-  prolongation[2](52,23) = -1.0/256.0;
-  prolongation[2](52,34) = 45.0/256.0;
-  prolongation[2](52,35) = 45.0/256.0;
-  prolongation[2](52,38) = 9.0/256.0;
-  prolongation[2](52,39) = 9.0/256.0;
-  prolongation[2](52,46) = -15.0/256.0;
-  prolongation[2](52,47) = 5.0/256.0;
-  prolongation[2](52,54) = -15.0/256.0;
-  prolongation[2](52,55) = 5.0/256.0;
-  prolongation[2](52,60) = 135.0/256.0;
-  prolongation[2](52,61) = 135.0/256.0;
-  prolongation[2](52,62) = -45.0/256.0;
-  prolongation[2](52,63) = -45.0/256.0;
-  prolongation[2](53,46) = -1.0/16.0;
-  prolongation[2](53,54) = -1.0/16.0;
-  prolongation[2](53,60) = 9.0/16.0;
-  prolongation[2](53,61) = 9.0/16.0;
-  prolongation[2](54,0) = -5.0/4096.0;
-  prolongation[2](54,1) = -5.0/4096.0;
-  prolongation[2](54,2) = -25.0/4096.0;
-  prolongation[2](54,3) = -25.0/4096.0;
-  prolongation[2](54,4) = -1.0/4096.0;
-  prolongation[2](54,5) = -1.0/4096.0;
-  prolongation[2](54,6) = -5.0/4096.0;
-  prolongation[2](54,7) = -5.0/4096.0;
-  prolongation[2](54,8) = 45.0/4096.0;
-  prolongation[2](54,9) = 45.0/4096.0;
-  prolongation[2](54,10) = 25.0/4096.0;
-  prolongation[2](54,11) = -75.0/4096.0;
-  prolongation[2](54,12) = 225.0/4096.0;
-  prolongation[2](54,13) = 225.0/4096.0;
-  prolongation[2](54,14) = 25.0/4096.0;
-  prolongation[2](54,15) = -75.0/4096.0;
-  prolongation[2](54,16) = 9.0/4096.0;
-  prolongation[2](54,17) = 9.0/4096.0;
-  prolongation[2](54,18) = 5.0/4096.0;
-  prolongation[2](54,19) = -15.0/4096.0;
-  prolongation[2](54,20) = 45.0/4096.0;
-  prolongation[2](54,21) = 45.0/4096.0;
-  prolongation[2](54,22) = 5.0/4096.0;
-  prolongation[2](54,23) = -15.0/4096.0;
-  prolongation[2](54,24) = -15.0/4096.0;
-  prolongation[2](54,25) = 5.0/4096.0;
-  prolongation[2](54,26) = -15.0/4096.0;
-  prolongation[2](54,27) = 5.0/4096.0;
-  prolongation[2](54,28) = -75.0/4096.0;
-  prolongation[2](54,29) = 25.0/4096.0;
-  prolongation[2](54,30) = -75.0/4096.0;
-  prolongation[2](54,31) = 25.0/4096.0;
-  prolongation[2](54,32) = -225.0/4096.0;
-  prolongation[2](54,33) = -225.0/4096.0;
-  prolongation[2](54,34) = 675.0/4096.0;
-  prolongation[2](54,35) = 675.0/4096.0;
-  prolongation[2](54,36) = -45.0/4096.0;
-  prolongation[2](54,37) = -45.0/4096.0;
-  prolongation[2](54,38) = 135.0/4096.0;
-  prolongation[2](54,39) = 135.0/4096.0;
-  prolongation[2](54,40) = 135.0/4096.0;
-  prolongation[2](54,41) = 135.0/4096.0;
-  prolongation[2](54,42) = -45.0/4096.0;
-  prolongation[2](54,43) = -45.0/4096.0;
-  prolongation[2](54,44) = 75.0/4096.0;
-  prolongation[2](54,45) = -25.0/4096.0;
-  prolongation[2](54,46) = -225.0/4096.0;
-  prolongation[2](54,47) = 75.0/4096.0;
-  prolongation[2](54,48) = 675.0/4096.0;
-  prolongation[2](54,49) = 675.0/4096.0;
-  prolongation[2](54,50) = -225.0/4096.0;
-  prolongation[2](54,51) = -225.0/4096.0;
-  prolongation[2](54,52) = 75.0/4096.0;
-  prolongation[2](54,53) = -25.0/4096.0;
-  prolongation[2](54,54) = -225.0/4096.0;
-  prolongation[2](54,55) = 75.0/4096.0;
-  prolongation[2](54,56) = -675.0/4096.0;
-  prolongation[2](54,57) = -675.0/4096.0;
-  prolongation[2](54,58) = 225.0/4096.0;
-  prolongation[2](54,59) = 225.0/4096.0;
-  prolongation[2](54,60) = 2025.0/4096.0;
-  prolongation[2](54,61) = 2025.0/4096.0;
-  prolongation[2](54,62) = -675.0/4096.0;
-  prolongation[2](54,63) = -675.0/4096.0;
-  prolongation[2](55,24) = -1.0/256.0;
-  prolongation[2](55,26) = -1.0/256.0;
-  prolongation[2](55,28) = -5.0/256.0;
-  prolongation[2](55,30) = -5.0/256.0;
-  prolongation[2](55,40) = 9.0/256.0;
-  prolongation[2](55,41) = 9.0/256.0;
-  prolongation[2](55,44) = 5.0/256.0;
-  prolongation[2](55,46) = -15.0/256.0;
-  prolongation[2](55,48) = 45.0/256.0;
-  prolongation[2](55,49) = 45.0/256.0;
-  prolongation[2](55,52) = 5.0/256.0;
-  prolongation[2](55,54) = -15.0/256.0;
-  prolongation[2](55,56) = -45.0/256.0;
-  prolongation[2](55,57) = -45.0/256.0;
-  prolongation[2](55,60) = 135.0/256.0;
-  prolongation[2](55,61) = 135.0/256.0;
-  prolongation[2](56,35) = 5.0/16.0;
-  prolongation[2](56,39) = 1.0/16.0;
-  prolongation[2](56,61) = 15.0/16.0;
-  prolongation[2](56,63) = -5.0/16.0;
-  prolongation[2](57,11) = 25.0/256.0;
-  prolongation[2](57,15) = 5.0/256.0;
-  prolongation[2](57,19) = 5.0/256.0;
-  prolongation[2](57,23) = 1.0/256.0;
-  prolongation[2](57,34) = -25.0/256.0;
-  prolongation[2](57,35) = 75.0/256.0;
-  prolongation[2](57,38) = -5.0/256.0;
-  prolongation[2](57,39) = 15.0/256.0;
-  prolongation[2](57,46) = 75.0/256.0;
-  prolongation[2](57,47) = -25.0/256.0;
-  prolongation[2](57,54) = 15.0/256.0;
-  prolongation[2](57,55) = -5.0/256.0;
-  prolongation[2](57,60) = -75.0/256.0;
-  prolongation[2](57,61) = 225.0/256.0;
-  prolongation[2](57,62) = 25.0/256.0;
-  prolongation[2](57,63) = -75.0/256.0;
-  prolongation[2](58,61) = 1.0;
-  prolongation[2](59,46) = 5.0/16.0;
-  prolongation[2](59,54) = 1.0/16.0;
-  prolongation[2](59,60) = -5.0/16.0;
-  prolongation[2](59,61) = 15.0/16.0;
-  prolongation[2](60,9) = 5.0/256.0;
-  prolongation[2](60,13) = 25.0/256.0;
-  prolongation[2](60,17) = 1.0/256.0;
-  prolongation[2](60,21) = 5.0/256.0;
-  prolongation[2](60,33) = -25.0/256.0;
-  prolongation[2](60,35) = 75.0/256.0;
-  prolongation[2](60,37) = -5.0/256.0;
-  prolongation[2](60,39) = 15.0/256.0;
-  prolongation[2](60,41) = 15.0/256.0;
-  prolongation[2](60,43) = -5.0/256.0;
-  prolongation[2](60,49) = 75.0/256.0;
-  prolongation[2](60,51) = -25.0/256.0;
-  prolongation[2](60,57) = -75.0/256.0;
-  prolongation[2](60,59) = 25.0/256.0;
-  prolongation[2](60,61) = 225.0/256.0;
-  prolongation[2](60,63) = -75.0/256.0;
-  prolongation[2](61,0) = 5.0/4096.0;
-  prolongation[2](61,1) = 25.0/4096.0;
-  prolongation[2](61,2) = 125.0/4096.0;
-  prolongation[2](61,3) = 25.0/4096.0;
-  prolongation[2](61,4) = 1.0/4096.0;
-  prolongation[2](61,5) = 5.0/4096.0;
-  prolongation[2](61,6) = 25.0/4096.0;
-  prolongation[2](61,7) = 5.0/4096.0;
-  prolongation[2](61,8) = -25.0/4096.0;
-  prolongation[2](61,9) = 75.0/4096.0;
-  prolongation[2](61,10) = -125.0/4096.0;
-  prolongation[2](61,11) = 375.0/4096.0;
-  prolongation[2](61,12) = -125.0/4096.0;
-  prolongation[2](61,13) = 375.0/4096.0;
-  prolongation[2](61,14) = -25.0/4096.0;
-  prolongation[2](61,15) = 75.0/4096.0;
-  prolongation[2](61,16) = -5.0/4096.0;
-  prolongation[2](61,17) = 15.0/4096.0;
-  prolongation[2](61,18) = -25.0/4096.0;
-  prolongation[2](61,19) = 75.0/4096.0;
-  prolongation[2](61,20) = -25.0/4096.0;
-  prolongation[2](61,21) = 75.0/4096.0;
-  prolongation[2](61,22) = -5.0/4096.0;
-  prolongation[2](61,23) = 15.0/4096.0;
-  prolongation[2](61,24) = 15.0/4096.0;
-  prolongation[2](61,25) = -5.0/4096.0;
-  prolongation[2](61,26) = 75.0/4096.0;
-  prolongation[2](61,27) = -25.0/4096.0;
-  prolongation[2](61,28) = 375.0/4096.0;
-  prolongation[2](61,29) = -125.0/4096.0;
-  prolongation[2](61,30) = 75.0/4096.0;
-  prolongation[2](61,31) = -25.0/4096.0;
-  prolongation[2](61,32) = 125.0/4096.0;
-  prolongation[2](61,33) = -375.0/4096.0;
-  prolongation[2](61,34) = -375.0/4096.0;
-  prolongation[2](61,35) = 1125.0/4096.0;
-  prolongation[2](61,36) = 25.0/4096.0;
-  prolongation[2](61,37) = -75.0/4096.0;
-  prolongation[2](61,38) = -75.0/4096.0;
-  prolongation[2](61,39) = 225.0/4096.0;
-  prolongation[2](61,40) = -75.0/4096.0;
-  prolongation[2](61,41) = 225.0/4096.0;
-  prolongation[2](61,42) = 25.0/4096.0;
-  prolongation[2](61,43) = -75.0/4096.0;
-  prolongation[2](61,44) = -375.0/4096.0;
-  prolongation[2](61,45) = 125.0/4096.0;
-  prolongation[2](61,46) = 1125.0/4096.0;
-  prolongation[2](61,47) = -375.0/4096.0;
-  prolongation[2](61,48) = -375.0/4096.0;
-  prolongation[2](61,49) = 1125.0/4096.0;
-  prolongation[2](61,50) = 125.0/4096.0;
-  prolongation[2](61,51) = -375.0/4096.0;
-  prolongation[2](61,52) = -75.0/4096.0;
-  prolongation[2](61,53) = 25.0/4096.0;
-  prolongation[2](61,54) = 225.0/4096.0;
-  prolongation[2](61,55) = -75.0/4096.0;
-  prolongation[2](61,56) = 375.0/4096.0;
-  prolongation[2](61,57) = -1125.0/4096.0;
-  prolongation[2](61,58) = -125.0/4096.0;
-  prolongation[2](61,59) = 375.0/4096.0;
-  prolongation[2](61,60) = -1125.0/4096.0;
-  prolongation[2](61,61) = 3375.0/4096.0;
-  prolongation[2](61,62) = 375.0/4096.0;
-  prolongation[2](61,63) = -1125.0/4096.0;
-  prolongation[2](62,41) = 1.0/16.0;
-  prolongation[2](62,49) = 5.0/16.0;
-  prolongation[2](62,57) = -5.0/16.0;
-  prolongation[2](62,61) = 15.0/16.0;
-  prolongation[2](63,24) = 1.0/256.0;
-  prolongation[2](63,26) = 5.0/256.0;
-  prolongation[2](63,28) = 25.0/256.0;
-  prolongation[2](63,30) = 5.0/256.0;
-  prolongation[2](63,40) = -5.0/256.0;
-  prolongation[2](63,41) = 15.0/256.0;
-  prolongation[2](63,44) = -25.0/256.0;
-  prolongation[2](63,46) = 75.0/256.0;
-  prolongation[2](63,48) = -25.0/256.0;
-  prolongation[2](63,49) = 75.0/256.0;
-  prolongation[2](63,52) = -5.0/256.0;
-  prolongation[2](63,54) = 15.0/256.0;
-  prolongation[2](63,56) = 25.0/256.0;
-  prolongation[2](63,57) = -75.0/256.0;
-  prolongation[2](63,60) = -75.0/256.0;
-  prolongation[2](63,61) = 225.0/256.0;
-  prolongation[3](0,0) = -1.0/16.0;
-  prolongation[3](0,3) = -1.0/16.0;
-  prolongation[3](0,14) = 9.0/16.0;
-  prolongation[3](0,15) = 9.0/16.0;
-  prolongation[3](1,0) = 1.0/256.0;
-  prolongation[3](1,1) = 1.0/256.0;
-  prolongation[3](1,2) = 1.0/256.0;
-  prolongation[3](1,3) = 1.0/256.0;
-  prolongation[3](1,8) = -9.0/256.0;
-  prolongation[3](1,9) = -9.0/256.0;
-  prolongation[3](1,10) = -9.0/256.0;
-  prolongation[3](1,11) = -9.0/256.0;
-  prolongation[3](1,12) = -9.0/256.0;
-  prolongation[3](1,13) = -9.0/256.0;
-  prolongation[3](1,14) = -9.0/256.0;
-  prolongation[3](1,15) = -9.0/256.0;
-  prolongation[3](1,32) = 81.0/256.0;
-  prolongation[3](1,33) = 81.0/256.0;
-  prolongation[3](1,34) = 81.0/256.0;
-  prolongation[3](1,35) = 81.0/256.0;
-  prolongation[3](2,2) = -1.0/16.0;
-  prolongation[3](2,3) = -1.0/16.0;
-  prolongation[3](2,12) = 9.0/16.0;
-  prolongation[3](2,13) = 9.0/16.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](4,0) = 1.0/256.0;
-  prolongation[3](4,3) = 1.0/256.0;
-  prolongation[3](4,4) = 1.0/256.0;
-  prolongation[3](4,7) = 1.0/256.0;
-  prolongation[3](4,14) = -9.0/256.0;
-  prolongation[3](4,15) = -9.0/256.0;
-  prolongation[3](4,22) = -9.0/256.0;
-  prolongation[3](4,23) = -9.0/256.0;
-  prolongation[3](4,24) = -9.0/256.0;
-  prolongation[3](4,25) = -9.0/256.0;
-  prolongation[3](4,30) = -9.0/256.0;
-  prolongation[3](4,31) = -9.0/256.0;
-  prolongation[3](4,52) = 81.0/256.0;
-  prolongation[3](4,53) = 81.0/256.0;
-  prolongation[3](4,54) = 81.0/256.0;
-  prolongation[3](4,55) = 81.0/256.0;
-  prolongation[3](5,0) = -1.0/4096.0;
-  prolongation[3](5,1) = -1.0/4096.0;
-  prolongation[3](5,2) = -1.0/4096.0;
-  prolongation[3](5,3) = -1.0/4096.0;
-  prolongation[3](5,4) = -1.0/4096.0;
-  prolongation[3](5,5) = -1.0/4096.0;
-  prolongation[3](5,6) = -1.0/4096.0;
-  prolongation[3](5,7) = -1.0/4096.0;
-  prolongation[3](5,8) = 9.0/4096.0;
-  prolongation[3](5,9) = 9.0/4096.0;
-  prolongation[3](5,10) = 9.0/4096.0;
-  prolongation[3](5,11) = 9.0/4096.0;
-  prolongation[3](5,12) = 9.0/4096.0;
-  prolongation[3](5,13) = 9.0/4096.0;
-  prolongation[3](5,14) = 9.0/4096.0;
-  prolongation[3](5,15) = 9.0/4096.0;
-  prolongation[3](5,16) = 9.0/4096.0;
-  prolongation[3](5,17) = 9.0/4096.0;
-  prolongation[3](5,18) = 9.0/4096.0;
-  prolongation[3](5,19) = 9.0/4096.0;
-  prolongation[3](5,20) = 9.0/4096.0;
-  prolongation[3](5,21) = 9.0/4096.0;
-  prolongation[3](5,22) = 9.0/4096.0;
-  prolongation[3](5,23) = 9.0/4096.0;
-  prolongation[3](5,24) = 9.0/4096.0;
-  prolongation[3](5,25) = 9.0/4096.0;
-  prolongation[3](5,26) = 9.0/4096.0;
-  prolongation[3](5,27) = 9.0/4096.0;
-  prolongation[3](5,28) = 9.0/4096.0;
-  prolongation[3](5,29) = 9.0/4096.0;
-  prolongation[3](5,30) = 9.0/4096.0;
-  prolongation[3](5,31) = 9.0/4096.0;
-  prolongation[3](5,32) = -81.0/4096.0;
-  prolongation[3](5,33) = -81.0/4096.0;
-  prolongation[3](5,34) = -81.0/4096.0;
-  prolongation[3](5,35) = -81.0/4096.0;
-  prolongation[3](5,36) = -81.0/4096.0;
-  prolongation[3](5,37) = -81.0/4096.0;
-  prolongation[3](5,38) = -81.0/4096.0;
-  prolongation[3](5,39) = -81.0/4096.0;
-  prolongation[3](5,40) = -81.0/4096.0;
-  prolongation[3](5,41) = -81.0/4096.0;
-  prolongation[3](5,42) = -81.0/4096.0;
-  prolongation[3](5,43) = -81.0/4096.0;
-  prolongation[3](5,44) = -81.0/4096.0;
-  prolongation[3](5,45) = -81.0/4096.0;
-  prolongation[3](5,46) = -81.0/4096.0;
-  prolongation[3](5,47) = -81.0/4096.0;
-  prolongation[3](5,48) = -81.0/4096.0;
-  prolongation[3](5,49) = -81.0/4096.0;
-  prolongation[3](5,50) = -81.0/4096.0;
-  prolongation[3](5,51) = -81.0/4096.0;
-  prolongation[3](5,52) = -81.0/4096.0;
-  prolongation[3](5,53) = -81.0/4096.0;
-  prolongation[3](5,54) = -81.0/4096.0;
-  prolongation[3](5,55) = -81.0/4096.0;
-  prolongation[3](5,56) = 729.0/4096.0;
-  prolongation[3](5,57) = 729.0/4096.0;
-  prolongation[3](5,58) = 729.0/4096.0;
-  prolongation[3](5,59) = 729.0/4096.0;
-  prolongation[3](5,60) = 729.0/4096.0;
-  prolongation[3](5,61) = 729.0/4096.0;
-  prolongation[3](5,62) = 729.0/4096.0;
-  prolongation[3](5,63) = 729.0/4096.0;
-  prolongation[3](6,2) = 1.0/256.0;
-  prolongation[3](6,3) = 1.0/256.0;
-  prolongation[3](6,6) = 1.0/256.0;
-  prolongation[3](6,7) = 1.0/256.0;
-  prolongation[3](6,12) = -9.0/256.0;
-  prolongation[3](6,13) = -9.0/256.0;
-  prolongation[3](6,20) = -9.0/256.0;
-  prolongation[3](6,21) = -9.0/256.0;
-  prolongation[3](6,28) = -9.0/256.0;
-  prolongation[3](6,29) = -9.0/256.0;
-  prolongation[3](6,30) = -9.0/256.0;
-  prolongation[3](6,31) = -9.0/256.0;
-  prolongation[3](6,48) = 81.0/256.0;
-  prolongation[3](6,49) = 81.0/256.0;
-  prolongation[3](6,50) = 81.0/256.0;
-  prolongation[3](6,51) = 81.0/256.0;
-  prolongation[3](7,3) = -1.0/16.0;
-  prolongation[3](7,7) = -1.0/16.0;
-  prolongation[3](7,30) = 9.0/16.0;
-  prolongation[3](7,31) = 9.0/16.0;
-  prolongation[3](8,0) = -5.0/256.0;
-  prolongation[3](8,1) = -1.0/256.0;
-  prolongation[3](8,2) = -1.0/256.0;
-  prolongation[3](8,3) = -5.0/256.0;
-  prolongation[3](8,8) = -15.0/256.0;
-  prolongation[3](8,9) = 5.0/256.0;
-  prolongation[3](8,10) = 9.0/256.0;
-  prolongation[3](8,11) = 9.0/256.0;
-  prolongation[3](8,12) = -15.0/256.0;
-  prolongation[3](8,13) = 5.0/256.0;
-  prolongation[3](8,14) = 45.0/256.0;
-  prolongation[3](8,15) = 45.0/256.0;
-  prolongation[3](8,32) = 135.0/256.0;
-  prolongation[3](8,33) = -45.0/256.0;
-  prolongation[3](8,34) = 135.0/256.0;
-  prolongation[3](8,35) = -45.0/256.0;
-  prolongation[3](9,8) = -1.0/16.0;
-  prolongation[3](9,12) = -1.0/16.0;
-  prolongation[3](9,32) = 9.0/16.0;
-  prolongation[3](9,34) = 9.0/16.0;
-  prolongation[3](10,11) = -1.0/16.0;
-  prolongation[3](10,15) = -1.0/16.0;
-  prolongation[3](10,34) = 9.0/16.0;
-  prolongation[3](10,35) = 9.0/16.0;
-  prolongation[3](11,0) = -1.0/256.0;
-  prolongation[3](11,1) = -1.0/256.0;
-  prolongation[3](11,2) = -5.0/256.0;
-  prolongation[3](11,3) = -5.0/256.0;
-  prolongation[3](11,8) = 9.0/256.0;
-  prolongation[3](11,9) = 9.0/256.0;
-  prolongation[3](11,10) = 5.0/256.0;
-  prolongation[3](11,11) = -15.0/256.0;
-  prolongation[3](11,12) = 45.0/256.0;
-  prolongation[3](11,13) = 45.0/256.0;
-  prolongation[3](11,14) = 5.0/256.0;
-  prolongation[3](11,15) = -15.0/256.0;
-  prolongation[3](11,32) = -45.0/256.0;
-  prolongation[3](11,33) = -45.0/256.0;
-  prolongation[3](11,34) = 135.0/256.0;
-  prolongation[3](11,35) = 135.0/256.0;
-  prolongation[3](12,2) = 1.0/16.0;
-  prolongation[3](12,3) = 5.0/16.0;
-  prolongation[3](12,12) = 15.0/16.0;
-  prolongation[3](12,13) = -5.0/16.0;
-  prolongation[3](13,12) = 1.0;
-  prolongation[3](14,15) = 1.0;
-  prolongation[3](15,0) = 1.0/16.0;
-  prolongation[3](15,3) = 5.0/16.0;
-  prolongation[3](15,14) = -5.0/16.0;
-  prolongation[3](15,15) = 15.0/16.0;
-  prolongation[3](16,0) = 5.0/4096.0;
-  prolongation[3](16,1) = 1.0/4096.0;
-  prolongation[3](16,2) = 1.0/4096.0;
-  prolongation[3](16,3) = 5.0/4096.0;
-  prolongation[3](16,4) = 5.0/4096.0;
-  prolongation[3](16,5) = 1.0/4096.0;
-  prolongation[3](16,6) = 1.0/4096.0;
-  prolongation[3](16,7) = 5.0/4096.0;
-  prolongation[3](16,8) = 15.0/4096.0;
-  prolongation[3](16,9) = -5.0/4096.0;
-  prolongation[3](16,10) = -9.0/4096.0;
-  prolongation[3](16,11) = -9.0/4096.0;
-  prolongation[3](16,12) = 15.0/4096.0;
-  prolongation[3](16,13) = -5.0/4096.0;
-  prolongation[3](16,14) = -45.0/4096.0;
-  prolongation[3](16,15) = -45.0/4096.0;
-  prolongation[3](16,16) = 15.0/4096.0;
-  prolongation[3](16,17) = -5.0/4096.0;
-  prolongation[3](16,18) = -9.0/4096.0;
-  prolongation[3](16,19) = -9.0/4096.0;
-  prolongation[3](16,20) = 15.0/4096.0;
-  prolongation[3](16,21) = -5.0/4096.0;
-  prolongation[3](16,22) = -45.0/4096.0;
-  prolongation[3](16,23) = -45.0/4096.0;
-  prolongation[3](16,24) = -45.0/4096.0;
-  prolongation[3](16,25) = -45.0/4096.0;
-  prolongation[3](16,26) = -9.0/4096.0;
-  prolongation[3](16,27) = -9.0/4096.0;
-  prolongation[3](16,28) = -9.0/4096.0;
-  prolongation[3](16,29) = -9.0/4096.0;
-  prolongation[3](16,30) = -45.0/4096.0;
-  prolongation[3](16,31) = -45.0/4096.0;
-  prolongation[3](16,32) = -135.0/4096.0;
-  prolongation[3](16,33) = 45.0/4096.0;
-  prolongation[3](16,34) = -135.0/4096.0;
-  prolongation[3](16,35) = 45.0/4096.0;
-  prolongation[3](16,36) = -135.0/4096.0;
-  prolongation[3](16,37) = 45.0/4096.0;
-  prolongation[3](16,38) = -135.0/4096.0;
-  prolongation[3](16,39) = 45.0/4096.0;
-  prolongation[3](16,40) = -135.0/4096.0;
-  prolongation[3](16,41) = 45.0/4096.0;
-  prolongation[3](16,42) = -135.0/4096.0;
-  prolongation[3](16,43) = 45.0/4096.0;
-  prolongation[3](16,44) = 81.0/4096.0;
-  prolongation[3](16,45) = 81.0/4096.0;
-  prolongation[3](16,46) = 81.0/4096.0;
-  prolongation[3](16,47) = 81.0/4096.0;
-  prolongation[3](16,48) = -135.0/4096.0;
-  prolongation[3](16,49) = 45.0/4096.0;
-  prolongation[3](16,50) = -135.0/4096.0;
-  prolongation[3](16,51) = 45.0/4096.0;
-  prolongation[3](16,52) = 405.0/4096.0;
-  prolongation[3](16,53) = 405.0/4096.0;
-  prolongation[3](16,54) = 405.0/4096.0;
-  prolongation[3](16,55) = 405.0/4096.0;
-  prolongation[3](16,56) = 1215.0/4096.0;
-  prolongation[3](16,57) = -405.0/4096.0;
-  prolongation[3](16,58) = 1215.0/4096.0;
-  prolongation[3](16,59) = -405.0/4096.0;
-  prolongation[3](16,60) = 1215.0/4096.0;
-  prolongation[3](16,61) = -405.0/4096.0;
-  prolongation[3](16,62) = 1215.0/4096.0;
-  prolongation[3](16,63) = -405.0/4096.0;
-  prolongation[3](17,8) = 1.0/256.0;
-  prolongation[3](17,12) = 1.0/256.0;
-  prolongation[3](17,16) = 1.0/256.0;
-  prolongation[3](17,20) = 1.0/256.0;
-  prolongation[3](17,32) = -9.0/256.0;
-  prolongation[3](17,34) = -9.0/256.0;
-  prolongation[3](17,36) = -9.0/256.0;
-  prolongation[3](17,38) = -9.0/256.0;
-  prolongation[3](17,40) = -9.0/256.0;
-  prolongation[3](17,42) = -9.0/256.0;
-  prolongation[3](17,48) = -9.0/256.0;
-  prolongation[3](17,50) = -9.0/256.0;
-  prolongation[3](17,56) = 81.0/256.0;
-  prolongation[3](17,58) = 81.0/256.0;
-  prolongation[3](17,60) = 81.0/256.0;
-  prolongation[3](17,62) = 81.0/256.0;
-  prolongation[3](18,11) = 1.0/256.0;
-  prolongation[3](18,15) = 1.0/256.0;
-  prolongation[3](18,19) = 1.0/256.0;
-  prolongation[3](18,23) = 1.0/256.0;
-  prolongation[3](18,34) = -9.0/256.0;
-  prolongation[3](18,35) = -9.0/256.0;
-  prolongation[3](18,38) = -9.0/256.0;
-  prolongation[3](18,39) = -9.0/256.0;
-  prolongation[3](18,46) = -9.0/256.0;
-  prolongation[3](18,47) = -9.0/256.0;
-  prolongation[3](18,54) = -9.0/256.0;
-  prolongation[3](18,55) = -9.0/256.0;
-  prolongation[3](18,60) = 81.0/256.0;
-  prolongation[3](18,61) = 81.0/256.0;
-  prolongation[3](18,62) = 81.0/256.0;
-  prolongation[3](18,63) = 81.0/256.0;
-  prolongation[3](19,0) = 1.0/4096.0;
-  prolongation[3](19,1) = 1.0/4096.0;
-  prolongation[3](19,2) = 5.0/4096.0;
-  prolongation[3](19,3) = 5.0/4096.0;
-  prolongation[3](19,4) = 1.0/4096.0;
-  prolongation[3](19,5) = 1.0/4096.0;
-  prolongation[3](19,6) = 5.0/4096.0;
-  prolongation[3](19,7) = 5.0/4096.0;
-  prolongation[3](19,8) = -9.0/4096.0;
-  prolongation[3](19,9) = -9.0/4096.0;
-  prolongation[3](19,10) = -5.0/4096.0;
-  prolongation[3](19,11) = 15.0/4096.0;
-  prolongation[3](19,12) = -45.0/4096.0;
-  prolongation[3](19,13) = -45.0/4096.0;
-  prolongation[3](19,14) = -5.0/4096.0;
-  prolongation[3](19,15) = 15.0/4096.0;
-  prolongation[3](19,16) = -9.0/4096.0;
-  prolongation[3](19,17) = -9.0/4096.0;
-  prolongation[3](19,18) = -5.0/4096.0;
-  prolongation[3](19,19) = 15.0/4096.0;
-  prolongation[3](19,20) = -45.0/4096.0;
-  prolongation[3](19,21) = -45.0/4096.0;
-  prolongation[3](19,22) = -5.0/4096.0;
-  prolongation[3](19,23) = 15.0/4096.0;
-  prolongation[3](19,24) = -9.0/4096.0;
-  prolongation[3](19,25) = -9.0/4096.0;
-  prolongation[3](19,26) = -9.0/4096.0;
-  prolongation[3](19,27) = -9.0/4096.0;
-  prolongation[3](19,28) = -45.0/4096.0;
-  prolongation[3](19,29) = -45.0/4096.0;
-  prolongation[3](19,30) = -45.0/4096.0;
-  prolongation[3](19,31) = -45.0/4096.0;
-  prolongation[3](19,32) = 45.0/4096.0;
-  prolongation[3](19,33) = 45.0/4096.0;
-  prolongation[3](19,34) = -135.0/4096.0;
-  prolongation[3](19,35) = -135.0/4096.0;
-  prolongation[3](19,36) = 45.0/4096.0;
-  prolongation[3](19,37) = 45.0/4096.0;
-  prolongation[3](19,38) = -135.0/4096.0;
-  prolongation[3](19,39) = -135.0/4096.0;
-  prolongation[3](19,40) = 81.0/4096.0;
-  prolongation[3](19,41) = 81.0/4096.0;
-  prolongation[3](19,42) = 81.0/4096.0;
-  prolongation[3](19,43) = 81.0/4096.0;
-  prolongation[3](19,44) = 45.0/4096.0;
-  prolongation[3](19,45) = 45.0/4096.0;
-  prolongation[3](19,46) = -135.0/4096.0;
-  prolongation[3](19,47) = -135.0/4096.0;
-  prolongation[3](19,48) = 405.0/4096.0;
-  prolongation[3](19,49) = 405.0/4096.0;
-  prolongation[3](19,50) = 405.0/4096.0;
-  prolongation[3](19,51) = 405.0/4096.0;
-  prolongation[3](19,52) = 45.0/4096.0;
-  prolongation[3](19,53) = 45.0/4096.0;
-  prolongation[3](19,54) = -135.0/4096.0;
-  prolongation[3](19,55) = -135.0/4096.0;
-  prolongation[3](19,56) = -405.0/4096.0;
-  prolongation[3](19,57) = -405.0/4096.0;
-  prolongation[3](19,58) = -405.0/4096.0;
-  prolongation[3](19,59) = -405.0/4096.0;
-  prolongation[3](19,60) = 1215.0/4096.0;
-  prolongation[3](19,61) = 1215.0/4096.0;
-  prolongation[3](19,62) = 1215.0/4096.0;
-  prolongation[3](19,63) = 1215.0/4096.0;
-  prolongation[3](20,2) = -1.0/256.0;
-  prolongation[3](20,3) = -5.0/256.0;
-  prolongation[3](20,6) = -1.0/256.0;
-  prolongation[3](20,7) = -5.0/256.0;
-  prolongation[3](20,12) = -15.0/256.0;
-  prolongation[3](20,13) = 5.0/256.0;
-  prolongation[3](20,20) = -15.0/256.0;
-  prolongation[3](20,21) = 5.0/256.0;
-  prolongation[3](20,28) = 9.0/256.0;
-  prolongation[3](20,29) = 9.0/256.0;
-  prolongation[3](20,30) = 45.0/256.0;
-  prolongation[3](20,31) = 45.0/256.0;
-  prolongation[3](20,48) = 135.0/256.0;
-  prolongation[3](20,49) = -45.0/256.0;
-  prolongation[3](20,50) = 135.0/256.0;
-  prolongation[3](20,51) = -45.0/256.0;
-  prolongation[3](21,12) = -1.0/16.0;
-  prolongation[3](21,20) = -1.0/16.0;
-  prolongation[3](21,48) = 9.0/16.0;
-  prolongation[3](21,50) = 9.0/16.0;
-  prolongation[3](22,15) = -1.0/16.0;
-  prolongation[3](22,23) = -1.0/16.0;
-  prolongation[3](22,54) = 9.0/16.0;
-  prolongation[3](22,55) = 9.0/16.0;
-  prolongation[3](23,0) = -1.0/256.0;
-  prolongation[3](23,3) = -5.0/256.0;
-  prolongation[3](23,4) = -1.0/256.0;
-  prolongation[3](23,7) = -5.0/256.0;
-  prolongation[3](23,14) = 5.0/256.0;
-  prolongation[3](23,15) = -15.0/256.0;
-  prolongation[3](23,22) = 5.0/256.0;
-  prolongation[3](23,23) = -15.0/256.0;
-  prolongation[3](23,24) = 9.0/256.0;
-  prolongation[3](23,25) = 9.0/256.0;
-  prolongation[3](23,30) = 45.0/256.0;
-  prolongation[3](23,31) = 45.0/256.0;
-  prolongation[3](23,52) = -45.0/256.0;
-  prolongation[3](23,53) = -45.0/256.0;
-  prolongation[3](23,54) = 135.0/256.0;
-  prolongation[3](23,55) = 135.0/256.0;
-  prolongation[3](24,0) = -5.0/256.0;
-  prolongation[3](24,3) = -5.0/256.0;
-  prolongation[3](24,4) = -1.0/256.0;
-  prolongation[3](24,7) = -1.0/256.0;
-  prolongation[3](24,14) = 45.0/256.0;
-  prolongation[3](24,15) = 45.0/256.0;
-  prolongation[3](24,22) = 9.0/256.0;
-  prolongation[3](24,23) = 9.0/256.0;
-  prolongation[3](24,24) = -15.0/256.0;
-  prolongation[3](24,25) = 5.0/256.0;
-  prolongation[3](24,30) = -15.0/256.0;
-  prolongation[3](24,31) = 5.0/256.0;
-  prolongation[3](24,52) = 135.0/256.0;
-  prolongation[3](24,53) = -45.0/256.0;
-  prolongation[3](24,54) = 135.0/256.0;
-  prolongation[3](24,55) = -45.0/256.0;
-  prolongation[3](25,24) = -1.0/16.0;
-  prolongation[3](25,30) = -1.0/16.0;
-  prolongation[3](25,52) = 9.0/16.0;
-  prolongation[3](25,54) = 9.0/16.0;
-  prolongation[3](26,0) = 5.0/4096.0;
-  prolongation[3](26,1) = 5.0/4096.0;
-  prolongation[3](26,2) = 5.0/4096.0;
-  prolongation[3](26,3) = 5.0/4096.0;
-  prolongation[3](26,4) = 1.0/4096.0;
-  prolongation[3](26,5) = 1.0/4096.0;
-  prolongation[3](26,6) = 1.0/4096.0;
-  prolongation[3](26,7) = 1.0/4096.0;
-  prolongation[3](26,8) = -45.0/4096.0;
-  prolongation[3](26,9) = -45.0/4096.0;
-  prolongation[3](26,10) = -45.0/4096.0;
-  prolongation[3](26,11) = -45.0/4096.0;
-  prolongation[3](26,12) = -45.0/4096.0;
-  prolongation[3](26,13) = -45.0/4096.0;
-  prolongation[3](26,14) = -45.0/4096.0;
-  prolongation[3](26,15) = -45.0/4096.0;
-  prolongation[3](26,16) = -9.0/4096.0;
-  prolongation[3](26,17) = -9.0/4096.0;
-  prolongation[3](26,18) = -9.0/4096.0;
-  prolongation[3](26,19) = -9.0/4096.0;
-  prolongation[3](26,20) = -9.0/4096.0;
-  prolongation[3](26,21) = -9.0/4096.0;
-  prolongation[3](26,22) = -9.0/4096.0;
-  prolongation[3](26,23) = -9.0/4096.0;
-  prolongation[3](26,24) = 15.0/4096.0;
-  prolongation[3](26,25) = -5.0/4096.0;
-  prolongation[3](26,26) = 15.0/4096.0;
-  prolongation[3](26,27) = -5.0/4096.0;
-  prolongation[3](26,28) = 15.0/4096.0;
-  prolongation[3](26,29) = -5.0/4096.0;
-  prolongation[3](26,30) = 15.0/4096.0;
-  prolongation[3](26,31) = -5.0/4096.0;
-  prolongation[3](26,32) = 405.0/4096.0;
-  prolongation[3](26,33) = 405.0/4096.0;
-  prolongation[3](26,34) = 405.0/4096.0;
-  prolongation[3](26,35) = 405.0/4096.0;
-  prolongation[3](26,36) = 81.0/4096.0;
-  prolongation[3](26,37) = 81.0/4096.0;
-  prolongation[3](26,38) = 81.0/4096.0;
-  prolongation[3](26,39) = 81.0/4096.0;
-  prolongation[3](26,40) = -135.0/4096.0;
-  prolongation[3](26,41) = -135.0/4096.0;
-  prolongation[3](26,42) = 45.0/4096.0;
-  prolongation[3](26,43) = 45.0/4096.0;
-  prolongation[3](26,44) = -135.0/4096.0;
-  prolongation[3](26,45) = 45.0/4096.0;
-  prolongation[3](26,46) = -135.0/4096.0;
-  prolongation[3](26,47) = 45.0/4096.0;
-  prolongation[3](26,48) = -135.0/4096.0;
-  prolongation[3](26,49) = -135.0/4096.0;
-  prolongation[3](26,50) = 45.0/4096.0;
-  prolongation[3](26,51) = 45.0/4096.0;
-  prolongation[3](26,52) = -135.0/4096.0;
-  prolongation[3](26,53) = 45.0/4096.0;
-  prolongation[3](26,54) = -135.0/4096.0;
-  prolongation[3](26,55) = 45.0/4096.0;
-  prolongation[3](26,56) = 1215.0/4096.0;
-  prolongation[3](26,57) = 1215.0/4096.0;
-  prolongation[3](26,58) = -405.0/4096.0;
-  prolongation[3](26,59) = -405.0/4096.0;
-  prolongation[3](26,60) = 1215.0/4096.0;
-  prolongation[3](26,61) = 1215.0/4096.0;
-  prolongation[3](26,62) = -405.0/4096.0;
-  prolongation[3](26,63) = -405.0/4096.0;
-  prolongation[3](27,24) = 1.0/256.0;
-  prolongation[3](27,26) = 1.0/256.0;
-  prolongation[3](27,28) = 1.0/256.0;
-  prolongation[3](27,30) = 1.0/256.0;
-  prolongation[3](27,40) = -9.0/256.0;
-  prolongation[3](27,41) = -9.0/256.0;
-  prolongation[3](27,44) = -9.0/256.0;
-  prolongation[3](27,46) = -9.0/256.0;
-  prolongation[3](27,48) = -9.0/256.0;
-  prolongation[3](27,49) = -9.0/256.0;
-  prolongation[3](27,52) = -9.0/256.0;
-  prolongation[3](27,54) = -9.0/256.0;
-  prolongation[3](27,56) = 81.0/256.0;
-  prolongation[3](27,57) = 81.0/256.0;
-  prolongation[3](27,60) = 81.0/256.0;
-  prolongation[3](27,61) = 81.0/256.0;
-  prolongation[3](28,2) = -5.0/256.0;
-  prolongation[3](28,3) = -5.0/256.0;
-  prolongation[3](28,6) = -1.0/256.0;
-  prolongation[3](28,7) = -1.0/256.0;
-  prolongation[3](28,12) = 45.0/256.0;
-  prolongation[3](28,13) = 45.0/256.0;
-  prolongation[3](28,20) = 9.0/256.0;
-  prolongation[3](28,21) = 9.0/256.0;
-  prolongation[3](28,28) = -15.0/256.0;
-  prolongation[3](28,29) = 5.0/256.0;
-  prolongation[3](28,30) = -15.0/256.0;
-  prolongation[3](28,31) = 5.0/256.0;
-  prolongation[3](28,48) = 135.0/256.0;
-  prolongation[3](28,49) = 135.0/256.0;
-  prolongation[3](28,50) = -45.0/256.0;
-  prolongation[3](28,51) = -45.0/256.0;
-  prolongation[3](29,28) = -1.0/16.0;
-  prolongation[3](29,30) = -1.0/16.0;
-  prolongation[3](29,48) = 9.0/16.0;
-  prolongation[3](29,49) = 9.0/16.0;
-  prolongation[3](30,3) = 5.0/16.0;
-  prolongation[3](30,7) = 1.0/16.0;
-  prolongation[3](30,30) = 15.0/16.0;
-  prolongation[3](30,31) = -5.0/16.0;
-  prolongation[3](31,30) = 1.0;
-  prolongation[3](32,11) = 1.0/16.0;
-  prolongation[3](32,15) = 5.0/16.0;
-  prolongation[3](32,34) = 15.0/16.0;
-  prolongation[3](32,35) = -5.0/16.0;
-  prolongation[3](33,34) = 1.0;
-  prolongation[3](34,0) = 5.0/256.0;
-  prolongation[3](34,1) = 1.0/256.0;
-  prolongation[3](34,2) = 5.0/256.0;
-  prolongation[3](34,3) = 25.0/256.0;
-  prolongation[3](34,8) = 15.0/256.0;
-  prolongation[3](34,9) = -5.0/256.0;
-  prolongation[3](34,10) = -5.0/256.0;
-  prolongation[3](34,11) = 15.0/256.0;
-  prolongation[3](34,12) = 75.0/256.0;
-  prolongation[3](34,13) = -25.0/256.0;
-  prolongation[3](34,14) = -25.0/256.0;
-  prolongation[3](34,15) = 75.0/256.0;
-  prolongation[3](34,32) = -75.0/256.0;
-  prolongation[3](34,33) = 25.0/256.0;
-  prolongation[3](34,34) = 225.0/256.0;
-  prolongation[3](34,35) = -75.0/256.0;
-  prolongation[3](35,8) = 1.0/16.0;
-  prolongation[3](35,12) = 5.0/16.0;
-  prolongation[3](35,32) = -5.0/16.0;
-  prolongation[3](35,34) = 15.0/16.0;
-  prolongation[3](36,11) = -1.0/256.0;
-  prolongation[3](36,15) = -5.0/256.0;
-  prolongation[3](36,19) = -1.0/256.0;
-  prolongation[3](36,23) = -5.0/256.0;
-  prolongation[3](36,34) = -15.0/256.0;
-  prolongation[3](36,35) = 5.0/256.0;
-  prolongation[3](36,38) = -15.0/256.0;
-  prolongation[3](36,39) = 5.0/256.0;
-  prolongation[3](36,46) = 9.0/256.0;
-  prolongation[3](36,47) = 9.0/256.0;
-  prolongation[3](36,54) = 45.0/256.0;
-  prolongation[3](36,55) = 45.0/256.0;
-  prolongation[3](36,60) = 135.0/256.0;
-  prolongation[3](36,61) = -45.0/256.0;
-  prolongation[3](36,62) = 135.0/256.0;
-  prolongation[3](36,63) = -45.0/256.0;
-  prolongation[3](37,34) = -1.0/16.0;
-  prolongation[3](37,38) = -1.0/16.0;
-  prolongation[3](37,60) = 9.0/16.0;
-  prolongation[3](37,62) = 9.0/16.0;
-  prolongation[3](38,0) = -5.0/4096.0;
-  prolongation[3](38,1) = -1.0/4096.0;
-  prolongation[3](38,2) = -5.0/4096.0;
-  prolongation[3](38,3) = -25.0/4096.0;
-  prolongation[3](38,4) = -5.0/4096.0;
-  prolongation[3](38,5) = -1.0/4096.0;
-  prolongation[3](38,6) = -5.0/4096.0;
-  prolongation[3](38,7) = -25.0/4096.0;
-  prolongation[3](38,8) = -15.0/4096.0;
-  prolongation[3](38,9) = 5.0/4096.0;
-  prolongation[3](38,10) = 5.0/4096.0;
-  prolongation[3](38,11) = -15.0/4096.0;
-  prolongation[3](38,12) = -75.0/4096.0;
-  prolongation[3](38,13) = 25.0/4096.0;
-  prolongation[3](38,14) = 25.0/4096.0;
-  prolongation[3](38,15) = -75.0/4096.0;
-  prolongation[3](38,16) = -15.0/4096.0;
-  prolongation[3](38,17) = 5.0/4096.0;
-  prolongation[3](38,18) = 5.0/4096.0;
-  prolongation[3](38,19) = -15.0/4096.0;
-  prolongation[3](38,20) = -75.0/4096.0;
-  prolongation[3](38,21) = 25.0/4096.0;
-  prolongation[3](38,22) = 25.0/4096.0;
-  prolongation[3](38,23) = -75.0/4096.0;
-  prolongation[3](38,24) = 45.0/4096.0;
-  prolongation[3](38,25) = 45.0/4096.0;
-  prolongation[3](38,26) = 9.0/4096.0;
-  prolongation[3](38,27) = 9.0/4096.0;
-  prolongation[3](38,28) = 45.0/4096.0;
-  prolongation[3](38,29) = 45.0/4096.0;
-  prolongation[3](38,30) = 225.0/4096.0;
-  prolongation[3](38,31) = 225.0/4096.0;
-  prolongation[3](38,32) = 75.0/4096.0;
-  prolongation[3](38,33) = -25.0/4096.0;
-  prolongation[3](38,34) = -225.0/4096.0;
-  prolongation[3](38,35) = 75.0/4096.0;
-  prolongation[3](38,36) = 75.0/4096.0;
-  prolongation[3](38,37) = -25.0/4096.0;
-  prolongation[3](38,38) = -225.0/4096.0;
-  prolongation[3](38,39) = 75.0/4096.0;
-  prolongation[3](38,40) = 135.0/4096.0;
-  prolongation[3](38,41) = -45.0/4096.0;
-  prolongation[3](38,42) = 135.0/4096.0;
-  prolongation[3](38,43) = -45.0/4096.0;
-  prolongation[3](38,44) = -45.0/4096.0;
-  prolongation[3](38,45) = -45.0/4096.0;
-  prolongation[3](38,46) = 135.0/4096.0;
-  prolongation[3](38,47) = 135.0/4096.0;
-  prolongation[3](38,48) = 675.0/4096.0;
-  prolongation[3](38,49) = -225.0/4096.0;
-  prolongation[3](38,50) = 675.0/4096.0;
-  prolongation[3](38,51) = -225.0/4096.0;
-  prolongation[3](38,52) = -225.0/4096.0;
-  prolongation[3](38,53) = -225.0/4096.0;
-  prolongation[3](38,54) = 675.0/4096.0;
-  prolongation[3](38,55) = 675.0/4096.0;
-  prolongation[3](38,56) = -675.0/4096.0;
-  prolongation[3](38,57) = 225.0/4096.0;
-  prolongation[3](38,58) = -675.0/4096.0;
-  prolongation[3](38,59) = 225.0/4096.0;
-  prolongation[3](38,60) = 2025.0/4096.0;
-  prolongation[3](38,61) = -675.0/4096.0;
-  prolongation[3](38,62) = 2025.0/4096.0;
-  prolongation[3](38,63) = -675.0/4096.0;
-  prolongation[3](39,8) = -1.0/256.0;
-  prolongation[3](39,12) = -5.0/256.0;
-  prolongation[3](39,16) = -1.0/256.0;
-  prolongation[3](39,20) = -5.0/256.0;
-  prolongation[3](39,32) = 5.0/256.0;
-  prolongation[3](39,34) = -15.0/256.0;
-  prolongation[3](39,36) = 5.0/256.0;
-  prolongation[3](39,38) = -15.0/256.0;
-  prolongation[3](39,40) = 9.0/256.0;
-  prolongation[3](39,42) = 9.0/256.0;
-  prolongation[3](39,48) = 45.0/256.0;
-  prolongation[3](39,50) = 45.0/256.0;
-  prolongation[3](39,56) = -45.0/256.0;
-  prolongation[3](39,58) = -45.0/256.0;
-  prolongation[3](39,60) = 135.0/256.0;
-  prolongation[3](39,62) = 135.0/256.0;
-  prolongation[3](40,0) = -25.0/4096.0;
-  prolongation[3](40,1) = -5.0/4096.0;
-  prolongation[3](40,2) = -5.0/4096.0;
-  prolongation[3](40,3) = -25.0/4096.0;
-  prolongation[3](40,4) = -5.0/4096.0;
-  prolongation[3](40,5) = -1.0/4096.0;
-  prolongation[3](40,6) = -1.0/4096.0;
-  prolongation[3](40,7) = -5.0/4096.0;
-  prolongation[3](40,8) = -75.0/4096.0;
-  prolongation[3](40,9) = 25.0/4096.0;
-  prolongation[3](40,10) = 45.0/4096.0;
-  prolongation[3](40,11) = 45.0/4096.0;
-  prolongation[3](40,12) = -75.0/4096.0;
-  prolongation[3](40,13) = 25.0/4096.0;
-  prolongation[3](40,14) = 225.0/4096.0;
-  prolongation[3](40,15) = 225.0/4096.0;
-  prolongation[3](40,16) = -15.0/4096.0;
-  prolongation[3](40,17) = 5.0/4096.0;
-  prolongation[3](40,18) = 9.0/4096.0;
-  prolongation[3](40,19) = 9.0/4096.0;
-  prolongation[3](40,20) = -15.0/4096.0;
-  prolongation[3](40,21) = 5.0/4096.0;
-  prolongation[3](40,22) = 45.0/4096.0;
-  prolongation[3](40,23) = 45.0/4096.0;
-  prolongation[3](40,24) = -75.0/4096.0;
-  prolongation[3](40,25) = 25.0/4096.0;
-  prolongation[3](40,26) = -15.0/4096.0;
-  prolongation[3](40,27) = 5.0/4096.0;
-  prolongation[3](40,28) = -15.0/4096.0;
-  prolongation[3](40,29) = 5.0/4096.0;
-  prolongation[3](40,30) = -75.0/4096.0;
-  prolongation[3](40,31) = 25.0/4096.0;
-  prolongation[3](40,32) = 675.0/4096.0;
-  prolongation[3](40,33) = -225.0/4096.0;
-  prolongation[3](40,34) = 675.0/4096.0;
-  prolongation[3](40,35) = -225.0/4096.0;
-  prolongation[3](40,36) = 135.0/4096.0;
-  prolongation[3](40,37) = -45.0/4096.0;
-  prolongation[3](40,38) = 135.0/4096.0;
-  prolongation[3](40,39) = -45.0/4096.0;
-  prolongation[3](40,40) = -225.0/4096.0;
-  prolongation[3](40,41) = 75.0/4096.0;
-  prolongation[3](40,42) = 75.0/4096.0;
-  prolongation[3](40,43) = -25.0/4096.0;
-  prolongation[3](40,44) = 135.0/4096.0;
-  prolongation[3](40,45) = -45.0/4096.0;
-  prolongation[3](40,46) = 135.0/4096.0;
-  prolongation[3](40,47) = -45.0/4096.0;
-  prolongation[3](40,48) = -225.0/4096.0;
-  prolongation[3](40,49) = 75.0/4096.0;
-  prolongation[3](40,50) = 75.0/4096.0;
-  prolongation[3](40,51) = -25.0/4096.0;
-  prolongation[3](40,52) = 675.0/4096.0;
-  prolongation[3](40,53) = -225.0/4096.0;
-  prolongation[3](40,54) = 675.0/4096.0;
-  prolongation[3](40,55) = -225.0/4096.0;
-  prolongation[3](40,56) = 2025.0/4096.0;
-  prolongation[3](40,57) = -675.0/4096.0;
-  prolongation[3](40,58) = -675.0/4096.0;
-  prolongation[3](40,59) = 225.0/4096.0;
-  prolongation[3](40,60) = 2025.0/4096.0;
-  prolongation[3](40,61) = -675.0/4096.0;
-  prolongation[3](40,62) = -675.0/4096.0;
-  prolongation[3](40,63) = 225.0/4096.0;
-  prolongation[3](41,8) = -5.0/256.0;
-  prolongation[3](41,12) = -5.0/256.0;
-  prolongation[3](41,16) = -1.0/256.0;
-  prolongation[3](41,20) = -1.0/256.0;
-  prolongation[3](41,32) = 45.0/256.0;
-  prolongation[3](41,34) = 45.0/256.0;
-  prolongation[3](41,36) = 9.0/256.0;
-  prolongation[3](41,38) = 9.0/256.0;
-  prolongation[3](41,40) = -15.0/256.0;
-  prolongation[3](41,42) = 5.0/256.0;
-  prolongation[3](41,48) = -15.0/256.0;
-  prolongation[3](41,50) = 5.0/256.0;
-  prolongation[3](41,56) = 135.0/256.0;
-  prolongation[3](41,58) = -45.0/256.0;
-  prolongation[3](41,60) = 135.0/256.0;
-  prolongation[3](41,62) = -45.0/256.0;
-  prolongation[3](42,24) = -5.0/256.0;
-  prolongation[3](42,26) = -1.0/256.0;
-  prolongation[3](42,28) = -1.0/256.0;
-  prolongation[3](42,30) = -5.0/256.0;
-  prolongation[3](42,40) = -15.0/256.0;
-  prolongation[3](42,41) = 5.0/256.0;
-  prolongation[3](42,44) = 9.0/256.0;
-  prolongation[3](42,46) = 9.0/256.0;
-  prolongation[3](42,48) = -15.0/256.0;
-  prolongation[3](42,49) = 5.0/256.0;
-  prolongation[3](42,52) = 45.0/256.0;
-  prolongation[3](42,54) = 45.0/256.0;
-  prolongation[3](42,56) = 135.0/256.0;
-  prolongation[3](42,57) = -45.0/256.0;
-  prolongation[3](42,60) = 135.0/256.0;
-  prolongation[3](42,61) = -45.0/256.0;
-  prolongation[3](43,40) = -1.0/16.0;
-  prolongation[3](43,48) = -1.0/16.0;
-  prolongation[3](43,56) = 9.0/16.0;
-  prolongation[3](43,60) = 9.0/16.0;
-  prolongation[3](44,11) = -5.0/256.0;
-  prolongation[3](44,15) = -5.0/256.0;
-  prolongation[3](44,19) = -1.0/256.0;
-  prolongation[3](44,23) = -1.0/256.0;
-  prolongation[3](44,34) = 45.0/256.0;
-  prolongation[3](44,35) = 45.0/256.0;
-  prolongation[3](44,38) = 9.0/256.0;
-  prolongation[3](44,39) = 9.0/256.0;
-  prolongation[3](44,46) = -15.0/256.0;
-  prolongation[3](44,47) = 5.0/256.0;
-  prolongation[3](44,54) = -15.0/256.0;
-  prolongation[3](44,55) = 5.0/256.0;
-  prolongation[3](44,60) = 135.0/256.0;
-  prolongation[3](44,61) = 135.0/256.0;
-  prolongation[3](44,62) = -45.0/256.0;
-  prolongation[3](44,63) = -45.0/256.0;
-  prolongation[3](45,46) = -1.0/16.0;
-  prolongation[3](45,54) = -1.0/16.0;
-  prolongation[3](45,60) = 9.0/16.0;
-  prolongation[3](45,61) = 9.0/16.0;
-  prolongation[3](46,0) = -5.0/4096.0;
-  prolongation[3](46,1) = -5.0/4096.0;
-  prolongation[3](46,2) = -25.0/4096.0;
-  prolongation[3](46,3) = -25.0/4096.0;
-  prolongation[3](46,4) = -1.0/4096.0;
-  prolongation[3](46,5) = -1.0/4096.0;
-  prolongation[3](46,6) = -5.0/4096.0;
-  prolongation[3](46,7) = -5.0/4096.0;
-  prolongation[3](46,8) = 45.0/4096.0;
-  prolongation[3](46,9) = 45.0/4096.0;
-  prolongation[3](46,10) = 25.0/4096.0;
-  prolongation[3](46,11) = -75.0/4096.0;
-  prolongation[3](46,12) = 225.0/4096.0;
-  prolongation[3](46,13) = 225.0/4096.0;
-  prolongation[3](46,14) = 25.0/4096.0;
-  prolongation[3](46,15) = -75.0/4096.0;
-  prolongation[3](46,16) = 9.0/4096.0;
-  prolongation[3](46,17) = 9.0/4096.0;
-  prolongation[3](46,18) = 5.0/4096.0;
-  prolongation[3](46,19) = -15.0/4096.0;
-  prolongation[3](46,20) = 45.0/4096.0;
-  prolongation[3](46,21) = 45.0/4096.0;
-  prolongation[3](46,22) = 5.0/4096.0;
-  prolongation[3](46,23) = -15.0/4096.0;
-  prolongation[3](46,24) = -15.0/4096.0;
-  prolongation[3](46,25) = 5.0/4096.0;
-  prolongation[3](46,26) = -15.0/4096.0;
-  prolongation[3](46,27) = 5.0/4096.0;
-  prolongation[3](46,28) = -75.0/4096.0;
-  prolongation[3](46,29) = 25.0/4096.0;
-  prolongation[3](46,30) = -75.0/4096.0;
-  prolongation[3](46,31) = 25.0/4096.0;
-  prolongation[3](46,32) = -225.0/4096.0;
-  prolongation[3](46,33) = -225.0/4096.0;
-  prolongation[3](46,34) = 675.0/4096.0;
-  prolongation[3](46,35) = 675.0/4096.0;
-  prolongation[3](46,36) = -45.0/4096.0;
-  prolongation[3](46,37) = -45.0/4096.0;
-  prolongation[3](46,38) = 135.0/4096.0;
-  prolongation[3](46,39) = 135.0/4096.0;
-  prolongation[3](46,40) = 135.0/4096.0;
-  prolongation[3](46,41) = 135.0/4096.0;
-  prolongation[3](46,42) = -45.0/4096.0;
-  prolongation[3](46,43) = -45.0/4096.0;
-  prolongation[3](46,44) = 75.0/4096.0;
-  prolongation[3](46,45) = -25.0/4096.0;
-  prolongation[3](46,46) = -225.0/4096.0;
-  prolongation[3](46,47) = 75.0/4096.0;
-  prolongation[3](46,48) = 675.0/4096.0;
-  prolongation[3](46,49) = 675.0/4096.0;
-  prolongation[3](46,50) = -225.0/4096.0;
-  prolongation[3](46,51) = -225.0/4096.0;
-  prolongation[3](46,52) = 75.0/4096.0;
-  prolongation[3](46,53) = -25.0/4096.0;
-  prolongation[3](46,54) = -225.0/4096.0;
-  prolongation[3](46,55) = 75.0/4096.0;
-  prolongation[3](46,56) = -675.0/4096.0;
-  prolongation[3](46,57) = -675.0/4096.0;
-  prolongation[3](46,58) = 225.0/4096.0;
-  prolongation[3](46,59) = 225.0/4096.0;
-  prolongation[3](46,60) = 2025.0/4096.0;
-  prolongation[3](46,61) = 2025.0/4096.0;
-  prolongation[3](46,62) = -675.0/4096.0;
-  prolongation[3](46,63) = -675.0/4096.0;
-  prolongation[3](47,24) = -1.0/256.0;
-  prolongation[3](47,26) = -1.0/256.0;
-  prolongation[3](47,28) = -5.0/256.0;
-  prolongation[3](47,30) = -5.0/256.0;
-  prolongation[3](47,40) = 9.0/256.0;
-  prolongation[3](47,41) = 9.0/256.0;
-  prolongation[3](47,44) = 5.0/256.0;
-  prolongation[3](47,46) = -15.0/256.0;
-  prolongation[3](47,48) = 45.0/256.0;
-  prolongation[3](47,49) = 45.0/256.0;
-  prolongation[3](47,52) = 5.0/256.0;
-  prolongation[3](47,54) = -15.0/256.0;
-  prolongation[3](47,56) = -45.0/256.0;
-  prolongation[3](47,57) = -45.0/256.0;
-  prolongation[3](47,60) = 135.0/256.0;
-  prolongation[3](47,61) = 135.0/256.0;
-  prolongation[3](48,2) = 5.0/256.0;
-  prolongation[3](48,3) = 25.0/256.0;
-  prolongation[3](48,6) = 1.0/256.0;
-  prolongation[3](48,7) = 5.0/256.0;
-  prolongation[3](48,12) = 75.0/256.0;
-  prolongation[3](48,13) = -25.0/256.0;
-  prolongation[3](48,20) = 15.0/256.0;
-  prolongation[3](48,21) = -5.0/256.0;
-  prolongation[3](48,28) = 15.0/256.0;
-  prolongation[3](48,29) = -5.0/256.0;
-  prolongation[3](48,30) = 75.0/256.0;
-  prolongation[3](48,31) = -25.0/256.0;
-  prolongation[3](48,48) = 225.0/256.0;
-  prolongation[3](48,49) = -75.0/256.0;
-  prolongation[3](48,50) = -75.0/256.0;
-  prolongation[3](48,51) = 25.0/256.0;
-  prolongation[3](49,12) = 5.0/16.0;
-  prolongation[3](49,20) = 1.0/16.0;
-  prolongation[3](49,48) = 15.0/16.0;
-  prolongation[3](49,50) = -5.0/16.0;
-  prolongation[3](50,28) = 1.0/16.0;
-  prolongation[3](50,30) = 5.0/16.0;
-  prolongation[3](50,48) = 15.0/16.0;
-  prolongation[3](50,49) = -5.0/16.0;
-  prolongation[3](51,48) = 1.0;
-  prolongation[3](52,15) = 5.0/16.0;
-  prolongation[3](52,23) = 1.0/16.0;
-  prolongation[3](52,54) = 15.0/16.0;
-  prolongation[3](52,55) = -5.0/16.0;
-  prolongation[3](53,54) = 1.0;
-  prolongation[3](54,0) = 5.0/256.0;
-  prolongation[3](54,3) = 25.0/256.0;
-  prolongation[3](54,4) = 1.0/256.0;
-  prolongation[3](54,7) = 5.0/256.0;
-  prolongation[3](54,14) = -25.0/256.0;
-  prolongation[3](54,15) = 75.0/256.0;
-  prolongation[3](54,22) = -5.0/256.0;
-  prolongation[3](54,23) = 15.0/256.0;
-  prolongation[3](54,24) = 15.0/256.0;
-  prolongation[3](54,25) = -5.0/256.0;
-  prolongation[3](54,30) = 75.0/256.0;
-  prolongation[3](54,31) = -25.0/256.0;
-  prolongation[3](54,52) = -75.0/256.0;
-  prolongation[3](54,53) = 25.0/256.0;
-  prolongation[3](54,54) = 225.0/256.0;
-  prolongation[3](54,55) = -75.0/256.0;
-  prolongation[3](55,24) = 1.0/16.0;
-  prolongation[3](55,30) = 5.0/16.0;
-  prolongation[3](55,52) = -5.0/16.0;
-  prolongation[3](55,54) = 15.0/16.0;
-  prolongation[3](56,11) = 5.0/256.0;
-  prolongation[3](56,15) = 25.0/256.0;
-  prolongation[3](56,19) = 1.0/256.0;
-  prolongation[3](56,23) = 5.0/256.0;
-  prolongation[3](56,34) = 75.0/256.0;
-  prolongation[3](56,35) = -25.0/256.0;
-  prolongation[3](56,38) = 15.0/256.0;
-  prolongation[3](56,39) = -5.0/256.0;
-  prolongation[3](56,46) = 15.0/256.0;
-  prolongation[3](56,47) = -5.0/256.0;
-  prolongation[3](56,54) = 75.0/256.0;
-  prolongation[3](56,55) = -25.0/256.0;
-  prolongation[3](56,60) = 225.0/256.0;
-  prolongation[3](56,61) = -75.0/256.0;
-  prolongation[3](56,62) = -75.0/256.0;
-  prolongation[3](56,63) = 25.0/256.0;
-  prolongation[3](57,34) = 5.0/16.0;
-  prolongation[3](57,38) = 1.0/16.0;
-  prolongation[3](57,60) = 15.0/16.0;
-  prolongation[3](57,62) = -5.0/16.0;
-  prolongation[3](58,46) = 1.0/16.0;
-  prolongation[3](58,54) = 5.0/16.0;
-  prolongation[3](58,60) = 15.0/16.0;
-  prolongation[3](58,61) = -5.0/16.0;
-  prolongation[3](59,60) = 1.0;
-  prolongation[3](60,0) = 25.0/4096.0;
-  prolongation[3](60,1) = 5.0/4096.0;
-  prolongation[3](60,2) = 25.0/4096.0;
-  prolongation[3](60,3) = 125.0/4096.0;
-  prolongation[3](60,4) = 5.0/4096.0;
-  prolongation[3](60,5) = 1.0/4096.0;
-  prolongation[3](60,6) = 5.0/4096.0;
-  prolongation[3](60,7) = 25.0/4096.0;
-  prolongation[3](60,8) = 75.0/4096.0;
-  prolongation[3](60,9) = -25.0/4096.0;
-  prolongation[3](60,10) = -25.0/4096.0;
-  prolongation[3](60,11) = 75.0/4096.0;
-  prolongation[3](60,12) = 375.0/4096.0;
-  prolongation[3](60,13) = -125.0/4096.0;
-  prolongation[3](60,14) = -125.0/4096.0;
-  prolongation[3](60,15) = 375.0/4096.0;
-  prolongation[3](60,16) = 15.0/4096.0;
-  prolongation[3](60,17) = -5.0/4096.0;
-  prolongation[3](60,18) = -5.0/4096.0;
-  prolongation[3](60,19) = 15.0/4096.0;
-  prolongation[3](60,20) = 75.0/4096.0;
-  prolongation[3](60,21) = -25.0/4096.0;
-  prolongation[3](60,22) = -25.0/4096.0;
-  prolongation[3](60,23) = 75.0/4096.0;
-  prolongation[3](60,24) = 75.0/4096.0;
-  prolongation[3](60,25) = -25.0/4096.0;
-  prolongation[3](60,26) = 15.0/4096.0;
-  prolongation[3](60,27) = -5.0/4096.0;
-  prolongation[3](60,28) = 75.0/4096.0;
-  prolongation[3](60,29) = -25.0/4096.0;
-  prolongation[3](60,30) = 375.0/4096.0;
-  prolongation[3](60,31) = -125.0/4096.0;
-  prolongation[3](60,32) = -375.0/4096.0;
-  prolongation[3](60,33) = 125.0/4096.0;
-  prolongation[3](60,34) = 1125.0/4096.0;
-  prolongation[3](60,35) = -375.0/4096.0;
-  prolongation[3](60,36) = -75.0/4096.0;
-  prolongation[3](60,37) = 25.0/4096.0;
-  prolongation[3](60,38) = 225.0/4096.0;
-  prolongation[3](60,39) = -75.0/4096.0;
-  prolongation[3](60,40) = 225.0/4096.0;
-  prolongation[3](60,41) = -75.0/4096.0;
-  prolongation[3](60,42) = -75.0/4096.0;
-  prolongation[3](60,43) = 25.0/4096.0;
-  prolongation[3](60,44) = -75.0/4096.0;
-  prolongation[3](60,45) = 25.0/4096.0;
-  prolongation[3](60,46) = 225.0/4096.0;
-  prolongation[3](60,47) = -75.0/4096.0;
-  prolongation[3](60,48) = 1125.0/4096.0;
-  prolongation[3](60,49) = -375.0/4096.0;
-  prolongation[3](60,50) = -375.0/4096.0;
-  prolongation[3](60,51) = 125.0/4096.0;
-  prolongation[3](60,52) = -375.0/4096.0;
-  prolongation[3](60,53) = 125.0/4096.0;
-  prolongation[3](60,54) = 1125.0/4096.0;
-  prolongation[3](60,55) = -375.0/4096.0;
-  prolongation[3](60,56) = -1125.0/4096.0;
-  prolongation[3](60,57) = 375.0/4096.0;
-  prolongation[3](60,58) = 375.0/4096.0;
-  prolongation[3](60,59) = -125.0/4096.0;
-  prolongation[3](60,60) = 3375.0/4096.0;
-  prolongation[3](60,61) = -1125.0/4096.0;
-  prolongation[3](60,62) = -1125.0/4096.0;
-  prolongation[3](60,63) = 375.0/4096.0;
-  prolongation[3](61,8) = 5.0/256.0;
-  prolongation[3](61,12) = 25.0/256.0;
-  prolongation[3](61,16) = 1.0/256.0;
-  prolongation[3](61,20) = 5.0/256.0;
-  prolongation[3](61,32) = -25.0/256.0;
-  prolongation[3](61,34) = 75.0/256.0;
-  prolongation[3](61,36) = -5.0/256.0;
-  prolongation[3](61,38) = 15.0/256.0;
-  prolongation[3](61,40) = 15.0/256.0;
-  prolongation[3](61,42) = -5.0/256.0;
-  prolongation[3](61,48) = 75.0/256.0;
-  prolongation[3](61,50) = -25.0/256.0;
-  prolongation[3](61,56) = -75.0/256.0;
-  prolongation[3](61,58) = 25.0/256.0;
-  prolongation[3](61,60) = 225.0/256.0;
-  prolongation[3](61,62) = -75.0/256.0;
-  prolongation[3](62,24) = 5.0/256.0;
-  prolongation[3](62,26) = 1.0/256.0;
-  prolongation[3](62,28) = 5.0/256.0;
-  prolongation[3](62,30) = 25.0/256.0;
-  prolongation[3](62,40) = 15.0/256.0;
-  prolongation[3](62,41) = -5.0/256.0;
-  prolongation[3](62,44) = -5.0/256.0;
-  prolongation[3](62,46) = 15.0/256.0;
-  prolongation[3](62,48) = 75.0/256.0;
-  prolongation[3](62,49) = -25.0/256.0;
-  prolongation[3](62,52) = -25.0/256.0;
-  prolongation[3](62,54) = 75.0/256.0;
-  prolongation[3](62,56) = -75.0/256.0;
-  prolongation[3](62,57) = 25.0/256.0;
-  prolongation[3](62,60) = 225.0/256.0;
-  prolongation[3](62,61) = -75.0/256.0;
-  prolongation[3](63,40) = 1.0/16.0;
-  prolongation[3](63,48) = 5.0/16.0;
-  prolongation[3](63,56) = -5.0/16.0;
-  prolongation[3](63,60) = 15.0/16.0;
-  prolongation[4](0,0) = -1.0/16.0;
-  prolongation[4](0,4) = -1.0/16.0;
-  prolongation[4](0,24) = 9.0/16.0;
-  prolongation[4](0,25) = 9.0/16.0;
-  prolongation[4](1,0) = 1.0/256.0;
-  prolongation[4](1,1) = 1.0/256.0;
-  prolongation[4](1,4) = 1.0/256.0;
-  prolongation[4](1,5) = 1.0/256.0;
-  prolongation[4](1,8) = -9.0/256.0;
-  prolongation[4](1,9) = -9.0/256.0;
-  prolongation[4](1,16) = -9.0/256.0;
-  prolongation[4](1,17) = -9.0/256.0;
-  prolongation[4](1,24) = -9.0/256.0;
-  prolongation[4](1,25) = -9.0/256.0;
-  prolongation[4](1,26) = -9.0/256.0;
-  prolongation[4](1,27) = -9.0/256.0;
-  prolongation[4](1,40) = 81.0/256.0;
-  prolongation[4](1,41) = 81.0/256.0;
-  prolongation[4](1,42) = 81.0/256.0;
-  prolongation[4](1,43) = 81.0/256.0;
-  prolongation[4](2,0) = -1.0/4096.0;
-  prolongation[4](2,1) = -1.0/4096.0;
-  prolongation[4](2,2) = -1.0/4096.0;
-  prolongation[4](2,3) = -1.0/4096.0;
-  prolongation[4](2,4) = -1.0/4096.0;
-  prolongation[4](2,5) = -1.0/4096.0;
-  prolongation[4](2,6) = -1.0/4096.0;
-  prolongation[4](2,7) = -1.0/4096.0;
-  prolongation[4](2,8) = 9.0/4096.0;
-  prolongation[4](2,9) = 9.0/4096.0;
-  prolongation[4](2,10) = 9.0/4096.0;
-  prolongation[4](2,11) = 9.0/4096.0;
-  prolongation[4](2,12) = 9.0/4096.0;
-  prolongation[4](2,13) = 9.0/4096.0;
-  prolongation[4](2,14) = 9.0/4096.0;
-  prolongation[4](2,15) = 9.0/4096.0;
-  prolongation[4](2,16) = 9.0/4096.0;
-  prolongation[4](2,17) = 9.0/4096.0;
-  prolongation[4](2,18) = 9.0/4096.0;
-  prolongation[4](2,19) = 9.0/4096.0;
-  prolongation[4](2,20) = 9.0/4096.0;
-  prolongation[4](2,21) = 9.0/4096.0;
-  prolongation[4](2,22) = 9.0/4096.0;
-  prolongation[4](2,23) = 9.0/4096.0;
-  prolongation[4](2,24) = 9.0/4096.0;
-  prolongation[4](2,25) = 9.0/4096.0;
-  prolongation[4](2,26) = 9.0/4096.0;
-  prolongation[4](2,27) = 9.0/4096.0;
-  prolongation[4](2,28) = 9.0/4096.0;
-  prolongation[4](2,29) = 9.0/4096.0;
-  prolongation[4](2,30) = 9.0/4096.0;
-  prolongation[4](2,31) = 9.0/4096.0;
-  prolongation[4](2,32) = -81.0/4096.0;
-  prolongation[4](2,33) = -81.0/4096.0;
-  prolongation[4](2,34) = -81.0/4096.0;
-  prolongation[4](2,35) = -81.0/4096.0;
-  prolongation[4](2,36) = -81.0/4096.0;
-  prolongation[4](2,37) = -81.0/4096.0;
-  prolongation[4](2,38) = -81.0/4096.0;
-  prolongation[4](2,39) = -81.0/4096.0;
-  prolongation[4](2,40) = -81.0/4096.0;
-  prolongation[4](2,41) = -81.0/4096.0;
-  prolongation[4](2,42) = -81.0/4096.0;
-  prolongation[4](2,43) = -81.0/4096.0;
-  prolongation[4](2,44) = -81.0/4096.0;
-  prolongation[4](2,45) = -81.0/4096.0;
-  prolongation[4](2,46) = -81.0/4096.0;
-  prolongation[4](2,47) = -81.0/4096.0;
-  prolongation[4](2,48) = -81.0/4096.0;
-  prolongation[4](2,49) = -81.0/4096.0;
-  prolongation[4](2,50) = -81.0/4096.0;
-  prolongation[4](2,51) = -81.0/4096.0;
-  prolongation[4](2,52) = -81.0/4096.0;
-  prolongation[4](2,53) = -81.0/4096.0;
-  prolongation[4](2,54) = -81.0/4096.0;
-  prolongation[4](2,55) = -81.0/4096.0;
-  prolongation[4](2,56) = 729.0/4096.0;
-  prolongation[4](2,57) = 729.0/4096.0;
-  prolongation[4](2,58) = 729.0/4096.0;
-  prolongation[4](2,59) = 729.0/4096.0;
-  prolongation[4](2,60) = 729.0/4096.0;
-  prolongation[4](2,61) = 729.0/4096.0;
-  prolongation[4](2,62) = 729.0/4096.0;
-  prolongation[4](2,63) = 729.0/4096.0;
-  prolongation[4](3,0) = 1.0/256.0;
-  prolongation[4](3,3) = 1.0/256.0;
-  prolongation[4](3,4) = 1.0/256.0;
-  prolongation[4](3,7) = 1.0/256.0;
-  prolongation[4](3,14) = -9.0/256.0;
-  prolongation[4](3,15) = -9.0/256.0;
-  prolongation[4](3,22) = -9.0/256.0;
-  prolongation[4](3,23) = -9.0/256.0;
-  prolongation[4](3,24) = -9.0/256.0;
-  prolongation[4](3,25) = -9.0/256.0;
-  prolongation[4](3,30) = -9.0/256.0;
-  prolongation[4](3,31) = -9.0/256.0;
-  prolongation[4](3,52) = 81.0/256.0;
-  prolongation[4](3,53) = 81.0/256.0;
-  prolongation[4](3,54) = 81.0/256.0;
-  prolongation[4](3,55) = 81.0/256.0;
-  prolongation[4](4,4) = 1.0;
-  prolongation[4](5,4) = -1.0/16.0;
-  prolongation[4](5,5) = -1.0/16.0;
-  prolongation[4](5,16) = 9.0/16.0;
-  prolongation[4](5,17) = 9.0/16.0;
-  prolongation[4](6,4) = 1.0/256.0;
-  prolongation[4](6,5) = 1.0/256.0;
-  prolongation[4](6,6) = 1.0/256.0;
-  prolongation[4](6,7) = 1.0/256.0;
-  prolongation[4](6,16) = -9.0/256.0;
-  prolongation[4](6,17) = -9.0/256.0;
-  prolongation[4](6,18) = -9.0/256.0;
-  prolongation[4](6,19) = -9.0/256.0;
-  prolongation[4](6,20) = -9.0/256.0;
-  prolongation[4](6,21) = -9.0/256.0;
-  prolongation[4](6,22) = -9.0/256.0;
-  prolongation[4](6,23) = -9.0/256.0;
-  prolongation[4](6,36) = 81.0/256.0;
-  prolongation[4](6,37) = 81.0/256.0;
-  prolongation[4](6,38) = 81.0/256.0;
-  prolongation[4](6,39) = 81.0/256.0;
-  prolongation[4](7,4) = -1.0/16.0;
-  prolongation[4](7,7) = -1.0/16.0;
-  prolongation[4](7,22) = 9.0/16.0;
-  prolongation[4](7,23) = 9.0/16.0;
-  prolongation[4](8,0) = -5.0/256.0;
-  prolongation[4](8,1) = -1.0/256.0;
-  prolongation[4](8,4) = -5.0/256.0;
-  prolongation[4](8,5) = -1.0/256.0;
-  prolongation[4](8,8) = -15.0/256.0;
-  prolongation[4](8,9) = 5.0/256.0;
-  prolongation[4](8,16) = -15.0/256.0;
-  prolongation[4](8,17) = 5.0/256.0;
-  prolongation[4](8,24) = 45.0/256.0;
-  prolongation[4](8,25) = 45.0/256.0;
-  prolongation[4](8,26) = 9.0/256.0;
-  prolongation[4](8,27) = 9.0/256.0;
-  prolongation[4](8,40) = 135.0/256.0;
-  prolongation[4](8,41) = -45.0/256.0;
-  prolongation[4](8,42) = 135.0/256.0;
-  prolongation[4](8,43) = -45.0/256.0;
-  prolongation[4](9,8) = -1.0/16.0;
-  prolongation[4](9,16) = -1.0/16.0;
-  prolongation[4](9,40) = 9.0/16.0;
-  prolongation[4](9,42) = 9.0/16.0;
-  prolongation[4](10,0) = 5.0/4096.0;
-  prolongation[4](10,1) = 5.0/4096.0;
-  prolongation[4](10,2) = 1.0/4096.0;
-  prolongation[4](10,3) = 1.0/4096.0;
-  prolongation[4](10,4) = 5.0/4096.0;
-  prolongation[4](10,5) = 5.0/4096.0;
-  prolongation[4](10,6) = 1.0/4096.0;
-  prolongation[4](10,7) = 1.0/4096.0;
-  prolongation[4](10,8) = -45.0/4096.0;
-  prolongation[4](10,9) = -45.0/4096.0;
-  prolongation[4](10,10) = 15.0/4096.0;
-  prolongation[4](10,11) = -5.0/4096.0;
-  prolongation[4](10,12) = -9.0/4096.0;
-  prolongation[4](10,13) = -9.0/4096.0;
-  prolongation[4](10,14) = 15.0/4096.0;
-  prolongation[4](10,15) = -5.0/4096.0;
-  prolongation[4](10,16) = -45.0/4096.0;
-  prolongation[4](10,17) = -45.0/4096.0;
-  prolongation[4](10,18) = 15.0/4096.0;
-  prolongation[4](10,19) = -5.0/4096.0;
-  prolongation[4](10,20) = -9.0/4096.0;
-  prolongation[4](10,21) = -9.0/4096.0;
-  prolongation[4](10,22) = 15.0/4096.0;
-  prolongation[4](10,23) = -5.0/4096.0;
-  prolongation[4](10,24) = -45.0/4096.0;
-  prolongation[4](10,25) = -45.0/4096.0;
-  prolongation[4](10,26) = -45.0/4096.0;
-  prolongation[4](10,27) = -45.0/4096.0;
-  prolongation[4](10,28) = -9.0/4096.0;
-  prolongation[4](10,29) = -9.0/4096.0;
-  prolongation[4](10,30) = -9.0/4096.0;
-  prolongation[4](10,31) = -9.0/4096.0;
-  prolongation[4](10,32) = -135.0/4096.0;
-  prolongation[4](10,33) = -135.0/4096.0;
-  prolongation[4](10,34) = 45.0/4096.0;
-  prolongation[4](10,35) = 45.0/4096.0;
-  prolongation[4](10,36) = -135.0/4096.0;
-  prolongation[4](10,37) = -135.0/4096.0;
-  prolongation[4](10,38) = 45.0/4096.0;
-  prolongation[4](10,39) = 45.0/4096.0;
-  prolongation[4](10,40) = 405.0/4096.0;
-  prolongation[4](10,41) = 405.0/4096.0;
-  prolongation[4](10,42) = 405.0/4096.0;
-  prolongation[4](10,43) = 405.0/4096.0;
-  prolongation[4](10,44) = -135.0/4096.0;
-  prolongation[4](10,45) = -135.0/4096.0;
-  prolongation[4](10,46) = 45.0/4096.0;
-  prolongation[4](10,47) = 45.0/4096.0;
-  prolongation[4](10,48) = 81.0/4096.0;
-  prolongation[4](10,49) = 81.0/4096.0;
-  prolongation[4](10,50) = 81.0/4096.0;
-  prolongation[4](10,51) = 81.0/4096.0;
-  prolongation[4](10,52) = -135.0/4096.0;
-  prolongation[4](10,53) = -135.0/4096.0;
-  prolongation[4](10,54) = 45.0/4096.0;
-  prolongation[4](10,55) = 45.0/4096.0;
-  prolongation[4](10,56) = 1215.0/4096.0;
-  prolongation[4](10,57) = 1215.0/4096.0;
-  prolongation[4](10,58) = 1215.0/4096.0;
-  prolongation[4](10,59) = 1215.0/4096.0;
-  prolongation[4](10,60) = -405.0/4096.0;
-  prolongation[4](10,61) = -405.0/4096.0;
-  prolongation[4](10,62) = -405.0/4096.0;
-  prolongation[4](10,63) = -405.0/4096.0;
-  prolongation[4](11,10) = 1.0/256.0;
-  prolongation[4](11,14) = 1.0/256.0;
-  prolongation[4](11,18) = 1.0/256.0;
-  prolongation[4](11,22) = 1.0/256.0;
-  prolongation[4](11,32) = -9.0/256.0;
-  prolongation[4](11,33) = -9.0/256.0;
-  prolongation[4](11,36) = -9.0/256.0;
-  prolongation[4](11,37) = -9.0/256.0;
-  prolongation[4](11,44) = -9.0/256.0;
-  prolongation[4](11,45) = -9.0/256.0;
-  prolongation[4](11,52) = -9.0/256.0;
-  prolongation[4](11,53) = -9.0/256.0;
-  prolongation[4](11,56) = 81.0/256.0;
-  prolongation[4](11,57) = 81.0/256.0;
-  prolongation[4](11,58) = 81.0/256.0;
-  prolongation[4](11,59) = 81.0/256.0;
-  prolongation[4](12,0) = 5.0/4096.0;
-  prolongation[4](12,1) = 1.0/4096.0;
-  prolongation[4](12,2) = 1.0/4096.0;
-  prolongation[4](12,3) = 5.0/4096.0;
-  prolongation[4](12,4) = 5.0/4096.0;
-  prolongation[4](12,5) = 1.0/4096.0;
-  prolongation[4](12,6) = 1.0/4096.0;
-  prolongation[4](12,7) = 5.0/4096.0;
-  prolongation[4](12,8) = 15.0/4096.0;
-  prolongation[4](12,9) = -5.0/4096.0;
-  prolongation[4](12,10) = -9.0/4096.0;
-  prolongation[4](12,11) = -9.0/4096.0;
-  prolongation[4](12,12) = 15.0/4096.0;
-  prolongation[4](12,13) = -5.0/4096.0;
-  prolongation[4](12,14) = -45.0/4096.0;
-  prolongation[4](12,15) = -45.0/4096.0;
-  prolongation[4](12,16) = 15.0/4096.0;
-  prolongation[4](12,17) = -5.0/4096.0;
-  prolongation[4](12,18) = -9.0/4096.0;
-  prolongation[4](12,19) = -9.0/4096.0;
-  prolongation[4](12,20) = 15.0/4096.0;
-  prolongation[4](12,21) = -5.0/4096.0;
-  prolongation[4](12,22) = -45.0/4096.0;
-  prolongation[4](12,23) = -45.0/4096.0;
-  prolongation[4](12,24) = -45.0/4096.0;
-  prolongation[4](12,25) = -45.0/4096.0;
-  prolongation[4](12,26) = -9.0/4096.0;
-  prolongation[4](12,27) = -9.0/4096.0;
-  prolongation[4](12,28) = -9.0/4096.0;
-  prolongation[4](12,29) = -9.0/4096.0;
-  prolongation[4](12,30) = -45.0/4096.0;
-  prolongation[4](12,31) = -45.0/4096.0;
-  prolongation[4](12,32) = -135.0/4096.0;
-  prolongation[4](12,33) = 45.0/4096.0;
-  prolongation[4](12,34) = -135.0/4096.0;
-  prolongation[4](12,35) = 45.0/4096.0;
-  prolongation[4](12,36) = -135.0/4096.0;
-  prolongation[4](12,37) = 45.0/4096.0;
-  prolongation[4](12,38) = -135.0/4096.0;
-  prolongation[4](12,39) = 45.0/4096.0;
-  prolongation[4](12,40) = -135.0/4096.0;
-  prolongation[4](12,41) = 45.0/4096.0;
-  prolongation[4](12,42) = -135.0/4096.0;
-  prolongation[4](12,43) = 45.0/4096.0;
-  prolongation[4](12,44) = 81.0/4096.0;
-  prolongation[4](12,45) = 81.0/4096.0;
-  prolongation[4](12,46) = 81.0/4096.0;
-  prolongation[4](12,47) = 81.0/4096.0;
-  prolongation[4](12,48) = -135.0/4096.0;
-  prolongation[4](12,49) = 45.0/4096.0;
-  prolongation[4](12,50) = -135.0/4096.0;
-  prolongation[4](12,51) = 45.0/4096.0;
-  prolongation[4](12,52) = 405.0/4096.0;
-  prolongation[4](12,53) = 405.0/4096.0;
-  prolongation[4](12,54) = 405.0/4096.0;
-  prolongation[4](12,55) = 405.0/4096.0;
-  prolongation[4](12,56) = 1215.0/4096.0;
-  prolongation[4](12,57) = -405.0/4096.0;
-  prolongation[4](12,58) = 1215.0/4096.0;
-  prolongation[4](12,59) = -405.0/4096.0;
-  prolongation[4](12,60) = 1215.0/4096.0;
-  prolongation[4](12,61) = -405.0/4096.0;
-  prolongation[4](12,62) = 1215.0/4096.0;
-  prolongation[4](12,63) = -405.0/4096.0;
-  prolongation[4](13,8) = 1.0/256.0;
-  prolongation[4](13,12) = 1.0/256.0;
-  prolongation[4](13,16) = 1.0/256.0;
-  prolongation[4](13,20) = 1.0/256.0;
-  prolongation[4](13,32) = -9.0/256.0;
-  prolongation[4](13,34) = -9.0/256.0;
-  prolongation[4](13,36) = -9.0/256.0;
-  prolongation[4](13,38) = -9.0/256.0;
-  prolongation[4](13,40) = -9.0/256.0;
-  prolongation[4](13,42) = -9.0/256.0;
-  prolongation[4](13,48) = -9.0/256.0;
-  prolongation[4](13,50) = -9.0/256.0;
-  prolongation[4](13,56) = 81.0/256.0;
-  prolongation[4](13,58) = 81.0/256.0;
-  prolongation[4](13,60) = 81.0/256.0;
-  prolongation[4](13,62) = 81.0/256.0;
-  prolongation[4](14,0) = -5.0/256.0;
-  prolongation[4](14,3) = -1.0/256.0;
-  prolongation[4](14,4) = -5.0/256.0;
-  prolongation[4](14,7) = -1.0/256.0;
-  prolongation[4](14,14) = -15.0/256.0;
-  prolongation[4](14,15) = 5.0/256.0;
-  prolongation[4](14,22) = -15.0/256.0;
-  prolongation[4](14,23) = 5.0/256.0;
-  prolongation[4](14,24) = 45.0/256.0;
-  prolongation[4](14,25) = 45.0/256.0;
-  prolongation[4](14,30) = 9.0/256.0;
-  prolongation[4](14,31) = 9.0/256.0;
-  prolongation[4](14,52) = 135.0/256.0;
-  prolongation[4](14,53) = 135.0/256.0;
-  prolongation[4](14,54) = -45.0/256.0;
-  prolongation[4](14,55) = -45.0/256.0;
-  prolongation[4](15,14) = -1.0/16.0;
-  prolongation[4](15,22) = -1.0/16.0;
-  prolongation[4](15,52) = 9.0/16.0;
-  prolongation[4](15,53) = 9.0/16.0;
-  prolongation[4](16,4) = 5.0/16.0;
-  prolongation[4](16,5) = 1.0/16.0;
-  prolongation[4](16,16) = 15.0/16.0;
-  prolongation[4](16,17) = -5.0/16.0;
-  prolongation[4](17,16) = 1.0;
-  prolongation[4](18,4) = -5.0/256.0;
-  prolongation[4](18,5) = -5.0/256.0;
-  prolongation[4](18,6) = -1.0/256.0;
-  prolongation[4](18,7) = -1.0/256.0;
-  prolongation[4](18,16) = 45.0/256.0;
-  prolongation[4](18,17) = 45.0/256.0;
-  prolongation[4](18,18) = -15.0/256.0;
-  prolongation[4](18,19) = 5.0/256.0;
-  prolongation[4](18,20) = 9.0/256.0;
-  prolongation[4](18,21) = 9.0/256.0;
-  prolongation[4](18,22) = -15.0/256.0;
-  prolongation[4](18,23) = 5.0/256.0;
-  prolongation[4](18,36) = 135.0/256.0;
-  prolongation[4](18,37) = 135.0/256.0;
-  prolongation[4](18,38) = -45.0/256.0;
-  prolongation[4](18,39) = -45.0/256.0;
-  prolongation[4](19,18) = -1.0/16.0;
-  prolongation[4](19,22) = -1.0/16.0;
-  prolongation[4](19,36) = 9.0/16.0;
-  prolongation[4](19,37) = 9.0/16.0;
-  prolongation[4](20,4) = -5.0/256.0;
-  prolongation[4](20,5) = -1.0/256.0;
-  prolongation[4](20,6) = -1.0/256.0;
-  prolongation[4](20,7) = -5.0/256.0;
-  prolongation[4](20,16) = -15.0/256.0;
-  prolongation[4](20,17) = 5.0/256.0;
-  prolongation[4](20,18) = 9.0/256.0;
-  prolongation[4](20,19) = 9.0/256.0;
-  prolongation[4](20,20) = -15.0/256.0;
-  prolongation[4](20,21) = 5.0/256.0;
-  prolongation[4](20,22) = 45.0/256.0;
-  prolongation[4](20,23) = 45.0/256.0;
-  prolongation[4](20,36) = 135.0/256.0;
-  prolongation[4](20,37) = -45.0/256.0;
-  prolongation[4](20,38) = 135.0/256.0;
-  prolongation[4](20,39) = -45.0/256.0;
-  prolongation[4](21,16) = -1.0/16.0;
-  prolongation[4](21,20) = -1.0/16.0;
-  prolongation[4](21,36) = 9.0/16.0;
-  prolongation[4](21,38) = 9.0/16.0;
-  prolongation[4](22,4) = 5.0/16.0;
-  prolongation[4](22,7) = 1.0/16.0;
-  prolongation[4](22,22) = 15.0/16.0;
-  prolongation[4](22,23) = -5.0/16.0;
-  prolongation[4](23,22) = 1.0;
-  prolongation[4](24,25) = 1.0;
-  prolongation[4](25,0) = 1.0/16.0;
-  prolongation[4](25,4) = 5.0/16.0;
-  prolongation[4](25,24) = -5.0/16.0;
-  prolongation[4](25,25) = 15.0/16.0;
-  prolongation[4](26,25) = -1.0/16.0;
-  prolongation[4](26,27) = -1.0/16.0;
-  prolongation[4](26,42) = 9.0/16.0;
-  prolongation[4](26,43) = 9.0/16.0;
-  prolongation[4](27,0) = -1.0/256.0;
-  prolongation[4](27,1) = -1.0/256.0;
-  prolongation[4](27,4) = -5.0/256.0;
-  prolongation[4](27,5) = -5.0/256.0;
-  prolongation[4](27,8) = 9.0/256.0;
-  prolongation[4](27,9) = 9.0/256.0;
-  prolongation[4](27,16) = 45.0/256.0;
-  prolongation[4](27,17) = 45.0/256.0;
-  prolongation[4](27,24) = 5.0/256.0;
-  prolongation[4](27,25) = -15.0/256.0;
-  prolongation[4](27,26) = 5.0/256.0;
-  prolongation[4](27,27) = -15.0/256.0;
-  prolongation[4](27,40) = -45.0/256.0;
-  prolongation[4](27,41) = -45.0/256.0;
-  prolongation[4](27,42) = 135.0/256.0;
-  prolongation[4](27,43) = 135.0/256.0;
-  prolongation[4](28,25) = 1.0/256.0;
-  prolongation[4](28,27) = 1.0/256.0;
-  prolongation[4](28,29) = 1.0/256.0;
-  prolongation[4](28,31) = 1.0/256.0;
-  prolongation[4](28,42) = -9.0/256.0;
-  prolongation[4](28,43) = -9.0/256.0;
-  prolongation[4](28,45) = -9.0/256.0;
-  prolongation[4](28,47) = -9.0/256.0;
-  prolongation[4](28,50) = -9.0/256.0;
-  prolongation[4](28,51) = -9.0/256.0;
-  prolongation[4](28,53) = -9.0/256.0;
-  prolongation[4](28,55) = -9.0/256.0;
-  prolongation[4](28,58) = 81.0/256.0;
-  prolongation[4](28,59) = 81.0/256.0;
-  prolongation[4](28,62) = 81.0/256.0;
-  prolongation[4](28,63) = 81.0/256.0;
-  prolongation[4](29,0) = 1.0/4096.0;
-  prolongation[4](29,1) = 1.0/4096.0;
-  prolongation[4](29,2) = 1.0/4096.0;
-  prolongation[4](29,3) = 1.0/4096.0;
-  prolongation[4](29,4) = 5.0/4096.0;
-  prolongation[4](29,5) = 5.0/4096.0;
-  prolongation[4](29,6) = 5.0/4096.0;
-  prolongation[4](29,7) = 5.0/4096.0;
-  prolongation[4](29,8) = -9.0/4096.0;
-  prolongation[4](29,9) = -9.0/4096.0;
-  prolongation[4](29,10) = -9.0/4096.0;
-  prolongation[4](29,11) = -9.0/4096.0;
-  prolongation[4](29,12) = -9.0/4096.0;
-  prolongation[4](29,13) = -9.0/4096.0;
-  prolongation[4](29,14) = -9.0/4096.0;
-  prolongation[4](29,15) = -9.0/4096.0;
-  prolongation[4](29,16) = -45.0/4096.0;
-  prolongation[4](29,17) = -45.0/4096.0;
-  prolongation[4](29,18) = -45.0/4096.0;
-  prolongation[4](29,19) = -45.0/4096.0;
-  prolongation[4](29,20) = -45.0/4096.0;
-  prolongation[4](29,21) = -45.0/4096.0;
-  prolongation[4](29,22) = -45.0/4096.0;
-  prolongation[4](29,23) = -45.0/4096.0;
-  prolongation[4](29,24) = -5.0/4096.0;
-  prolongation[4](29,25) = 15.0/4096.0;
-  prolongation[4](29,26) = -5.0/4096.0;
-  prolongation[4](29,27) = 15.0/4096.0;
-  prolongation[4](29,28) = -5.0/4096.0;
-  prolongation[4](29,29) = 15.0/4096.0;
-  prolongation[4](29,30) = -5.0/4096.0;
-  prolongation[4](29,31) = 15.0/4096.0;
-  prolongation[4](29,32) = 81.0/4096.0;
-  prolongation[4](29,33) = 81.0/4096.0;
-  prolongation[4](29,34) = 81.0/4096.0;
-  prolongation[4](29,35) = 81.0/4096.0;
-  prolongation[4](29,36) = 405.0/4096.0;
-  prolongation[4](29,37) = 405.0/4096.0;
-  prolongation[4](29,38) = 405.0/4096.0;
-  prolongation[4](29,39) = 405.0/4096.0;
-  prolongation[4](29,40) = 45.0/4096.0;
-  prolongation[4](29,41) = 45.0/4096.0;
-  prolongation[4](29,42) = -135.0/4096.0;
-  prolongation[4](29,43) = -135.0/4096.0;
-  prolongation[4](29,44) = 45.0/4096.0;
-  prolongation[4](29,45) = -135.0/4096.0;
-  prolongation[4](29,46) = 45.0/4096.0;
-  prolongation[4](29,47) = -135.0/4096.0;
-  prolongation[4](29,48) = 45.0/4096.0;
-  prolongation[4](29,49) = 45.0/4096.0;
-  prolongation[4](29,50) = -135.0/4096.0;
-  prolongation[4](29,51) = -135.0/4096.0;
-  prolongation[4](29,52) = 45.0/4096.0;
-  prolongation[4](29,53) = -135.0/4096.0;
-  prolongation[4](29,54) = 45.0/4096.0;
-  prolongation[4](29,55) = -135.0/4096.0;
-  prolongation[4](29,56) = -405.0/4096.0;
-  prolongation[4](29,57) = -405.0/4096.0;
-  prolongation[4](29,58) = 1215.0/4096.0;
-  prolongation[4](29,59) = 1215.0/4096.0;
-  prolongation[4](29,60) = -405.0/4096.0;
-  prolongation[4](29,61) = -405.0/4096.0;
-  prolongation[4](29,62) = 1215.0/4096.0;
-  prolongation[4](29,63) = 1215.0/4096.0;
-  prolongation[4](30,25) = -1.0/16.0;
-  prolongation[4](30,31) = -1.0/16.0;
-  prolongation[4](30,53) = 9.0/16.0;
-  prolongation[4](30,55) = 9.0/16.0;
-  prolongation[4](31,0) = -1.0/256.0;
-  prolongation[4](31,3) = -1.0/256.0;
-  prolongation[4](31,4) = -5.0/256.0;
-  prolongation[4](31,7) = -5.0/256.0;
-  prolongation[4](31,14) = 9.0/256.0;
-  prolongation[4](31,15) = 9.0/256.0;
-  prolongation[4](31,22) = 45.0/256.0;
-  prolongation[4](31,23) = 45.0/256.0;
-  prolongation[4](31,24) = 5.0/256.0;
-  prolongation[4](31,25) = -15.0/256.0;
-  prolongation[4](31,30) = 5.0/256.0;
-  prolongation[4](31,31) = -15.0/256.0;
-  prolongation[4](31,52) = -45.0/256.0;
-  prolongation[4](31,53) = 135.0/256.0;
-  prolongation[4](31,54) = -45.0/256.0;
-  prolongation[4](31,55) = 135.0/256.0;
-  prolongation[4](32,0) = -25.0/4096.0;
-  prolongation[4](32,1) = -5.0/4096.0;
-  prolongation[4](32,2) = -1.0/4096.0;
-  prolongation[4](32,3) = -5.0/4096.0;
-  prolongation[4](32,4) = -25.0/4096.0;
-  prolongation[4](32,5) = -5.0/4096.0;
-  prolongation[4](32,6) = -1.0/4096.0;
-  prolongation[4](32,7) = -5.0/4096.0;
-  prolongation[4](32,8) = -75.0/4096.0;
-  prolongation[4](32,9) = 25.0/4096.0;
-  prolongation[4](32,10) = -15.0/4096.0;
-  prolongation[4](32,11) = 5.0/4096.0;
-  prolongation[4](32,12) = -15.0/4096.0;
-  prolongation[4](32,13) = 5.0/4096.0;
-  prolongation[4](32,14) = -75.0/4096.0;
-  prolongation[4](32,15) = 25.0/4096.0;
-  prolongation[4](32,16) = -75.0/4096.0;
-  prolongation[4](32,17) = 25.0/4096.0;
-  prolongation[4](32,18) = -15.0/4096.0;
-  prolongation[4](32,19) = 5.0/4096.0;
-  prolongation[4](32,20) = -15.0/4096.0;
-  prolongation[4](32,21) = 5.0/4096.0;
-  prolongation[4](32,22) = -75.0/4096.0;
-  prolongation[4](32,23) = 25.0/4096.0;
-  prolongation[4](32,24) = 225.0/4096.0;
-  prolongation[4](32,25) = 225.0/4096.0;
-  prolongation[4](32,26) = 45.0/4096.0;
-  prolongation[4](32,27) = 45.0/4096.0;
-  prolongation[4](32,28) = 9.0/4096.0;
-  prolongation[4](32,29) = 9.0/4096.0;
-  prolongation[4](32,30) = 45.0/4096.0;
-  prolongation[4](32,31) = 45.0/4096.0;
-  prolongation[4](32,32) = -225.0/4096.0;
-  prolongation[4](32,33) = 75.0/4096.0;
-  prolongation[4](32,34) = 75.0/4096.0;
-  prolongation[4](32,35) = -25.0/4096.0;
-  prolongation[4](32,36) = -225.0/4096.0;
-  prolongation[4](32,37) = 75.0/4096.0;
-  prolongation[4](32,38) = 75.0/4096.0;
-  prolongation[4](32,39) = -25.0/4096.0;
-  prolongation[4](32,40) = 675.0/4096.0;
-  prolongation[4](32,41) = -225.0/4096.0;
-  prolongation[4](32,42) = 675.0/4096.0;
-  prolongation[4](32,43) = -225.0/4096.0;
-  prolongation[4](32,44) = 135.0/4096.0;
-  prolongation[4](32,45) = 135.0/4096.0;
-  prolongation[4](32,46) = -45.0/4096.0;
-  prolongation[4](32,47) = -45.0/4096.0;
-  prolongation[4](32,48) = 135.0/4096.0;
-  prolongation[4](32,49) = -45.0/4096.0;
-  prolongation[4](32,50) = 135.0/4096.0;
-  prolongation[4](32,51) = -45.0/4096.0;
-  prolongation[4](32,52) = 675.0/4096.0;
-  prolongation[4](32,53) = 675.0/4096.0;
-  prolongation[4](32,54) = -225.0/4096.0;
-  prolongation[4](32,55) = -225.0/4096.0;
-  prolongation[4](32,56) = 2025.0/4096.0;
-  prolongation[4](32,57) = -675.0/4096.0;
-  prolongation[4](32,58) = 2025.0/4096.0;
-  prolongation[4](32,59) = -675.0/4096.0;
-  prolongation[4](32,60) = -675.0/4096.0;
-  prolongation[4](32,61) = 225.0/4096.0;
-  prolongation[4](32,62) = -675.0/4096.0;
-  prolongation[4](32,63) = 225.0/4096.0;
-  prolongation[4](33,8) = -5.0/256.0;
-  prolongation[4](33,12) = -1.0/256.0;
-  prolongation[4](33,16) = -5.0/256.0;
-  prolongation[4](33,20) = -1.0/256.0;
-  prolongation[4](33,32) = -15.0/256.0;
-  prolongation[4](33,34) = 5.0/256.0;
-  prolongation[4](33,36) = -15.0/256.0;
-  prolongation[4](33,38) = 5.0/256.0;
-  prolongation[4](33,40) = 45.0/256.0;
-  prolongation[4](33,42) = 45.0/256.0;
-  prolongation[4](33,48) = 9.0/256.0;
-  prolongation[4](33,50) = 9.0/256.0;
-  prolongation[4](33,56) = 135.0/256.0;
-  prolongation[4](33,58) = 135.0/256.0;
-  prolongation[4](33,60) = -45.0/256.0;
-  prolongation[4](33,62) = -45.0/256.0;
-  prolongation[4](34,10) = -1.0/256.0;
-  prolongation[4](34,14) = -5.0/256.0;
-  prolongation[4](34,18) = -1.0/256.0;
-  prolongation[4](34,22) = -5.0/256.0;
-  prolongation[4](34,32) = -15.0/256.0;
-  prolongation[4](34,33) = 5.0/256.0;
-  prolongation[4](34,36) = -15.0/256.0;
-  prolongation[4](34,37) = 5.0/256.0;
-  prolongation[4](34,44) = 9.0/256.0;
-  prolongation[4](34,45) = 9.0/256.0;
-  prolongation[4](34,52) = 45.0/256.0;
-  prolongation[4](34,53) = 45.0/256.0;
-  prolongation[4](34,56) = 135.0/256.0;
-  prolongation[4](34,57) = -45.0/256.0;
-  prolongation[4](34,58) = 135.0/256.0;
-  prolongation[4](34,59) = -45.0/256.0;
-  prolongation[4](35,32) = -1.0/16.0;
-  prolongation[4](35,36) = -1.0/16.0;
-  prolongation[4](35,56) = 9.0/16.0;
-  prolongation[4](35,58) = 9.0/16.0;
-  prolongation[4](36,4) = 25.0/256.0;
-  prolongation[4](36,5) = 5.0/256.0;
-  prolongation[4](36,6) = 1.0/256.0;
-  prolongation[4](36,7) = 5.0/256.0;
-  prolongation[4](36,16) = 75.0/256.0;
-  prolongation[4](36,17) = -25.0/256.0;
-  prolongation[4](36,18) = 15.0/256.0;
-  prolongation[4](36,19) = -5.0/256.0;
-  prolongation[4](36,20) = 15.0/256.0;
-  prolongation[4](36,21) = -5.0/256.0;
-  prolongation[4](36,22) = 75.0/256.0;
-  prolongation[4](36,23) = -25.0/256.0;
-  prolongation[4](36,36) = 225.0/256.0;
-  prolongation[4](36,37) = -75.0/256.0;
-  prolongation[4](36,38) = -75.0/256.0;
-  prolongation[4](36,39) = 25.0/256.0;
-  prolongation[4](37,16) = 5.0/16.0;
-  prolongation[4](37,20) = 1.0/16.0;
-  prolongation[4](37,36) = 15.0/16.0;
-  prolongation[4](37,38) = -5.0/16.0;
-  prolongation[4](38,18) = 1.0/16.0;
-  prolongation[4](38,22) = 5.0/16.0;
-  prolongation[4](38,36) = 15.0/16.0;
-  prolongation[4](38,37) = -5.0/16.0;
-  prolongation[4](39,36) = 1.0;
-  prolongation[4](40,25) = 5.0/16.0;
-  prolongation[4](40,27) = 1.0/16.0;
-  prolongation[4](40,42) = 15.0/16.0;
-  prolongation[4](40,43) = -5.0/16.0;
-  prolongation[4](41,42) = 1.0;
-  prolongation[4](42,0) = 5.0/256.0;
-  prolongation[4](42,1) = 1.0/256.0;
-  prolongation[4](42,4) = 25.0/256.0;
-  prolongation[4](42,5) = 5.0/256.0;
-  prolongation[4](42,8) = 15.0/256.0;
-  prolongation[4](42,9) = -5.0/256.0;
-  prolongation[4](42,16) = 75.0/256.0;
-  prolongation[4](42,17) = -25.0/256.0;
-  prolongation[4](42,24) = -25.0/256.0;
-  prolongation[4](42,25) = 75.0/256.0;
-  prolongation[4](42,26) = -5.0/256.0;
-  prolongation[4](42,27) = 15.0/256.0;
-  prolongation[4](42,40) = -75.0/256.0;
-  prolongation[4](42,41) = 25.0/256.0;
-  prolongation[4](42,42) = 225.0/256.0;
-  prolongation[4](42,43) = -75.0/256.0;
-  prolongation[4](43,8) = 1.0/16.0;
-  prolongation[4](43,16) = 5.0/16.0;
-  prolongation[4](43,40) = -5.0/16.0;
-  prolongation[4](43,42) = 15.0/16.0;
-  prolongation[4](44,25) = -5.0/256.0;
-  prolongation[4](44,27) = -5.0/256.0;
-  prolongation[4](44,29) = -1.0/256.0;
-  prolongation[4](44,31) = -1.0/256.0;
-  prolongation[4](44,42) = 45.0/256.0;
-  prolongation[4](44,43) = 45.0/256.0;
-  prolongation[4](44,45) = -15.0/256.0;
-  prolongation[4](44,47) = 5.0/256.0;
-  prolongation[4](44,50) = 9.0/256.0;
-  prolongation[4](44,51) = 9.0/256.0;
-  prolongation[4](44,53) = -15.0/256.0;
-  prolongation[4](44,55) = 5.0/256.0;
-  prolongation[4](44,58) = 135.0/256.0;
-  prolongation[4](44,59) = 135.0/256.0;
-  prolongation[4](44,62) = -45.0/256.0;
-  prolongation[4](44,63) = -45.0/256.0;
-  prolongation[4](45,0) = -5.0/4096.0;
-  prolongation[4](45,1) = -5.0/4096.0;
-  prolongation[4](45,2) = -1.0/4096.0;
-  prolongation[4](45,3) = -1.0/4096.0;
-  prolongation[4](45,4) = -25.0/4096.0;
-  prolongation[4](45,5) = -25.0/4096.0;
-  prolongation[4](45,6) = -5.0/4096.0;
-  prolongation[4](45,7) = -5.0/4096.0;
-  prolongation[4](45,8) = 45.0/4096.0;
-  prolongation[4](45,9) = 45.0/4096.0;
-  prolongation[4](45,10) = -15.0/4096.0;
-  prolongation[4](45,11) = 5.0/4096.0;
-  prolongation[4](45,12) = 9.0/4096.0;
-  prolongation[4](45,13) = 9.0/4096.0;
-  prolongation[4](45,14) = -15.0/4096.0;
-  prolongation[4](45,15) = 5.0/4096.0;
-  prolongation[4](45,16) = 225.0/4096.0;
-  prolongation[4](45,17) = 225.0/4096.0;
-  prolongation[4](45,18) = -75.0/4096.0;
-  prolongation[4](45,19) = 25.0/4096.0;
-  prolongation[4](45,20) = 45.0/4096.0;
-  prolongation[4](45,21) = 45.0/4096.0;
-  prolongation[4](45,22) = -75.0/4096.0;
-  prolongation[4](45,23) = 25.0/4096.0;
-  prolongation[4](45,24) = 25.0/4096.0;
-  prolongation[4](45,25) = -75.0/4096.0;
-  prolongation[4](45,26) = 25.0/4096.0;
-  prolongation[4](45,27) = -75.0/4096.0;
-  prolongation[4](45,28) = 5.0/4096.0;
-  prolongation[4](45,29) = -15.0/4096.0;
-  prolongation[4](45,30) = 5.0/4096.0;
-  prolongation[4](45,31) = -15.0/4096.0;
-  prolongation[4](45,32) = 135.0/4096.0;
-  prolongation[4](45,33) = 135.0/4096.0;
-  prolongation[4](45,34) = -45.0/4096.0;
-  prolongation[4](45,35) = -45.0/4096.0;
-  prolongation[4](45,36) = 675.0/4096.0;
-  prolongation[4](45,37) = 675.0/4096.0;
-  prolongation[4](45,38) = -225.0/4096.0;
-  prolongation[4](45,39) = -225.0/4096.0;
-  prolongation[4](45,40) = -225.0/4096.0;
-  prolongation[4](45,41) = -225.0/4096.0;
-  prolongation[4](45,42) = 675.0/4096.0;
-  prolongation[4](45,43) = 675.0/4096.0;
-  prolongation[4](45,44) = 75.0/4096.0;
-  prolongation[4](45,45) = -225.0/4096.0;
-  prolongation[4](45,46) = -25.0/4096.0;
-  prolongation[4](45,47) = 75.0/4096.0;
-  prolongation[4](45,48) = -45.0/4096.0;
-  prolongation[4](45,49) = -45.0/4096.0;
-  prolongation[4](45,50) = 135.0/4096.0;
-  prolongation[4](45,51) = 135.0/4096.0;
-  prolongation[4](45,52) = 75.0/4096.0;
-  prolongation[4](45,53) = -225.0/4096.0;
-  prolongation[4](45,54) = -25.0/4096.0;
-  prolongation[4](45,55) = 75.0/4096.0;
-  prolongation[4](45,56) = -675.0/4096.0;
-  prolongation[4](45,57) = -675.0/4096.0;
-  prolongation[4](45,58) = 2025.0/4096.0;
-  prolongation[4](45,59) = 2025.0/4096.0;
-  prolongation[4](45,60) = 225.0/4096.0;
-  prolongation[4](45,61) = 225.0/4096.0;
-  prolongation[4](45,62) = -675.0/4096.0;
-  prolongation[4](45,63) = -675.0/4096.0;
-  prolongation[4](46,45) = -1.0/16.0;
-  prolongation[4](46,53) = -1.0/16.0;
-  prolongation[4](46,58) = 9.0/16.0;
-  prolongation[4](46,59) = 9.0/16.0;
-  prolongation[4](47,10) = -1.0/256.0;
-  prolongation[4](47,14) = -1.0/256.0;
-  prolongation[4](47,18) = -5.0/256.0;
-  prolongation[4](47,22) = -5.0/256.0;
-  prolongation[4](47,32) = 9.0/256.0;
-  prolongation[4](47,33) = 9.0/256.0;
-  prolongation[4](47,36) = 45.0/256.0;
-  prolongation[4](47,37) = 45.0/256.0;
-  prolongation[4](47,44) = 5.0/256.0;
-  prolongation[4](47,45) = -15.0/256.0;
-  prolongation[4](47,52) = 5.0/256.0;
-  prolongation[4](47,53) = -15.0/256.0;
-  prolongation[4](47,56) = -45.0/256.0;
-  prolongation[4](47,57) = -45.0/256.0;
-  prolongation[4](47,58) = 135.0/256.0;
-  prolongation[4](47,59) = 135.0/256.0;
-  prolongation[4](48,25) = -5.0/256.0;
-  prolongation[4](48,27) = -1.0/256.0;
-  prolongation[4](48,29) = -1.0/256.0;
-  prolongation[4](48,31) = -5.0/256.0;
-  prolongation[4](48,42) = -15.0/256.0;
-  prolongation[4](48,43) = 5.0/256.0;
-  prolongation[4](48,45) = 9.0/256.0;
-  prolongation[4](48,47) = 9.0/256.0;
-  prolongation[4](48,50) = -15.0/256.0;
-  prolongation[4](48,51) = 5.0/256.0;
-  prolongation[4](48,53) = 45.0/256.0;
-  prolongation[4](48,55) = 45.0/256.0;
-  prolongation[4](48,58) = 135.0/256.0;
-  prolongation[4](48,59) = -45.0/256.0;
-  prolongation[4](48,62) = 135.0/256.0;
-  prolongation[4](48,63) = -45.0/256.0;
-  prolongation[4](49,42) = -1.0/16.0;
-  prolongation[4](49,50) = -1.0/16.0;
-  prolongation[4](49,58) = 9.0/16.0;
-  prolongation[4](49,62) = 9.0/16.0;
-  prolongation[4](50,0) = -5.0/4096.0;
-  prolongation[4](50,1) = -1.0/4096.0;
-  prolongation[4](50,2) = -1.0/4096.0;
-  prolongation[4](50,3) = -5.0/4096.0;
-  prolongation[4](50,4) = -25.0/4096.0;
-  prolongation[4](50,5) = -5.0/4096.0;
-  prolongation[4](50,6) = -5.0/4096.0;
-  prolongation[4](50,7) = -25.0/4096.0;
-  prolongation[4](50,8) = -15.0/4096.0;
-  prolongation[4](50,9) = 5.0/4096.0;
-  prolongation[4](50,10) = 9.0/4096.0;
-  prolongation[4](50,11) = 9.0/4096.0;
-  prolongation[4](50,12) = -15.0/4096.0;
-  prolongation[4](50,13) = 5.0/4096.0;
-  prolongation[4](50,14) = 45.0/4096.0;
-  prolongation[4](50,15) = 45.0/4096.0;
-  prolongation[4](50,16) = -75.0/4096.0;
-  prolongation[4](50,17) = 25.0/4096.0;
-  prolongation[4](50,18) = 45.0/4096.0;
-  prolongation[4](50,19) = 45.0/4096.0;
-  prolongation[4](50,20) = -75.0/4096.0;
-  prolongation[4](50,21) = 25.0/4096.0;
-  prolongation[4](50,22) = 225.0/4096.0;
-  prolongation[4](50,23) = 225.0/4096.0;
-  prolongation[4](50,24) = 25.0/4096.0;
-  prolongation[4](50,25) = -75.0/4096.0;
-  prolongation[4](50,26) = 5.0/4096.0;
-  prolongation[4](50,27) = -15.0/4096.0;
-  prolongation[4](50,28) = 5.0/4096.0;
-  prolongation[4](50,29) = -15.0/4096.0;
-  prolongation[4](50,30) = 25.0/4096.0;
-  prolongation[4](50,31) = -75.0/4096.0;
-  prolongation[4](50,32) = 135.0/4096.0;
-  prolongation[4](50,33) = -45.0/4096.0;
-  prolongation[4](50,34) = 135.0/4096.0;
-  prolongation[4](50,35) = -45.0/4096.0;
-  prolongation[4](50,36) = 675.0/4096.0;
-  prolongation[4](50,37) = -225.0/4096.0;
-  prolongation[4](50,38) = 675.0/4096.0;
-  prolongation[4](50,39) = -225.0/4096.0;
-  prolongation[4](50,40) = 75.0/4096.0;
-  prolongation[4](50,41) = -25.0/4096.0;
-  prolongation[4](50,42) = -225.0/4096.0;
-  prolongation[4](50,43) = 75.0/4096.0;
-  prolongation[4](50,44) = -45.0/4096.0;
-  prolongation[4](50,45) = 135.0/4096.0;
-  prolongation[4](50,46) = -45.0/4096.0;
-  prolongation[4](50,47) = 135.0/4096.0;
-  prolongation[4](50,48) = 75.0/4096.0;
-  prolongation[4](50,49) = -25.0/4096.0;
-  prolongation[4](50,50) = -225.0/4096.0;
-  prolongation[4](50,51) = 75.0/4096.0;
-  prolongation[4](50,52) = -225.0/4096.0;
-  prolongation[4](50,53) = 675.0/4096.0;
-  prolongation[4](50,54) = -225.0/4096.0;
-  prolongation[4](50,55) = 675.0/4096.0;
-  prolongation[4](50,56) = -675.0/4096.0;
-  prolongation[4](50,57) = 225.0/4096.0;
-  prolongation[4](50,58) = 2025.0/4096.0;
-  prolongation[4](50,59) = -675.0/4096.0;
-  prolongation[4](50,60) = -675.0/4096.0;
-  prolongation[4](50,61) = 225.0/4096.0;
-  prolongation[4](50,62) = 2025.0/4096.0;
-  prolongation[4](50,63) = -675.0/4096.0;
-  prolongation[4](51,8) = -1.0/256.0;
-  prolongation[4](51,12) = -1.0/256.0;
-  prolongation[4](51,16) = -5.0/256.0;
-  prolongation[4](51,20) = -5.0/256.0;
-  prolongation[4](51,32) = 9.0/256.0;
-  prolongation[4](51,34) = 9.0/256.0;
-  prolongation[4](51,36) = 45.0/256.0;
-  prolongation[4](51,38) = 45.0/256.0;
-  prolongation[4](51,40) = 5.0/256.0;
-  prolongation[4](51,42) = -15.0/256.0;
-  prolongation[4](51,48) = 5.0/256.0;
-  prolongation[4](51,50) = -15.0/256.0;
-  prolongation[4](51,56) = -45.0/256.0;
-  prolongation[4](51,58) = 135.0/256.0;
-  prolongation[4](51,60) = -45.0/256.0;
-  prolongation[4](51,62) = 135.0/256.0;
-  prolongation[4](52,25) = 5.0/16.0;
-  prolongation[4](52,31) = 1.0/16.0;
-  prolongation[4](52,53) = 15.0/16.0;
-  prolongation[4](52,55) = -5.0/16.0;
-  prolongation[4](53,0) = 5.0/256.0;
-  prolongation[4](53,3) = 1.0/256.0;
-  prolongation[4](53,4) = 25.0/256.0;
-  prolongation[4](53,7) = 5.0/256.0;
-  prolongation[4](53,14) = 15.0/256.0;
-  prolongation[4](53,15) = -5.0/256.0;
-  prolongation[4](53,22) = 75.0/256.0;
-  prolongation[4](53,23) = -25.0/256.0;
-  prolongation[4](53,24) = -25.0/256.0;
-  prolongation[4](53,25) = 75.0/256.0;
-  prolongation[4](53,30) = -5.0/256.0;
-  prolongation[4](53,31) = 15.0/256.0;
-  prolongation[4](53,52) = -75.0/256.0;
-  prolongation[4](53,53) = 225.0/256.0;
-  prolongation[4](53,54) = 25.0/256.0;
-  prolongation[4](53,55) = -75.0/256.0;
-  prolongation[4](54,53) = 1.0;
-  prolongation[4](55,14) = 1.0/16.0;
-  prolongation[4](55,22) = 5.0/16.0;
-  prolongation[4](55,52) = -5.0/16.0;
-  prolongation[4](55,53) = 15.0/16.0;
-  prolongation[4](56,25) = 25.0/256.0;
-  prolongation[4](56,27) = 5.0/256.0;
-  prolongation[4](56,29) = 1.0/256.0;
-  prolongation[4](56,31) = 5.0/256.0;
-  prolongation[4](56,42) = 75.0/256.0;
-  prolongation[4](56,43) = -25.0/256.0;
-  prolongation[4](56,45) = 15.0/256.0;
-  prolongation[4](56,47) = -5.0/256.0;
-  prolongation[4](56,50) = 15.0/256.0;
-  prolongation[4](56,51) = -5.0/256.0;
-  prolongation[4](56,53) = 75.0/256.0;
-  prolongation[4](56,55) = -25.0/256.0;
-  prolongation[4](56,58) = 225.0/256.0;
-  prolongation[4](56,59) = -75.0/256.0;
-  prolongation[4](56,62) = -75.0/256.0;
-  prolongation[4](56,63) = 25.0/256.0;
-  prolongation[4](57,42) = 5.0/16.0;
-  prolongation[4](57,50) = 1.0/16.0;
-  prolongation[4](57,58) = 15.0/16.0;
-  prolongation[4](57,62) = -5.0/16.0;
-  prolongation[4](58,0) = 25.0/4096.0;
-  prolongation[4](58,1) = 5.0/4096.0;
-  prolongation[4](58,2) = 1.0/4096.0;
-  prolongation[4](58,3) = 5.0/4096.0;
-  prolongation[4](58,4) = 125.0/4096.0;
-  prolongation[4](58,5) = 25.0/4096.0;
-  prolongation[4](58,6) = 5.0/4096.0;
-  prolongation[4](58,7) = 25.0/4096.0;
-  prolongation[4](58,8) = 75.0/4096.0;
-  prolongation[4](58,9) = -25.0/4096.0;
-  prolongation[4](58,10) = 15.0/4096.0;
-  prolongation[4](58,11) = -5.0/4096.0;
-  prolongation[4](58,12) = 15.0/4096.0;
-  prolongation[4](58,13) = -5.0/4096.0;
-  prolongation[4](58,14) = 75.0/4096.0;
-  prolongation[4](58,15) = -25.0/4096.0;
-  prolongation[4](58,16) = 375.0/4096.0;
-  prolongation[4](58,17) = -125.0/4096.0;
-  prolongation[4](58,18) = 75.0/4096.0;
-  prolongation[4](58,19) = -25.0/4096.0;
-  prolongation[4](58,20) = 75.0/4096.0;
-  prolongation[4](58,21) = -25.0/4096.0;
-  prolongation[4](58,22) = 375.0/4096.0;
-  prolongation[4](58,23) = -125.0/4096.0;
-  prolongation[4](58,24) = -125.0/4096.0;
-  prolongation[4](58,25) = 375.0/4096.0;
-  prolongation[4](58,26) = -25.0/4096.0;
-  prolongation[4](58,27) = 75.0/4096.0;
-  prolongation[4](58,28) = -5.0/4096.0;
-  prolongation[4](58,29) = 15.0/4096.0;
-  prolongation[4](58,30) = -25.0/4096.0;
-  prolongation[4](58,31) = 75.0/4096.0;
-  prolongation[4](58,32) = 225.0/4096.0;
-  prolongation[4](58,33) = -75.0/4096.0;
-  prolongation[4](58,34) = -75.0/4096.0;
-  prolongation[4](58,35) = 25.0/4096.0;
-  prolongation[4](58,36) = 1125.0/4096.0;
-  prolongation[4](58,37) = -375.0/4096.0;
-  prolongation[4](58,38) = -375.0/4096.0;
-  prolongation[4](58,39) = 125.0/4096.0;
-  prolongation[4](58,40) = -375.0/4096.0;
-  prolongation[4](58,41) = 125.0/4096.0;
-  prolongation[4](58,42) = 1125.0/4096.0;
-  prolongation[4](58,43) = -375.0/4096.0;
-  prolongation[4](58,44) = -75.0/4096.0;
-  prolongation[4](58,45) = 225.0/4096.0;
-  prolongation[4](58,46) = 25.0/4096.0;
-  prolongation[4](58,47) = -75.0/4096.0;
-  prolongation[4](58,48) = -75.0/4096.0;
-  prolongation[4](58,49) = 25.0/4096.0;
-  prolongation[4](58,50) = 225.0/4096.0;
-  prolongation[4](58,51) = -75.0/4096.0;
-  prolongation[4](58,52) = -375.0/4096.0;
-  prolongation[4](58,53) = 1125.0/4096.0;
-  prolongation[4](58,54) = 125.0/4096.0;
-  prolongation[4](58,55) = -375.0/4096.0;
-  prolongation[4](58,56) = -1125.0/4096.0;
-  prolongation[4](58,57) = 375.0/4096.0;
-  prolongation[4](58,58) = 3375.0/4096.0;
-  prolongation[4](58,59) = -1125.0/4096.0;
-  prolongation[4](58,60) = 375.0/4096.0;
-  prolongation[4](58,61) = -125.0/4096.0;
-  prolongation[4](58,62) = -1125.0/4096.0;
-  prolongation[4](58,63) = 375.0/4096.0;
-  prolongation[4](59,8) = 5.0/256.0;
-  prolongation[4](59,12) = 1.0/256.0;
-  prolongation[4](59,16) = 25.0/256.0;
-  prolongation[4](59,20) = 5.0/256.0;
-  prolongation[4](59,32) = 15.0/256.0;
-  prolongation[4](59,34) = -5.0/256.0;
-  prolongation[4](59,36) = 75.0/256.0;
-  prolongation[4](59,38) = -25.0/256.0;
-  prolongation[4](59,40) = -25.0/256.0;
-  prolongation[4](59,42) = 75.0/256.0;
-  prolongation[4](59,48) = -5.0/256.0;
-  prolongation[4](59,50) = 15.0/256.0;
-  prolongation[4](59,56) = -75.0/256.0;
-  prolongation[4](59,58) = 225.0/256.0;
-  prolongation[4](59,60) = 25.0/256.0;
-  prolongation[4](59,62) = -75.0/256.0;
-  prolongation[4](60,45) = 1.0/16.0;
-  prolongation[4](60,53) = 5.0/16.0;
-  prolongation[4](60,58) = 15.0/16.0;
-  prolongation[4](60,59) = -5.0/16.0;
-  prolongation[4](61,58) = 1.0;
-  prolongation[4](62,10) = 1.0/256.0;
-  prolongation[4](62,14) = 5.0/256.0;
-  prolongation[4](62,18) = 5.0/256.0;
-  prolongation[4](62,22) = 25.0/256.0;
-  prolongation[4](62,32) = 15.0/256.0;
-  prolongation[4](62,33) = -5.0/256.0;
-  prolongation[4](62,36) = 75.0/256.0;
-  prolongation[4](62,37) = -25.0/256.0;
-  prolongation[4](62,44) = -5.0/256.0;
-  prolongation[4](62,45) = 15.0/256.0;
-  prolongation[4](62,52) = -25.0/256.0;
-  prolongation[4](62,53) = 75.0/256.0;
-  prolongation[4](62,56) = -75.0/256.0;
-  prolongation[4](62,57) = 25.0/256.0;
-  prolongation[4](62,58) = 225.0/256.0;
-  prolongation[4](62,59) = -75.0/256.0;
-  prolongation[4](63,32) = 1.0/16.0;
-  prolongation[4](63,36) = 5.0/16.0;
-  prolongation[4](63,56) = -5.0/16.0;
-  prolongation[4](63,58) = 15.0/16.0;
-  prolongation[5](0,0) = 1.0/256.0;
-  prolongation[5](0,1) = 1.0/256.0;
-  prolongation[5](0,4) = 1.0/256.0;
-  prolongation[5](0,5) = 1.0/256.0;
-  prolongation[5](0,8) = -9.0/256.0;
-  prolongation[5](0,9) = -9.0/256.0;
-  prolongation[5](0,16) = -9.0/256.0;
-  prolongation[5](0,17) = -9.0/256.0;
-  prolongation[5](0,24) = -9.0/256.0;
-  prolongation[5](0,25) = -9.0/256.0;
-  prolongation[5](0,26) = -9.0/256.0;
-  prolongation[5](0,27) = -9.0/256.0;
-  prolongation[5](0,40) = 81.0/256.0;
-  prolongation[5](0,41) = 81.0/256.0;
-  prolongation[5](0,42) = 81.0/256.0;
-  prolongation[5](0,43) = 81.0/256.0;
-  prolongation[5](1,1) = -1.0/16.0;
-  prolongation[5](1,5) = -1.0/16.0;
-  prolongation[5](1,26) = 9.0/16.0;
-  prolongation[5](1,27) = 9.0/16.0;
-  prolongation[5](2,1) = 1.0/256.0;
-  prolongation[5](2,2) = 1.0/256.0;
-  prolongation[5](2,5) = 1.0/256.0;
-  prolongation[5](2,6) = 1.0/256.0;
-  prolongation[5](2,10) = -9.0/256.0;
-  prolongation[5](2,11) = -9.0/256.0;
-  prolongation[5](2,18) = -9.0/256.0;
-  prolongation[5](2,19) = -9.0/256.0;
-  prolongation[5](2,26) = -9.0/256.0;
-  prolongation[5](2,27) = -9.0/256.0;
-  prolongation[5](2,28) = -9.0/256.0;
-  prolongation[5](2,29) = -9.0/256.0;
-  prolongation[5](2,44) = 81.0/256.0;
-  prolongation[5](2,45) = 81.0/256.0;
-  prolongation[5](2,46) = 81.0/256.0;
-  prolongation[5](2,47) = 81.0/256.0;
-  prolongation[5](3,0) = -1.0/4096.0;
-  prolongation[5](3,1) = -1.0/4096.0;
-  prolongation[5](3,2) = -1.0/4096.0;
-  prolongation[5](3,3) = -1.0/4096.0;
-  prolongation[5](3,4) = -1.0/4096.0;
-  prolongation[5](3,5) = -1.0/4096.0;
-  prolongation[5](3,6) = -1.0/4096.0;
-  prolongation[5](3,7) = -1.0/4096.0;
-  prolongation[5](3,8) = 9.0/4096.0;
-  prolongation[5](3,9) = 9.0/4096.0;
-  prolongation[5](3,10) = 9.0/4096.0;
-  prolongation[5](3,11) = 9.0/4096.0;
-  prolongation[5](3,12) = 9.0/4096.0;
-  prolongation[5](3,13) = 9.0/4096.0;
-  prolongation[5](3,14) = 9.0/4096.0;
-  prolongation[5](3,15) = 9.0/4096.0;
-  prolongation[5](3,16) = 9.0/4096.0;
-  prolongation[5](3,17) = 9.0/4096.0;
-  prolongation[5](3,18) = 9.0/4096.0;
-  prolongation[5](3,19) = 9.0/4096.0;
-  prolongation[5](3,20) = 9.0/4096.0;
-  prolongation[5](3,21) = 9.0/4096.0;
-  prolongation[5](3,22) = 9.0/4096.0;
-  prolongation[5](3,23) = 9.0/4096.0;
-  prolongation[5](3,24) = 9.0/4096.0;
-  prolongation[5](3,25) = 9.0/4096.0;
-  prolongation[5](3,26) = 9.0/4096.0;
-  prolongation[5](3,27) = 9.0/4096.0;
-  prolongation[5](3,28) = 9.0/4096.0;
-  prolongation[5](3,29) = 9.0/4096.0;
-  prolongation[5](3,30) = 9.0/4096.0;
-  prolongation[5](3,31) = 9.0/4096.0;
-  prolongation[5](3,32) = -81.0/4096.0;
-  prolongation[5](3,33) = -81.0/4096.0;
-  prolongation[5](3,34) = -81.0/4096.0;
-  prolongation[5](3,35) = -81.0/4096.0;
-  prolongation[5](3,36) = -81.0/4096.0;
-  prolongation[5](3,37) = -81.0/4096.0;
-  prolongation[5](3,38) = -81.0/4096.0;
-  prolongation[5](3,39) = -81.0/4096.0;
-  prolongation[5](3,40) = -81.0/4096.0;
-  prolongation[5](3,41) = -81.0/4096.0;
-  prolongation[5](3,42) = -81.0/4096.0;
-  prolongation[5](3,43) = -81.0/4096.0;
-  prolongation[5](3,44) = -81.0/4096.0;
-  prolongation[5](3,45) = -81.0/4096.0;
-  prolongation[5](3,46) = -81.0/4096.0;
-  prolongation[5](3,47) = -81.0/4096.0;
-  prolongation[5](3,48) = -81.0/4096.0;
-  prolongation[5](3,49) = -81.0/4096.0;
-  prolongation[5](3,50) = -81.0/4096.0;
-  prolongation[5](3,51) = -81.0/4096.0;
-  prolongation[5](3,52) = -81.0/4096.0;
-  prolongation[5](3,53) = -81.0/4096.0;
-  prolongation[5](3,54) = -81.0/4096.0;
-  prolongation[5](3,55) = -81.0/4096.0;
-  prolongation[5](3,56) = 729.0/4096.0;
-  prolongation[5](3,57) = 729.0/4096.0;
-  prolongation[5](3,58) = 729.0/4096.0;
-  prolongation[5](3,59) = 729.0/4096.0;
-  prolongation[5](3,60) = 729.0/4096.0;
-  prolongation[5](3,61) = 729.0/4096.0;
-  prolongation[5](3,62) = 729.0/4096.0;
-  prolongation[5](3,63) = 729.0/4096.0;
-  prolongation[5](4,4) = -1.0/16.0;
-  prolongation[5](4,5) = -1.0/16.0;
-  prolongation[5](4,16) = 9.0/16.0;
-  prolongation[5](4,17) = 9.0/16.0;
-  prolongation[5](5,5) = 1.0;
-  prolongation[5](6,5) = -1.0/16.0;
-  prolongation[5](6,6) = -1.0/16.0;
-  prolongation[5](6,18) = 9.0/16.0;
-  prolongation[5](6,19) = 9.0/16.0;
-  prolongation[5](7,4) = 1.0/256.0;
-  prolongation[5](7,5) = 1.0/256.0;
-  prolongation[5](7,6) = 1.0/256.0;
-  prolongation[5](7,7) = 1.0/256.0;
-  prolongation[5](7,16) = -9.0/256.0;
-  prolongation[5](7,17) = -9.0/256.0;
-  prolongation[5](7,18) = -9.0/256.0;
-  prolongation[5](7,19) = -9.0/256.0;
-  prolongation[5](7,20) = -9.0/256.0;
-  prolongation[5](7,21) = -9.0/256.0;
-  prolongation[5](7,22) = -9.0/256.0;
-  prolongation[5](7,23) = -9.0/256.0;
-  prolongation[5](7,36) = 81.0/256.0;
-  prolongation[5](7,37) = 81.0/256.0;
-  prolongation[5](7,38) = 81.0/256.0;
-  prolongation[5](7,39) = 81.0/256.0;
-  prolongation[5](8,9) = -1.0/16.0;
-  prolongation[5](8,17) = -1.0/16.0;
-  prolongation[5](8,41) = 9.0/16.0;
-  prolongation[5](8,43) = 9.0/16.0;
-  prolongation[5](9,0) = -1.0/256.0;
-  prolongation[5](9,1) = -5.0/256.0;
-  prolongation[5](9,4) = -1.0/256.0;
-  prolongation[5](9,5) = -5.0/256.0;
-  prolongation[5](9,8) = 5.0/256.0;
-  prolongation[5](9,9) = -15.0/256.0;
-  prolongation[5](9,16) = 5.0/256.0;
-  prolongation[5](9,17) = -15.0/256.0;
-  prolongation[5](9,24) = 9.0/256.0;
-  prolongation[5](9,25) = 9.0/256.0;
-  prolongation[5](9,26) = 45.0/256.0;
-  prolongation[5](9,27) = 45.0/256.0;
-  prolongation[5](9,40) = -45.0/256.0;
-  prolongation[5](9,41) = 135.0/256.0;
-  prolongation[5](9,42) = -45.0/256.0;
-  prolongation[5](9,43) = 135.0/256.0;
-  prolongation[5](10,1) = -5.0/256.0;
-  prolongation[5](10,2) = -1.0/256.0;
-  prolongation[5](10,5) = -5.0/256.0;
-  prolongation[5](10,6) = -1.0/256.0;
-  prolongation[5](10,10) = -15.0/256.0;
-  prolongation[5](10,11) = 5.0/256.0;
-  prolongation[5](10,18) = -15.0/256.0;
-  prolongation[5](10,19) = 5.0/256.0;
-  prolongation[5](10,26) = 45.0/256.0;
-  prolongation[5](10,27) = 45.0/256.0;
-  prolongation[5](10,28) = 9.0/256.0;
-  prolongation[5](10,29) = 9.0/256.0;
-  prolongation[5](10,44) = 135.0/256.0;
-  prolongation[5](10,45) = 135.0/256.0;
-  prolongation[5](10,46) = -45.0/256.0;
-  prolongation[5](10,47) = -45.0/256.0;
-  prolongation[5](11,10) = -1.0/16.0;
-  prolongation[5](11,18) = -1.0/16.0;
-  prolongation[5](11,44) = 9.0/16.0;
-  prolongation[5](11,45) = 9.0/16.0;
-  prolongation[5](12,9) = 1.0/256.0;
-  prolongation[5](12,13) = 1.0/256.0;
-  prolongation[5](12,17) = 1.0/256.0;
-  prolongation[5](12,21) = 1.0/256.0;
-  prolongation[5](12,33) = -9.0/256.0;
-  prolongation[5](12,35) = -9.0/256.0;
-  prolongation[5](12,37) = -9.0/256.0;
-  prolongation[5](12,39) = -9.0/256.0;
-  prolongation[5](12,41) = -9.0/256.0;
-  prolongation[5](12,43) = -9.0/256.0;
-  prolongation[5](12,49) = -9.0/256.0;
-  prolongation[5](12,51) = -9.0/256.0;
-  prolongation[5](12,57) = 81.0/256.0;
-  prolongation[5](12,59) = 81.0/256.0;
-  prolongation[5](12,61) = 81.0/256.0;
-  prolongation[5](12,63) = 81.0/256.0;
-  prolongation[5](13,0) = 1.0/4096.0;
-  prolongation[5](13,1) = 5.0/4096.0;
-  prolongation[5](13,2) = 5.0/4096.0;
-  prolongation[5](13,3) = 1.0/4096.0;
-  prolongation[5](13,4) = 1.0/4096.0;
-  prolongation[5](13,5) = 5.0/4096.0;
-  prolongation[5](13,6) = 5.0/4096.0;
-  prolongation[5](13,7) = 1.0/4096.0;
-  prolongation[5](13,8) = -5.0/4096.0;
-  prolongation[5](13,9) = 15.0/4096.0;
-  prolongation[5](13,10) = -45.0/4096.0;
-  prolongation[5](13,11) = -45.0/4096.0;
-  prolongation[5](13,12) = -5.0/4096.0;
-  prolongation[5](13,13) = 15.0/4096.0;
-  prolongation[5](13,14) = -9.0/4096.0;
-  prolongation[5](13,15) = -9.0/4096.0;
-  prolongation[5](13,16) = -5.0/4096.0;
-  prolongation[5](13,17) = 15.0/4096.0;
-  prolongation[5](13,18) = -45.0/4096.0;
-  prolongation[5](13,19) = -45.0/4096.0;
-  prolongation[5](13,20) = -5.0/4096.0;
-  prolongation[5](13,21) = 15.0/4096.0;
-  prolongation[5](13,22) = -9.0/4096.0;
-  prolongation[5](13,23) = -9.0/4096.0;
-  prolongation[5](13,24) = -9.0/4096.0;
-  prolongation[5](13,25) = -9.0/4096.0;
-  prolongation[5](13,26) = -45.0/4096.0;
-  prolongation[5](13,27) = -45.0/4096.0;
-  prolongation[5](13,28) = -45.0/4096.0;
-  prolongation[5](13,29) = -45.0/4096.0;
-  prolongation[5](13,30) = -9.0/4096.0;
-  prolongation[5](13,31) = -9.0/4096.0;
-  prolongation[5](13,32) = 45.0/4096.0;
-  prolongation[5](13,33) = -135.0/4096.0;
-  prolongation[5](13,34) = 45.0/4096.0;
-  prolongation[5](13,35) = -135.0/4096.0;
-  prolongation[5](13,36) = 45.0/4096.0;
-  prolongation[5](13,37) = -135.0/4096.0;
-  prolongation[5](13,38) = 45.0/4096.0;
-  prolongation[5](13,39) = -135.0/4096.0;
-  prolongation[5](13,40) = 45.0/4096.0;
-  prolongation[5](13,41) = -135.0/4096.0;
-  prolongation[5](13,42) = 45.0/4096.0;
-  prolongation[5](13,43) = -135.0/4096.0;
-  prolongation[5](13,44) = 405.0/4096.0;
-  prolongation[5](13,45) = 405.0/4096.0;
-  prolongation[5](13,46) = 405.0/4096.0;
-  prolongation[5](13,47) = 405.0/4096.0;
-  prolongation[5](13,48) = 45.0/4096.0;
-  prolongation[5](13,49) = -135.0/4096.0;
-  prolongation[5](13,50) = 45.0/4096.0;
-  prolongation[5](13,51) = -135.0/4096.0;
-  prolongation[5](13,52) = 81.0/4096.0;
-  prolongation[5](13,53) = 81.0/4096.0;
-  prolongation[5](13,54) = 81.0/4096.0;
-  prolongation[5](13,55) = 81.0/4096.0;
-  prolongation[5](13,56) = -405.0/4096.0;
-  prolongation[5](13,57) = 1215.0/4096.0;
-  prolongation[5](13,58) = -405.0/4096.0;
-  prolongation[5](13,59) = 1215.0/4096.0;
-  prolongation[5](13,60) = -405.0/4096.0;
-  prolongation[5](13,61) = 1215.0/4096.0;
-  prolongation[5](13,62) = -405.0/4096.0;
-  prolongation[5](13,63) = 1215.0/4096.0;
-  prolongation[5](14,0) = 5.0/4096.0;
-  prolongation[5](14,1) = 5.0/4096.0;
-  prolongation[5](14,2) = 1.0/4096.0;
-  prolongation[5](14,3) = 1.0/4096.0;
-  prolongation[5](14,4) = 5.0/4096.0;
-  prolongation[5](14,5) = 5.0/4096.0;
-  prolongation[5](14,6) = 1.0/4096.0;
-  prolongation[5](14,7) = 1.0/4096.0;
-  prolongation[5](14,8) = -45.0/4096.0;
-  prolongation[5](14,9) = -45.0/4096.0;
-  prolongation[5](14,10) = 15.0/4096.0;
-  prolongation[5](14,11) = -5.0/4096.0;
-  prolongation[5](14,12) = -9.0/4096.0;
-  prolongation[5](14,13) = -9.0/4096.0;
-  prolongation[5](14,14) = 15.0/4096.0;
-  prolongation[5](14,15) = -5.0/4096.0;
-  prolongation[5](14,16) = -45.0/4096.0;
-  prolongation[5](14,17) = -45.0/4096.0;
-  prolongation[5](14,18) = 15.0/4096.0;
-  prolongation[5](14,19) = -5.0/4096.0;
-  prolongation[5](14,20) = -9.0/4096.0;
-  prolongation[5](14,21) = -9.0/4096.0;
-  prolongation[5](14,22) = 15.0/4096.0;
-  prolongation[5](14,23) = -5.0/4096.0;
-  prolongation[5](14,24) = -45.0/4096.0;
-  prolongation[5](14,25) = -45.0/4096.0;
-  prolongation[5](14,26) = -45.0/4096.0;
-  prolongation[5](14,27) = -45.0/4096.0;
-  prolongation[5](14,28) = -9.0/4096.0;
-  prolongation[5](14,29) = -9.0/4096.0;
-  prolongation[5](14,30) = -9.0/4096.0;
-  prolongation[5](14,31) = -9.0/4096.0;
-  prolongation[5](14,32) = -135.0/4096.0;
-  prolongation[5](14,33) = -135.0/4096.0;
-  prolongation[5](14,34) = 45.0/4096.0;
-  prolongation[5](14,35) = 45.0/4096.0;
-  prolongation[5](14,36) = -135.0/4096.0;
-  prolongation[5](14,37) = -135.0/4096.0;
-  prolongation[5](14,38) = 45.0/4096.0;
-  prolongation[5](14,39) = 45.0/4096.0;
-  prolongation[5](14,40) = 405.0/4096.0;
-  prolongation[5](14,41) = 405.0/4096.0;
-  prolongation[5](14,42) = 405.0/4096.0;
-  prolongation[5](14,43) = 405.0/4096.0;
-  prolongation[5](14,44) = -135.0/4096.0;
-  prolongation[5](14,45) = -135.0/4096.0;
-  prolongation[5](14,46) = 45.0/4096.0;
-  prolongation[5](14,47) = 45.0/4096.0;
-  prolongation[5](14,48) = 81.0/4096.0;
-  prolongation[5](14,49) = 81.0/4096.0;
-  prolongation[5](14,50) = 81.0/4096.0;
-  prolongation[5](14,51) = 81.0/4096.0;
-  prolongation[5](14,52) = -135.0/4096.0;
-  prolongation[5](14,53) = -135.0/4096.0;
-  prolongation[5](14,54) = 45.0/4096.0;
-  prolongation[5](14,55) = 45.0/4096.0;
-  prolongation[5](14,56) = 1215.0/4096.0;
-  prolongation[5](14,57) = 1215.0/4096.0;
-  prolongation[5](14,58) = 1215.0/4096.0;
-  prolongation[5](14,59) = 1215.0/4096.0;
-  prolongation[5](14,60) = -405.0/4096.0;
-  prolongation[5](14,61) = -405.0/4096.0;
-  prolongation[5](14,62) = -405.0/4096.0;
-  prolongation[5](14,63) = -405.0/4096.0;
-  prolongation[5](15,10) = 1.0/256.0;
-  prolongation[5](15,14) = 1.0/256.0;
-  prolongation[5](15,18) = 1.0/256.0;
-  prolongation[5](15,22) = 1.0/256.0;
-  prolongation[5](15,32) = -9.0/256.0;
-  prolongation[5](15,33) = -9.0/256.0;
-  prolongation[5](15,36) = -9.0/256.0;
-  prolongation[5](15,37) = -9.0/256.0;
-  prolongation[5](15,44) = -9.0/256.0;
-  prolongation[5](15,45) = -9.0/256.0;
-  prolongation[5](15,52) = -9.0/256.0;
-  prolongation[5](15,53) = -9.0/256.0;
-  prolongation[5](15,56) = 81.0/256.0;
-  prolongation[5](15,57) = 81.0/256.0;
-  prolongation[5](15,58) = 81.0/256.0;
-  prolongation[5](15,59) = 81.0/256.0;
-  prolongation[5](16,17) = 1.0;
-  prolongation[5](17,4) = 1.0/16.0;
-  prolongation[5](17,5) = 5.0/16.0;
-  prolongation[5](17,16) = -5.0/16.0;
-  prolongation[5](17,17) = 15.0/16.0;
-  prolongation[5](18,5) = 5.0/16.0;
-  prolongation[5](18,6) = 1.0/16.0;
-  prolongation[5](18,18) = 15.0/16.0;
-  prolongation[5](18,19) = -5.0/16.0;
-  prolongation[5](19,18) = 1.0;
-  prolongation[5](20,17) = -1.0/16.0;
-  prolongation[5](20,21) = -1.0/16.0;
-  prolongation[5](20,37) = 9.0/16.0;
-  prolongation[5](20,39) = 9.0/16.0;
-  prolongation[5](21,4) = -1.0/256.0;
-  prolongation[5](21,5) = -5.0/256.0;
-  prolongation[5](21,6) = -5.0/256.0;
-  prolongation[5](21,7) = -1.0/256.0;
-  prolongation[5](21,16) = 5.0/256.0;
-  prolongation[5](21,17) = -15.0/256.0;
-  prolongation[5](21,18) = 45.0/256.0;
-  prolongation[5](21,19) = 45.0/256.0;
-  prolongation[5](21,20) = 5.0/256.0;
-  prolongation[5](21,21) = -15.0/256.0;
-  prolongation[5](21,22) = 9.0/256.0;
-  prolongation[5](21,23) = 9.0/256.0;
-  prolongation[5](21,36) = -45.0/256.0;
-  prolongation[5](21,37) = 135.0/256.0;
-  prolongation[5](21,38) = -45.0/256.0;
-  prolongation[5](21,39) = 135.0/256.0;
-  prolongation[5](22,4) = -5.0/256.0;
-  prolongation[5](22,5) = -5.0/256.0;
-  prolongation[5](22,6) = -1.0/256.0;
-  prolongation[5](22,7) = -1.0/256.0;
-  prolongation[5](22,16) = 45.0/256.0;
-  prolongation[5](22,17) = 45.0/256.0;
-  prolongation[5](22,18) = -15.0/256.0;
-  prolongation[5](22,19) = 5.0/256.0;
-  prolongation[5](22,20) = 9.0/256.0;
-  prolongation[5](22,21) = 9.0/256.0;
-  prolongation[5](22,22) = -15.0/256.0;
-  prolongation[5](22,23) = 5.0/256.0;
-  prolongation[5](22,36) = 135.0/256.0;
-  prolongation[5](22,37) = 135.0/256.0;
-  prolongation[5](22,38) = -45.0/256.0;
-  prolongation[5](22,39) = -45.0/256.0;
-  prolongation[5](23,18) = -1.0/16.0;
-  prolongation[5](23,22) = -1.0/16.0;
-  prolongation[5](23,36) = 9.0/16.0;
-  prolongation[5](23,37) = 9.0/16.0;
-  prolongation[5](24,25) = -1.0/16.0;
-  prolongation[5](24,27) = -1.0/16.0;
-  prolongation[5](24,42) = 9.0/16.0;
-  prolongation[5](24,43) = 9.0/16.0;
-  prolongation[5](25,0) = -1.0/256.0;
-  prolongation[5](25,1) = -1.0/256.0;
-  prolongation[5](25,4) = -5.0/256.0;
-  prolongation[5](25,5) = -5.0/256.0;
-  prolongation[5](25,8) = 9.0/256.0;
-  prolongation[5](25,9) = 9.0/256.0;
-  prolongation[5](25,16) = 45.0/256.0;
-  prolongation[5](25,17) = 45.0/256.0;
-  prolongation[5](25,24) = 5.0/256.0;
-  prolongation[5](25,25) = -15.0/256.0;
-  prolongation[5](25,26) = 5.0/256.0;
-  prolongation[5](25,27) = -15.0/256.0;
-  prolongation[5](25,40) = -45.0/256.0;
-  prolongation[5](25,41) = -45.0/256.0;
-  prolongation[5](25,42) = 135.0/256.0;
-  prolongation[5](25,43) = 135.0/256.0;
-  prolongation[5](26,27) = 1.0;
-  prolongation[5](27,1) = 1.0/16.0;
-  prolongation[5](27,5) = 5.0/16.0;
-  prolongation[5](27,26) = -5.0/16.0;
-  prolongation[5](27,27) = 15.0/16.0;
-  prolongation[5](28,27) = -1.0/16.0;
-  prolongation[5](28,29) = -1.0/16.0;
-  prolongation[5](28,45) = 9.0/16.0;
-  prolongation[5](28,47) = 9.0/16.0;
-  prolongation[5](29,1) = -1.0/256.0;
-  prolongation[5](29,2) = -1.0/256.0;
-  prolongation[5](29,5) = -5.0/256.0;
-  prolongation[5](29,6) = -5.0/256.0;
-  prolongation[5](29,10) = 9.0/256.0;
-  prolongation[5](29,11) = 9.0/256.0;
-  prolongation[5](29,18) = 45.0/256.0;
-  prolongation[5](29,19) = 45.0/256.0;
-  prolongation[5](29,26) = 5.0/256.0;
-  prolongation[5](29,27) = -15.0/256.0;
-  prolongation[5](29,28) = 5.0/256.0;
-  prolongation[5](29,29) = -15.0/256.0;
-  prolongation[5](29,44) = -45.0/256.0;
-  prolongation[5](29,45) = 135.0/256.0;
-  prolongation[5](29,46) = -45.0/256.0;
-  prolongation[5](29,47) = 135.0/256.0;
-  prolongation[5](30,25) = 1.0/256.0;
-  prolongation[5](30,27) = 1.0/256.0;
-  prolongation[5](30,29) = 1.0/256.0;
-  prolongation[5](30,31) = 1.0/256.0;
-  prolongation[5](30,42) = -9.0/256.0;
-  prolongation[5](30,43) = -9.0/256.0;
-  prolongation[5](30,45) = -9.0/256.0;
-  prolongation[5](30,47) = -9.0/256.0;
-  prolongation[5](30,50) = -9.0/256.0;
-  prolongation[5](30,51) = -9.0/256.0;
-  prolongation[5](30,53) = -9.0/256.0;
-  prolongation[5](30,55) = -9.0/256.0;
-  prolongation[5](30,58) = 81.0/256.0;
-  prolongation[5](30,59) = 81.0/256.0;
-  prolongation[5](30,62) = 81.0/256.0;
-  prolongation[5](30,63) = 81.0/256.0;
-  prolongation[5](31,0) = 1.0/4096.0;
-  prolongation[5](31,1) = 1.0/4096.0;
-  prolongation[5](31,2) = 1.0/4096.0;
-  prolongation[5](31,3) = 1.0/4096.0;
-  prolongation[5](31,4) = 5.0/4096.0;
-  prolongation[5](31,5) = 5.0/4096.0;
-  prolongation[5](31,6) = 5.0/4096.0;
-  prolongation[5](31,7) = 5.0/4096.0;
-  prolongation[5](31,8) = -9.0/4096.0;
-  prolongation[5](31,9) = -9.0/4096.0;
-  prolongation[5](31,10) = -9.0/4096.0;
-  prolongation[5](31,11) = -9.0/4096.0;
-  prolongation[5](31,12) = -9.0/4096.0;
-  prolongation[5](31,13) = -9.0/4096.0;
-  prolongation[5](31,14) = -9.0/4096.0;
-  prolongation[5](31,15) = -9.0/4096.0;
-  prolongation[5](31,16) = -45.0/4096.0;
-  prolongation[5](31,17) = -45.0/4096.0;
-  prolongation[5](31,18) = -45.0/4096.0;
-  prolongation[5](31,19) = -45.0/4096.0;
-  prolongation[5](31,20) = -45.0/4096.0;
-  prolongation[5](31,21) = -45.0/4096.0;
-  prolongation[5](31,22) = -45.0/4096.0;
-  prolongation[5](31,23) = -45.0/4096.0;
-  prolongation[5](31,24) = -5.0/4096.0;
-  prolongation[5](31,25) = 15.0/4096.0;
-  prolongation[5](31,26) = -5.0/4096.0;
-  prolongation[5](31,27) = 15.0/4096.0;
-  prolongation[5](31,28) = -5.0/4096.0;
-  prolongation[5](31,29) = 15.0/4096.0;
-  prolongation[5](31,30) = -5.0/4096.0;
-  prolongation[5](31,31) = 15.0/4096.0;
-  prolongation[5](31,32) = 81.0/4096.0;
-  prolongation[5](31,33) = 81.0/4096.0;
-  prolongation[5](31,34) = 81.0/4096.0;
-  prolongation[5](31,35) = 81.0/4096.0;
-  prolongation[5](31,36) = 405.0/4096.0;
-  prolongation[5](31,37) = 405.0/4096.0;
-  prolongation[5](31,38) = 405.0/4096.0;
-  prolongation[5](31,39) = 405.0/4096.0;
-  prolongation[5](31,40) = 45.0/4096.0;
-  prolongation[5](31,41) = 45.0/4096.0;
-  prolongation[5](31,42) = -135.0/4096.0;
-  prolongation[5](31,43) = -135.0/4096.0;
-  prolongation[5](31,44) = 45.0/4096.0;
-  prolongation[5](31,45) = -135.0/4096.0;
-  prolongation[5](31,46) = 45.0/4096.0;
-  prolongation[5](31,47) = -135.0/4096.0;
-  prolongation[5](31,48) = 45.0/4096.0;
-  prolongation[5](31,49) = 45.0/4096.0;
-  prolongation[5](31,50) = -135.0/4096.0;
-  prolongation[5](31,51) = -135.0/4096.0;
-  prolongation[5](31,52) = 45.0/4096.0;
-  prolongation[5](31,53) = -135.0/4096.0;
-  prolongation[5](31,54) = 45.0/4096.0;
-  prolongation[5](31,55) = -135.0/4096.0;
-  prolongation[5](31,56) = -405.0/4096.0;
-  prolongation[5](31,57) = -405.0/4096.0;
-  prolongation[5](31,58) = 1215.0/4096.0;
-  prolongation[5](31,59) = 1215.0/4096.0;
-  prolongation[5](31,60) = -405.0/4096.0;
-  prolongation[5](31,61) = -405.0/4096.0;
-  prolongation[5](31,62) = 1215.0/4096.0;
-  prolongation[5](31,63) = 1215.0/4096.0;
-  prolongation[5](32,9) = -5.0/256.0;
-  prolongation[5](32,13) = -1.0/256.0;
-  prolongation[5](32,17) = -5.0/256.0;
-  prolongation[5](32,21) = -1.0/256.0;
-  prolongation[5](32,33) = -15.0/256.0;
-  prolongation[5](32,35) = 5.0/256.0;
-  prolongation[5](32,37) = -15.0/256.0;
-  prolongation[5](32,39) = 5.0/256.0;
-  prolongation[5](32,41) = 45.0/256.0;
-  prolongation[5](32,43) = 45.0/256.0;
-  prolongation[5](32,49) = 9.0/256.0;
-  prolongation[5](32,51) = 9.0/256.0;
-  prolongation[5](32,57) = 135.0/256.0;
-  prolongation[5](32,59) = 135.0/256.0;
-  prolongation[5](32,61) = -45.0/256.0;
-  prolongation[5](32,63) = -45.0/256.0;
-  prolongation[5](33,0) = -5.0/4096.0;
-  prolongation[5](33,1) = -25.0/4096.0;
-  prolongation[5](33,2) = -5.0/4096.0;
-  prolongation[5](33,3) = -1.0/4096.0;
-  prolongation[5](33,4) = -5.0/4096.0;
-  prolongation[5](33,5) = -25.0/4096.0;
-  prolongation[5](33,6) = -5.0/4096.0;
-  prolongation[5](33,7) = -1.0/4096.0;
-  prolongation[5](33,8) = 25.0/4096.0;
-  prolongation[5](33,9) = -75.0/4096.0;
-  prolongation[5](33,10) = -75.0/4096.0;
-  prolongation[5](33,11) = 25.0/4096.0;
-  prolongation[5](33,12) = 5.0/4096.0;
-  prolongation[5](33,13) = -15.0/4096.0;
-  prolongation[5](33,14) = -15.0/4096.0;
-  prolongation[5](33,15) = 5.0/4096.0;
-  prolongation[5](33,16) = 25.0/4096.0;
-  prolongation[5](33,17) = -75.0/4096.0;
-  prolongation[5](33,18) = -75.0/4096.0;
-  prolongation[5](33,19) = 25.0/4096.0;
-  prolongation[5](33,20) = 5.0/4096.0;
-  prolongation[5](33,21) = -15.0/4096.0;
-  prolongation[5](33,22) = -15.0/4096.0;
-  prolongation[5](33,23) = 5.0/4096.0;
-  prolongation[5](33,24) = 45.0/4096.0;
-  prolongation[5](33,25) = 45.0/4096.0;
-  prolongation[5](33,26) = 225.0/4096.0;
-  prolongation[5](33,27) = 225.0/4096.0;
-  prolongation[5](33,28) = 45.0/4096.0;
-  prolongation[5](33,29) = 45.0/4096.0;
-  prolongation[5](33,30) = 9.0/4096.0;
-  prolongation[5](33,31) = 9.0/4096.0;
-  prolongation[5](33,32) = 75.0/4096.0;
-  prolongation[5](33,33) = -225.0/4096.0;
-  prolongation[5](33,34) = -25.0/4096.0;
-  prolongation[5](33,35) = 75.0/4096.0;
-  prolongation[5](33,36) = 75.0/4096.0;
-  prolongation[5](33,37) = -225.0/4096.0;
-  prolongation[5](33,38) = -25.0/4096.0;
-  prolongation[5](33,39) = 75.0/4096.0;
-  prolongation[5](33,40) = -225.0/4096.0;
-  prolongation[5](33,41) = 675.0/4096.0;
-  prolongation[5](33,42) = -225.0/4096.0;
-  prolongation[5](33,43) = 675.0/4096.0;
-  prolongation[5](33,44) = 675.0/4096.0;
-  prolongation[5](33,45) = 675.0/4096.0;
-  prolongation[5](33,46) = -225.0/4096.0;
-  prolongation[5](33,47) = -225.0/4096.0;
-  prolongation[5](33,48) = -45.0/4096.0;
-  prolongation[5](33,49) = 135.0/4096.0;
-  prolongation[5](33,50) = -45.0/4096.0;
-  prolongation[5](33,51) = 135.0/4096.0;
-  prolongation[5](33,52) = 135.0/4096.0;
-  prolongation[5](33,53) = 135.0/4096.0;
-  prolongation[5](33,54) = -45.0/4096.0;
-  prolongation[5](33,55) = -45.0/4096.0;
-  prolongation[5](33,56) = -675.0/4096.0;
-  prolongation[5](33,57) = 2025.0/4096.0;
-  prolongation[5](33,58) = -675.0/4096.0;
-      prolongation[5](33,59) = 2025.0/4096.0;
-      prolongation[5](33,60) = 225.0/4096.0;
-      prolongation[5](33,61) = -675.0/4096.0;
-      prolongation[5](33,62) = 225.0/4096.0;
-      prolongation[5](33,63) = -675.0/4096.0;
-      prolongation[5](34,33) = -1.0/16.0;
-      prolongation[5](34,37) = -1.0/16.0;
-      prolongation[5](34,57) = 9.0/16.0;
-      prolongation[5](34,59) = 9.0/16.0;
-      prolongation[5](35,10) = -5.0/256.0;
-      prolongation[5](35,14) = -1.0/256.0;
-      prolongation[5](35,18) = -5.0/256.0;
-      prolongation[5](35,22) = -1.0/256.0;
-      prolongation[5](35,32) = 5.0/256.0;
-      prolongation[5](35,33) = -15.0/256.0;
-      prolongation[5](35,36) = 5.0/256.0;
-      prolongation[5](35,37) = -15.0/256.0;
-      prolongation[5](35,44) = 45.0/256.0;
-      prolongation[5](35,45) = 45.0/256.0;
-      prolongation[5](35,52) = 9.0/256.0;
-      prolongation[5](35,53) = 9.0/256.0;
-      prolongation[5](35,56) = -45.0/256.0;
-      prolongation[5](35,57) = 135.0/256.0;
-      prolongation[5](35,58) = -45.0/256.0;
-      prolongation[5](35,59) = 135.0/256.0;
-      prolongation[5](36,17) = 5.0/16.0;
-      prolongation[5](36,21) = 1.0/16.0;
-      prolongation[5](36,37) = 15.0/16.0;
-      prolongation[5](36,39) = -5.0/16.0;
-      prolongation[5](37,4) = 5.0/256.0;
-      prolongation[5](37,5) = 25.0/256.0;
-      prolongation[5](37,6) = 5.0/256.0;
-      prolongation[5](37,7) = 1.0/256.0;
-      prolongation[5](37,16) = -25.0/256.0;
-      prolongation[5](37,17) = 75.0/256.0;
-      prolongation[5](37,18) = 75.0/256.0;
-      prolongation[5](37,19) = -25.0/256.0;
-      prolongation[5](37,20) = -5.0/256.0;
-      prolongation[5](37,21) = 15.0/256.0;
-      prolongation[5](37,22) = 15.0/256.0;
-      prolongation[5](37,23) = -5.0/256.0;
-      prolongation[5](37,36) = -75.0/256.0;
-      prolongation[5](37,37) = 225.0/256.0;
-      prolongation[5](37,38) = 25.0/256.0;
-      prolongation[5](37,39) = -75.0/256.0;
-      prolongation[5](38,37) = 1.0;
-      prolongation[5](39,18) = 5.0/16.0;
-      prolongation[5](39,22) = 1.0/16.0;
-      prolongation[5](39,36) = -5.0/16.0;
-      prolongation[5](39,37) = 15.0/16.0;
-      prolongation[5](40,43) = 1.0;
-      prolongation[5](41,25) = 1.0/16.0;
-      prolongation[5](41,27) = 5.0/16.0;
-      prolongation[5](41,42) = -5.0/16.0;
-      prolongation[5](41,43) = 15.0/16.0;
-      prolongation[5](42,9) = 1.0/16.0;
-      prolongation[5](42,17) = 5.0/16.0;
-      prolongation[5](42,41) = -5.0/16.0;
-      prolongation[5](42,43) = 15.0/16.0;
-      prolongation[5](43,0) = 1.0/256.0;
-      prolongation[5](43,1) = 5.0/256.0;
-      prolongation[5](43,4) = 5.0/256.0;
-      prolongation[5](43,5) = 25.0/256.0;
-      prolongation[5](43,8) = -5.0/256.0;
-      prolongation[5](43,9) = 15.0/256.0;
-      prolongation[5](43,16) = -25.0/256.0;
-      prolongation[5](43,17) = 75.0/256.0;
-      prolongation[5](43,24) = -5.0/256.0;
-      prolongation[5](43,25) = 15.0/256.0;
-      prolongation[5](43,26) = -25.0/256.0;
-      prolongation[5](43,27) = 75.0/256.0;
-      prolongation[5](43,40) = 25.0/256.0;
-      prolongation[5](43,41) = -75.0/256.0;
-      prolongation[5](43,42) = -75.0/256.0;
-      prolongation[5](43,43) = 225.0/256.0;
-      prolongation[5](44,27) = 5.0/16.0;
-      prolongation[5](44,29) = 1.0/16.0;
-      prolongation[5](44,45) = 15.0/16.0;
-      prolongation[5](44,47) = -5.0/16.0;
-      prolongation[5](45,1) = 5.0/256.0;
-      prolongation[5](45,2) = 1.0/256.0;
-      prolongation[5](45,5) = 25.0/256.0;
-      prolongation[5](45,6) = 5.0/256.0;
-      prolongation[5](45,10) = 15.0/256.0;
-      prolongation[5](45,11) = -5.0/256.0;
-      prolongation[5](45,18) = 75.0/256.0;
-      prolongation[5](45,19) = -25.0/256.0;
-      prolongation[5](45,26) = -25.0/256.0;
-      prolongation[5](45,27) = 75.0/256.0;
-      prolongation[5](45,28) = -5.0/256.0;
-      prolongation[5](45,29) = 15.0/256.0;
-      prolongation[5](45,44) = -75.0/256.0;
-      prolongation[5](45,45) = 225.0/256.0;
-      prolongation[5](45,46) = 25.0/256.0;
-      prolongation[5](45,47) = -75.0/256.0;
-      prolongation[5](46,45) = 1.0;
-      prolongation[5](47,10) = 1.0/16.0;
-      prolongation[5](47,18) = 5.0/16.0;
-      prolongation[5](47,44) = -5.0/16.0;
-      prolongation[5](47,45) = 15.0/16.0;
-      prolongation[5](48,43) = -1.0/16.0;
-      prolongation[5](48,51) = -1.0/16.0;
-      prolongation[5](48,59) = 9.0/16.0;
-      prolongation[5](48,63) = 9.0/16.0;
-      prolongation[5](49,25) = -1.0/256.0;
-      prolongation[5](49,27) = -5.0/256.0;
-      prolongation[5](49,29) = -5.0/256.0;
-      prolongation[5](49,31) = -1.0/256.0;
-      prolongation[5](49,42) = 5.0/256.0;
-      prolongation[5](49,43) = -15.0/256.0;
-      prolongation[5](49,45) = 45.0/256.0;
-      prolongation[5](49,47) = 45.0/256.0;
-      prolongation[5](49,50) = 5.0/256.0;
-      prolongation[5](49,51) = -15.0/256.0;
-      prolongation[5](49,53) = 9.0/256.0;
-      prolongation[5](49,55) = 9.0/256.0;
-      prolongation[5](49,58) = -45.0/256.0;
-      prolongation[5](49,59) = 135.0/256.0;
-      prolongation[5](49,62) = -45.0/256.0;
-      prolongation[5](49,63) = 135.0/256.0;
-      prolongation[5](50,9) = -1.0/256.0;
-      prolongation[5](50,13) = -1.0/256.0;
-      prolongation[5](50,17) = -5.0/256.0;
-      prolongation[5](50,21) = -5.0/256.0;
-      prolongation[5](50,33) = 9.0/256.0;
-      prolongation[5](50,35) = 9.0/256.0;
-      prolongation[5](50,37) = 45.0/256.0;
-      prolongation[5](50,39) = 45.0/256.0;
-      prolongation[5](50,41) = 5.0/256.0;
-      prolongation[5](50,43) = -15.0/256.0;
-      prolongation[5](50,49) = 5.0/256.0;
-      prolongation[5](50,51) = -15.0/256.0;
-      prolongation[5](50,57) = -45.0/256.0;
-      prolongation[5](50,59) = 135.0/256.0;
-      prolongation[5](50,61) = -45.0/256.0;
-      prolongation[5](50,63) = 135.0/256.0;
-      prolongation[5](51,0) = -1.0/4096.0;
-      prolongation[5](51,1) = -5.0/4096.0;
-      prolongation[5](51,2) = -5.0/4096.0;
-      prolongation[5](51,3) = -1.0/4096.0;
-      prolongation[5](51,4) = -5.0/4096.0;
-      prolongation[5](51,5) = -25.0/4096.0;
-      prolongation[5](51,6) = -25.0/4096.0;
-      prolongation[5](51,7) = -5.0/4096.0;
-      prolongation[5](51,8) = 5.0/4096.0;
-      prolongation[5](51,9) = -15.0/4096.0;
-      prolongation[5](51,10) = 45.0/4096.0;
-      prolongation[5](51,11) = 45.0/4096.0;
-      prolongation[5](51,12) = 5.0/4096.0;
-      prolongation[5](51,13) = -15.0/4096.0;
-      prolongation[5](51,14) = 9.0/4096.0;
-      prolongation[5](51,15) = 9.0/4096.0;
-      prolongation[5](51,16) = 25.0/4096.0;
-      prolongation[5](51,17) = -75.0/4096.0;
-      prolongation[5](51,18) = 225.0/4096.0;
-      prolongation[5](51,19) = 225.0/4096.0;
-      prolongation[5](51,20) = 25.0/4096.0;
-      prolongation[5](51,21) = -75.0/4096.0;
-      prolongation[5](51,22) = 45.0/4096.0;
-      prolongation[5](51,23) = 45.0/4096.0;
-      prolongation[5](51,24) = 5.0/4096.0;
-      prolongation[5](51,25) = -15.0/4096.0;
-      prolongation[5](51,26) = 25.0/4096.0;
-      prolongation[5](51,27) = -75.0/4096.0;
-      prolongation[5](51,28) = 25.0/4096.0;
-      prolongation[5](51,29) = -75.0/4096.0;
-      prolongation[5](51,30) = 5.0/4096.0;
-      prolongation[5](51,31) = -15.0/4096.0;
-      prolongation[5](51,32) = -45.0/4096.0;
-      prolongation[5](51,33) = 135.0/4096.0;
-      prolongation[5](51,34) = -45.0/4096.0;
-      prolongation[5](51,35) = 135.0/4096.0;
-      prolongation[5](51,36) = -225.0/4096.0;
-      prolongation[5](51,37) = 675.0/4096.0;
-      prolongation[5](51,38) = -225.0/4096.0;
-      prolongation[5](51,39) = 675.0/4096.0;
-      prolongation[5](51,40) = -25.0/4096.0;
-      prolongation[5](51,41) = 75.0/4096.0;
-      prolongation[5](51,42) = 75.0/4096.0;
-      prolongation[5](51,43) = -225.0/4096.0;
-      prolongation[5](51,44) = -225.0/4096.0;
-      prolongation[5](51,45) = 675.0/4096.0;
-      prolongation[5](51,46) = -225.0/4096.0;
-      prolongation[5](51,47) = 675.0/4096.0;
-      prolongation[5](51,48) = -25.0/4096.0;
-      prolongation[5](51,49) = 75.0/4096.0;
-      prolongation[5](51,50) = 75.0/4096.0;
-      prolongation[5](51,51) = -225.0/4096.0;
-      prolongation[5](51,52) = -45.0/4096.0;
-      prolongation[5](51,53) = 135.0/4096.0;
-      prolongation[5](51,54) = -45.0/4096.0;
-      prolongation[5](51,55) = 135.0/4096.0;
-      prolongation[5](51,56) = 225.0/4096.0;
-      prolongation[5](51,57) = -675.0/4096.0;
-      prolongation[5](51,58) = -675.0/4096.0;
-      prolongation[5](51,59) = 2025.0/4096.0;
-      prolongation[5](51,60) = 225.0/4096.0;
-      prolongation[5](51,61) = -675.0/4096.0;
-      prolongation[5](51,62) = -675.0/4096.0;
-      prolongation[5](51,63) = 2025.0/4096.0;
-      prolongation[5](52,25) = -5.0/256.0;
-      prolongation[5](52,27) = -5.0/256.0;
-      prolongation[5](52,29) = -1.0/256.0;
-      prolongation[5](52,31) = -1.0/256.0;
-      prolongation[5](52,42) = 45.0/256.0;
-      prolongation[5](52,43) = 45.0/256.0;
-      prolongation[5](52,45) = -15.0/256.0;
-      prolongation[5](52,47) = 5.0/256.0;
-      prolongation[5](52,50) = 9.0/256.0;
-      prolongation[5](52,51) = 9.0/256.0;
-      prolongation[5](52,53) = -15.0/256.0;
-      prolongation[5](52,55) = 5.0/256.0;
-      prolongation[5](52,58) = 135.0/256.0;
-      prolongation[5](52,59) = 135.0/256.0;
-      prolongation[5](52,62) = -45.0/256.0;
-      prolongation[5](52,63) = -45.0/256.0;
-      prolongation[5](53,0) = -5.0/4096.0;
-      prolongation[5](53,1) = -5.0/4096.0;
-      prolongation[5](53,2) = -1.0/4096.0;
-      prolongation[5](53,3) = -1.0/4096.0;
-      prolongation[5](53,4) = -25.0/4096.0;
-      prolongation[5](53,5) = -25.0/4096.0;
-      prolongation[5](53,6) = -5.0/4096.0;
-      prolongation[5](53,7) = -5.0/4096.0;
-      prolongation[5](53,8) = 45.0/4096.0;
-      prolongation[5](53,9) = 45.0/4096.0;
-      prolongation[5](53,10) = -15.0/4096.0;
-      prolongation[5](53,11) = 5.0/4096.0;
-      prolongation[5](53,12) = 9.0/4096.0;
-      prolongation[5](53,13) = 9.0/4096.0;
-      prolongation[5](53,14) = -15.0/4096.0;
-      prolongation[5](53,15) = 5.0/4096.0;
-      prolongation[5](53,16) = 225.0/4096.0;
-      prolongation[5](53,17) = 225.0/4096.0;
-      prolongation[5](53,18) = -75.0/4096.0;
-      prolongation[5](53,19) = 25.0/4096.0;
-      prolongation[5](53,20) = 45.0/4096.0;
-      prolongation[5](53,21) = 45.0/4096.0;
-      prolongation[5](53,22) = -75.0/4096.0;
-      prolongation[5](53,23) = 25.0/4096.0;
-      prolongation[5](53,24) = 25.0/4096.0;
-      prolongation[5](53,25) = -75.0/4096.0;
-      prolongation[5](53,26) = 25.0/4096.0;
-      prolongation[5](53,27) = -75.0/4096.0;
-      prolongation[5](53,28) = 5.0/4096.0;
-      prolongation[5](53,29) = -15.0/4096.0;
-      prolongation[5](53,30) = 5.0/4096.0;
-      prolongation[5](53,31) = -15.0/4096.0;
-      prolongation[5](53,32) = 135.0/4096.0;
-      prolongation[5](53,33) = 135.0/4096.0;
-      prolongation[5](53,34) = -45.0/4096.0;
-      prolongation[5](53,35) = -45.0/4096.0;
-      prolongation[5](53,36) = 675.0/4096.0;
-      prolongation[5](53,37) = 675.0/4096.0;
-      prolongation[5](53,38) = -225.0/4096.0;
-      prolongation[5](53,39) = -225.0/4096.0;
-      prolongation[5](53,40) = -225.0/4096.0;
-      prolongation[5](53,41) = -225.0/4096.0;
-      prolongation[5](53,42) = 675.0/4096.0;
-      prolongation[5](53,43) = 675.0/4096.0;
-      prolongation[5](53,44) = 75.0/4096.0;
-      prolongation[5](53,45) = -225.0/4096.0;
-      prolongation[5](53,46) = -25.0/4096.0;
-      prolongation[5](53,47) = 75.0/4096.0;
-      prolongation[5](53,48) = -45.0/4096.0;
-      prolongation[5](53,49) = -45.0/4096.0;
-      prolongation[5](53,50) = 135.0/4096.0;
-      prolongation[5](53,51) = 135.0/4096.0;
-      prolongation[5](53,52) = 75.0/4096.0;
-      prolongation[5](53,53) = -225.0/4096.0;
-      prolongation[5](53,54) = -25.0/4096.0;
-      prolongation[5](53,55) = 75.0/4096.0;
-      prolongation[5](53,56) = -675.0/4096.0;
-      prolongation[5](53,57) = -675.0/4096.0;
-      prolongation[5](53,58) = 2025.0/4096.0;
-      prolongation[5](53,59) = 2025.0/4096.0;
-      prolongation[5](53,60) = 225.0/4096.0;
-      prolongation[5](53,61) = 225.0/4096.0;
-      prolongation[5](53,62) = -675.0/4096.0;
-      prolongation[5](53,63) = -675.0/4096.0;
-      prolongation[5](54,45) = -1.0/16.0;
-      prolongation[5](54,53) = -1.0/16.0;
-      prolongation[5](54,58) = 9.0/16.0;
-      prolongation[5](54,59) = 9.0/16.0;
-      prolongation[5](55,10) = -1.0/256.0;
-      prolongation[5](55,14) = -1.0/256.0;
-      prolongation[5](55,18) = -5.0/256.0;
-      prolongation[5](55,22) = -5.0/256.0;
-      prolongation[5](55,32) = 9.0/256.0;
-      prolongation[5](55,33) = 9.0/256.0;
-      prolongation[5](55,36) = 45.0/256.0;
-      prolongation[5](55,37) = 45.0/256.0;
-      prolongation[5](55,44) = 5.0/256.0;
-      prolongation[5](55,45) = -15.0/256.0;
-      prolongation[5](55,52) = 5.0/256.0;
-      prolongation[5](55,53) = -15.0/256.0;
-      prolongation[5](55,56) = -45.0/256.0;
-      prolongation[5](55,57) = -45.0/256.0;
-      prolongation[5](55,58) = 135.0/256.0;
-      prolongation[5](55,59) = 135.0/256.0;
-      prolongation[5](56,43) = 5.0/16.0;
-      prolongation[5](56,51) = 1.0/16.0;
-      prolongation[5](56,59) = 15.0/16.0;
-      prolongation[5](56,63) = -5.0/16.0;
-      prolongation[5](57,25) = 5.0/256.0;
-      prolongation[5](57,27) = 25.0/256.0;
-      prolongation[5](57,29) = 5.0/256.0;
-      prolongation[5](57,31) = 1.0/256.0;
-      prolongation[5](57,42) = -25.0/256.0;
-      prolongation[5](57,43) = 75.0/256.0;
-      prolongation[5](57,45) = 75.0/256.0;
-      prolongation[5](57,47) = -25.0/256.0;
-      prolongation[5](57,50) = -5.0/256.0;
-      prolongation[5](57,51) = 15.0/256.0;
-      prolongation[5](57,53) = 15.0/256.0;
-      prolongation[5](57,55) = -5.0/256.0;
-      prolongation[5](57,58) = -75.0/256.0;
-      prolongation[5](57,59) = 225.0/256.0;
-      prolongation[5](57,62) = 25.0/256.0;
-      prolongation[5](57,63) = -75.0/256.0;
-      prolongation[5](58,9) = 5.0/256.0;
-      prolongation[5](58,13) = 1.0/256.0;
-      prolongation[5](58,17) = 25.0/256.0;
-      prolongation[5](58,21) = 5.0/256.0;
-      prolongation[5](58,33) = 15.0/256.0;
-      prolongation[5](58,35) = -5.0/256.0;
-      prolongation[5](58,37) = 75.0/256.0;
-      prolongation[5](58,39) = -25.0/256.0;
-      prolongation[5](58,41) = -25.0/256.0;
-      prolongation[5](58,43) = 75.0/256.0;
-      prolongation[5](58,49) = -5.0/256.0;
-      prolongation[5](58,51) = 15.0/256.0;
-      prolongation[5](58,57) = -75.0/256.0;
-      prolongation[5](58,59) = 225.0/256.0;
-      prolongation[5](58,61) = 25.0/256.0;
-      prolongation[5](58,63) = -75.0/256.0;
-      prolongation[5](59,0) = 5.0/4096.0;
-      prolongation[5](59,1) = 25.0/4096.0;
-      prolongation[5](59,2) = 5.0/4096.0;
-      prolongation[5](59,3) = 1.0/4096.0;
-      prolongation[5](59,4) = 25.0/4096.0;
-      prolongation[5](59,5) = 125.0/4096.0;
-      prolongation[5](59,6) = 25.0/4096.0;
-      prolongation[5](59,7) = 5.0/4096.0;
-      prolongation[5](59,8) = -25.0/4096.0;
-      prolongation[5](59,9) = 75.0/4096.0;
-      prolongation[5](59,10) = 75.0/4096.0;
-      prolongation[5](59,11) = -25.0/4096.0;
-      prolongation[5](59,12) = -5.0/4096.0;
-      prolongation[5](59,13) = 15.0/4096.0;
-      prolongation[5](59,14) = 15.0/4096.0;
-      prolongation[5](59,15) = -5.0/4096.0;
-      prolongation[5](59,16) = -125.0/4096.0;
-      prolongation[5](59,17) = 375.0/4096.0;
-      prolongation[5](59,18) = 375.0/4096.0;
-      prolongation[5](59,19) = -125.0/4096.0;
-      prolongation[5](59,20) = -25.0/4096.0;
-      prolongation[5](59,21) = 75.0/4096.0;
-      prolongation[5](59,22) = 75.0/4096.0;
-      prolongation[5](59,23) = -25.0/4096.0;
-      prolongation[5](59,24) = -25.0/4096.0;
-      prolongation[5](59,25) = 75.0/4096.0;
-      prolongation[5](59,26) = -125.0/4096.0;
-      prolongation[5](59,27) = 375.0/4096.0;
-      prolongation[5](59,28) = -25.0/4096.0;
-      prolongation[5](59,29) = 75.0/4096.0;
-      prolongation[5](59,30) = -5.0/4096.0;
-      prolongation[5](59,31) = 15.0/4096.0;
-      prolongation[5](59,32) = -75.0/4096.0;
-      prolongation[5](59,33) = 225.0/4096.0;
-      prolongation[5](59,34) = 25.0/4096.0;
-      prolongation[5](59,35) = -75.0/4096.0;
-      prolongation[5](59,36) = -375.0/4096.0;
-      prolongation[5](59,37) = 1125.0/4096.0;
-      prolongation[5](59,38) = 125.0/4096.0;
-      prolongation[5](59,39) = -375.0/4096.0;
-      prolongation[5](59,40) = 125.0/4096.0;
-      prolongation[5](59,41) = -375.0/4096.0;
-      prolongation[5](59,42) = -375.0/4096.0;
-      prolongation[5](59,43) = 1125.0/4096.0;
-      prolongation[5](59,44) = -375.0/4096.0;
-      prolongation[5](59,45) = 1125.0/4096.0;
-      prolongation[5](59,46) = 125.0/4096.0;
-      prolongation[5](59,47) = -375.0/4096.0;
-      prolongation[5](59,48) = 25.0/4096.0;
-      prolongation[5](59,49) = -75.0/4096.0;
-      prolongation[5](59,50) = -75.0/4096.0;
-      prolongation[5](59,51) = 225.0/4096.0;
-      prolongation[5](59,52) = -75.0/4096.0;
-      prolongation[5](59,53) = 225.0/4096.0;
-      prolongation[5](59,54) = 25.0/4096.0;
-      prolongation[5](59,55) = -75.0/4096.0;
-      prolongation[5](59,56) = 375.0/4096.0;
-      prolongation[5](59,57) = -1125.0/4096.0;
-      prolongation[5](59,58) = -1125.0/4096.0;
-      prolongation[5](59,59) = 3375.0/4096.0;
-      prolongation[5](59,60) = -125.0/4096.0;
-      prolongation[5](59,61) = 375.0/4096.0;
-      prolongation[5](59,62) = 375.0/4096.0;
-      prolongation[5](59,63) = -1125.0/4096.0;
-      prolongation[5](60,59) = 1.0;
-      prolongation[5](61,45) = 5.0/16.0;
-      prolongation[5](61,53) = 1.0/16.0;
-      prolongation[5](61,58) = -5.0/16.0;
-      prolongation[5](61,59) = 15.0/16.0;
-      prolongation[5](62,33) = 1.0/16.0;
-      prolongation[5](62,37) = 5.0/16.0;
-      prolongation[5](62,57) = -5.0/16.0;
-      prolongation[5](62,59) = 15.0/16.0;
-      prolongation[5](63,10) = 5.0/256.0;
-      prolongation[5](63,14) = 1.0/256.0;
-      prolongation[5](63,18) = 25.0/256.0;
-      prolongation[5](63,22) = 5.0/256.0;
-      prolongation[5](63,32) = -5.0/256.0;
-      prolongation[5](63,33) = 15.0/256.0;
-      prolongation[5](63,36) = -25.0/256.0;
-      prolongation[5](63,37) = 75.0/256.0;
-      prolongation[5](63,44) = -25.0/256.0;
-      prolongation[5](63,45) = 75.0/256.0;
-      prolongation[5](63,52) = -5.0/256.0;
-      prolongation[5](63,53) = 15.0/256.0;
-      prolongation[5](63,56) = 25.0/256.0;
-      prolongation[5](63,57) = -75.0/256.0;
-      prolongation[5](63,58) = -75.0/256.0;
-      prolongation[5](63,59) = 225.0/256.0;
-      prolongation[6](0,0) = -1.0/4096.0;
-      prolongation[6](0,1) = -1.0/4096.0;
-      prolongation[6](0,2) = -1.0/4096.0;
-      prolongation[6](0,3) = -1.0/4096.0;
-      prolongation[6](0,4) = -1.0/4096.0;
-      prolongation[6](0,5) = -1.0/4096.0;
-      prolongation[6](0,6) = -1.0/4096.0;
-      prolongation[6](0,7) = -1.0/4096.0;
-      prolongation[6](0,8) = 9.0/4096.0;
-      prolongation[6](0,9) = 9.0/4096.0;
-      prolongation[6](0,10) = 9.0/4096.0;
-      prolongation[6](0,11) = 9.0/4096.0;
-      prolongation[6](0,12) = 9.0/4096.0;
-      prolongation[6](0,13) = 9.0/4096.0;
-      prolongation[6](0,14) = 9.0/4096.0;
-      prolongation[6](0,15) = 9.0/4096.0;
-      prolongation[6](0,16) = 9.0/4096.0;
-      prolongation[6](0,17) = 9.0/4096.0;
-      prolongation[6](0,18) = 9.0/4096.0;
-      prolongation[6](0,19) = 9.0/4096.0;
-      prolongation[6](0,20) = 9.0/4096.0;
-      prolongation[6](0,21) = 9.0/4096.0;
-      prolongation[6](0,22) = 9.0/4096.0;
-      prolongation[6](0,23) = 9.0/4096.0;
-      prolongation[6](0,24) = 9.0/4096.0;
-      prolongation[6](0,25) = 9.0/4096.0;
-      prolongation[6](0,26) = 9.0/4096.0;
-      prolongation[6](0,27) = 9.0/4096.0;
-      prolongation[6](0,28) = 9.0/4096.0;
-      prolongation[6](0,29) = 9.0/4096.0;
-      prolongation[6](0,30) = 9.0/4096.0;
-      prolongation[6](0,31) = 9.0/4096.0;
-      prolongation[6](0,32) = -81.0/4096.0;
-      prolongation[6](0,33) = -81.0/4096.0;
-      prolongation[6](0,34) = -81.0/4096.0;
-      prolongation[6](0,35) = -81.0/4096.0;
-      prolongation[6](0,36) = -81.0/4096.0;
-      prolongation[6](0,37) = -81.0/4096.0;
-      prolongation[6](0,38) = -81.0/4096.0;
-      prolongation[6](0,39) = -81.0/4096.0;
-      prolongation[6](0,40) = -81.0/4096.0;
-      prolongation[6](0,41) = -81.0/4096.0;
-      prolongation[6](0,42) = -81.0/4096.0;
-      prolongation[6](0,43) = -81.0/4096.0;
-      prolongation[6](0,44) = -81.0/4096.0;
-      prolongation[6](0,45) = -81.0/4096.0;
-      prolongation[6](0,46) = -81.0/4096.0;
-      prolongation[6](0,47) = -81.0/4096.0;
-      prolongation[6](0,48) = -81.0/4096.0;
-      prolongation[6](0,49) = -81.0/4096.0;
-      prolongation[6](0,50) = -81.0/4096.0;
-      prolongation[6](0,51) = -81.0/4096.0;
-      prolongation[6](0,52) = -81.0/4096.0;
-      prolongation[6](0,53) = -81.0/4096.0;
-      prolongation[6](0,54) = -81.0/4096.0;
-      prolongation[6](0,55) = -81.0/4096.0;
-      prolongation[6](0,56) = 729.0/4096.0;
-      prolongation[6](0,57) = 729.0/4096.0;
-      prolongation[6](0,58) = 729.0/4096.0;
-      prolongation[6](0,59) = 729.0/4096.0;
-      prolongation[6](0,60) = 729.0/4096.0;
-      prolongation[6](0,61) = 729.0/4096.0;
-      prolongation[6](0,62) = 729.0/4096.0;
-      prolongation[6](0,63) = 729.0/4096.0;
-      prolongation[6](1,1) = 1.0/256.0;
-      prolongation[6](1,2) = 1.0/256.0;
-      prolongation[6](1,5) = 1.0/256.0;
-      prolongation[6](1,6) = 1.0/256.0;
-      prolongation[6](1,10) = -9.0/256.0;
-      prolongation[6](1,11) = -9.0/256.0;
-      prolongation[6](1,18) = -9.0/256.0;
-      prolongation[6](1,19) = -9.0/256.0;
-      prolongation[6](1,26) = -9.0/256.0;
-      prolongation[6](1,27) = -9.0/256.0;
-      prolongation[6](1,28) = -9.0/256.0;
-      prolongation[6](1,29) = -9.0/256.0;
-      prolongation[6](1,44) = 81.0/256.0;
-      prolongation[6](1,45) = 81.0/256.0;
-      prolongation[6](1,46) = 81.0/256.0;
-      prolongation[6](1,47) = 81.0/256.0;
-      prolongation[6](2,2) = -1.0/16.0;
-      prolongation[6](2,6) = -1.0/16.0;
-      prolongation[6](2,28) = 9.0/16.0;
-      prolongation[6](2,29) = 9.0/16.0;
-      prolongation[6](3,2) = 1.0/256.0;
-      prolongation[6](3,3) = 1.0/256.0;
-      prolongation[6](3,6) = 1.0/256.0;
-      prolongation[6](3,7) = 1.0/256.0;
-      prolongation[6](3,12) = -9.0/256.0;
-      prolongation[6](3,13) = -9.0/256.0;
-      prolongation[6](3,20) = -9.0/256.0;
-      prolongation[6](3,21) = -9.0/256.0;
-      prolongation[6](3,28) = -9.0/256.0;
-      prolongation[6](3,29) = -9.0/256.0;
-      prolongation[6](3,30) = -9.0/256.0;
-      prolongation[6](3,31) = -9.0/256.0;
-      prolongation[6](3,48) = 81.0/256.0;
-      prolongation[6](3,49) = 81.0/256.0;
-      prolongation[6](3,50) = 81.0/256.0;
-      prolongation[6](3,51) = 81.0/256.0;
-      prolongation[6](4,4) = 1.0/256.0;
-      prolongation[6](4,5) = 1.0/256.0;
-      prolongation[6](4,6) = 1.0/256.0;
-      prolongation[6](4,7) = 1.0/256.0;
-      prolongation[6](4,16) = -9.0/256.0;
-      prolongation[6](4,17) = -9.0/256.0;
-      prolongation[6](4,18) = -9.0/256.0;
-      prolongation[6](4,19) = -9.0/256.0;
-      prolongation[6](4,20) = -9.0/256.0;
-      prolongation[6](4,21) = -9.0/256.0;
-      prolongation[6](4,22) = -9.0/256.0;
-      prolongation[6](4,23) = -9.0/256.0;
-      prolongation[6](4,36) = 81.0/256.0;
-      prolongation[6](4,37) = 81.0/256.0;
-      prolongation[6](4,38) = 81.0/256.0;
-      prolongation[6](4,39) = 81.0/256.0;
-      prolongation[6](5,5) = -1.0/16.0;
-      prolongation[6](5,6) = -1.0/16.0;
-      prolongation[6](5,18) = 9.0/16.0;
-      prolongation[6](5,19) = 9.0/16.0;
-      prolongation[6](6,6) = 1.0;
-      prolongation[6](7,6) = -1.0/16.0;
-      prolongation[6](7,7) = -1.0/16.0;
-      prolongation[6](7,20) = 9.0/16.0;
-      prolongation[6](7,21) = 9.0/16.0;
-      prolongation[6](8,9) = 1.0/256.0;
-      prolongation[6](8,13) = 1.0/256.0;
-      prolongation[6](8,17) = 1.0/256.0;
-      prolongation[6](8,21) = 1.0/256.0;
-      prolongation[6](8,33) = -9.0/256.0;
-      prolongation[6](8,35) = -9.0/256.0;
-      prolongation[6](8,37) = -9.0/256.0;
-      prolongation[6](8,39) = -9.0/256.0;
-      prolongation[6](8,41) = -9.0/256.0;
-      prolongation[6](8,43) = -9.0/256.0;
-      prolongation[6](8,49) = -9.0/256.0;
-      prolongation[6](8,51) = -9.0/256.0;
-      prolongation[6](8,57) = 81.0/256.0;
-      prolongation[6](8,59) = 81.0/256.0;
-      prolongation[6](8,61) = 81.0/256.0;
-      prolongation[6](8,63) = 81.0/256.0;
-      prolongation[6](9,0) = 1.0/4096.0;
-      prolongation[6](9,1) = 5.0/4096.0;
-      prolongation[6](9,2) = 5.0/4096.0;
-      prolongation[6](9,3) = 1.0/4096.0;
-      prolongation[6](9,4) = 1.0/4096.0;
-      prolongation[6](9,5) = 5.0/4096.0;
-      prolongation[6](9,6) = 5.0/4096.0;
-      prolongation[6](9,7) = 1.0/4096.0;
-      prolongation[6](9,8) = -5.0/4096.0;
-      prolongation[6](9,9) = 15.0/4096.0;
-      prolongation[6](9,10) = -45.0/4096.0;
-      prolongation[6](9,11) = -45.0/4096.0;
-      prolongation[6](9,12) = -5.0/4096.0;
-      prolongation[6](9,13) = 15.0/4096.0;
-      prolongation[6](9,14) = -9.0/4096.0;
-      prolongation[6](9,15) = -9.0/4096.0;
-      prolongation[6](9,16) = -5.0/4096.0;
-      prolongation[6](9,17) = 15.0/4096.0;
-      prolongation[6](9,18) = -45.0/4096.0;
-      prolongation[6](9,19) = -45.0/4096.0;
-      prolongation[6](9,20) = -5.0/4096.0;
-      prolongation[6](9,21) = 15.0/4096.0;
-      prolongation[6](9,22) = -9.0/4096.0;
-      prolongation[6](9,23) = -9.0/4096.0;
-      prolongation[6](9,24) = -9.0/4096.0;
-      prolongation[6](9,25) = -9.0/4096.0;
-      prolongation[6](9,26) = -45.0/4096.0;
-      prolongation[6](9,27) = -45.0/4096.0;
-      prolongation[6](9,28) = -45.0/4096.0;
-      prolongation[6](9,29) = -45.0/4096.0;
-      prolongation[6](9,30) = -9.0/4096.0;
-      prolongation[6](9,31) = -9.0/4096.0;
-      prolongation[6](9,32) = 45.0/4096.0;
-      prolongation[6](9,33) = -135.0/4096.0;
-      prolongation[6](9,34) = 45.0/4096.0;
-      prolongation[6](9,35) = -135.0/4096.0;
-      prolongation[6](9,36) = 45.0/4096.0;
-      prolongation[6](9,37) = -135.0/4096.0;
-      prolongation[6](9,38) = 45.0/4096.0;
-      prolongation[6](9,39) = -135.0/4096.0;
-      prolongation[6](9,40) = 45.0/4096.0;
-      prolongation[6](9,41) = -135.0/4096.0;
-      prolongation[6](9,42) = 45.0/4096.0;
-      prolongation[6](9,43) = -135.0/4096.0;
-      prolongation[6](9,44) = 405.0/4096.0;
-      prolongation[6](9,45) = 405.0/4096.0;
-      prolongation[6](9,46) = 405.0/4096.0;
-      prolongation[6](9,47) = 405.0/4096.0;
-      prolongation[6](9,48) = 45.0/4096.0;
-      prolongation[6](9,49) = -135.0/4096.0;
-      prolongation[6](9,50) = 45.0/4096.0;
-      prolongation[6](9,51) = -135.0/4096.0;
-      prolongation[6](9,52) = 81.0/4096.0;
-      prolongation[6](9,53) = 81.0/4096.0;
-      prolongation[6](9,54) = 81.0/4096.0;
-      prolongation[6](9,55) = 81.0/4096.0;
-      prolongation[6](9,56) = -405.0/4096.0;
-      prolongation[6](9,57) = 1215.0/4096.0;
-      prolongation[6](9,58) = -405.0/4096.0;
-      prolongation[6](9,59) = 1215.0/4096.0;
-      prolongation[6](9,60) = -405.0/4096.0;
-      prolongation[6](9,61) = 1215.0/4096.0;
-      prolongation[6](9,62) = -405.0/4096.0;
-      prolongation[6](9,63) = 1215.0/4096.0;
-      prolongation[6](10,11) = -1.0/16.0;
-      prolongation[6](10,19) = -1.0/16.0;
-      prolongation[6](10,46) = 9.0/16.0;
-      prolongation[6](10,47) = 9.0/16.0;
-      prolongation[6](11,1) = -1.0/256.0;
-      prolongation[6](11,2) = -5.0/256.0;
-      prolongation[6](11,5) = -1.0/256.0;
-      prolongation[6](11,6) = -5.0/256.0;
-      prolongation[6](11,10) = 5.0/256.0;
-      prolongation[6](11,11) = -15.0/256.0;
-      prolongation[6](11,18) = 5.0/256.0;
-      prolongation[6](11,19) = -15.0/256.0;
-      prolongation[6](11,26) = 9.0/256.0;
-      prolongation[6](11,27) = 9.0/256.0;
-      prolongation[6](11,28) = 45.0/256.0;
-      prolongation[6](11,29) = 45.0/256.0;
-      prolongation[6](11,44) = -45.0/256.0;
-      prolongation[6](11,45) = -45.0/256.0;
-      prolongation[6](11,46) = 135.0/256.0;
-      prolongation[6](11,47) = 135.0/256.0;
-      prolongation[6](12,13) = -1.0/16.0;
-      prolongation[6](12,21) = -1.0/16.0;
-      prolongation[6](12,49) = 9.0/16.0;
-      prolongation[6](12,51) = 9.0/16.0;
-      prolongation[6](13,2) = -5.0/256.0;
-      prolongation[6](13,3) = -1.0/256.0;
-      prolongation[6](13,6) = -5.0/256.0;
-      prolongation[6](13,7) = -1.0/256.0;
-      prolongation[6](13,12) = 5.0/256.0;
-      prolongation[6](13,13) = -15.0/256.0;
-      prolongation[6](13,20) = 5.0/256.0;
-      prolongation[6](13,21) = -15.0/256.0;
-      prolongation[6](13,28) = 45.0/256.0;
-      prolongation[6](13,29) = 45.0/256.0;
-      prolongation[6](13,30) = 9.0/256.0;
-      prolongation[6](13,31) = 9.0/256.0;
-      prolongation[6](13,48) = -45.0/256.0;
-      prolongation[6](13,49) = 135.0/256.0;
-      prolongation[6](13,50) = -45.0/256.0;
-      prolongation[6](13,51) = 135.0/256.0;
-      prolongation[6](14,11) = 1.0/256.0;
-      prolongation[6](14,15) = 1.0/256.0;
-      prolongation[6](14,19) = 1.0/256.0;
-      prolongation[6](14,23) = 1.0/256.0;
-      prolongation[6](14,34) = -9.0/256.0;
-      prolongation[6](14,35) = -9.0/256.0;
-      prolongation[6](14,38) = -9.0/256.0;
-      prolongation[6](14,39) = -9.0/256.0;
-      prolongation[6](14,46) = -9.0/256.0;
-      prolongation[6](14,47) = -9.0/256.0;
-      prolongation[6](14,54) = -9.0/256.0;
-      prolongation[6](14,55) = -9.0/256.0;
-      prolongation[6](14,60) = 81.0/256.0;
-      prolongation[6](14,61) = 81.0/256.0;
-      prolongation[6](14,62) = 81.0/256.0;
-      prolongation[6](14,63) = 81.0/256.0;
-      prolongation[6](15,0) = 1.0/4096.0;
-      prolongation[6](15,1) = 1.0/4096.0;
-      prolongation[6](15,2) = 5.0/4096.0;
-      prolongation[6](15,3) = 5.0/4096.0;
-      prolongation[6](15,4) = 1.0/4096.0;
-      prolongation[6](15,5) = 1.0/4096.0;
-      prolongation[6](15,6) = 5.0/4096.0;
-      prolongation[6](15,7) = 5.0/4096.0;
-      prolongation[6](15,8) = -9.0/4096.0;
-      prolongation[6](15,9) = -9.0/4096.0;
-      prolongation[6](15,10) = -5.0/4096.0;
-      prolongation[6](15,11) = 15.0/4096.0;
-      prolongation[6](15,12) = -45.0/4096.0;
-      prolongation[6](15,13) = -45.0/4096.0;
-      prolongation[6](15,14) = -5.0/4096.0;
-      prolongation[6](15,15) = 15.0/4096.0;
-      prolongation[6](15,16) = -9.0/4096.0;
-      prolongation[6](15,17) = -9.0/4096.0;
-      prolongation[6](15,18) = -5.0/4096.0;
-      prolongation[6](15,19) = 15.0/4096.0;
-      prolongation[6](15,20) = -45.0/4096.0;
-      prolongation[6](15,21) = -45.0/4096.0;
-      prolongation[6](15,22) = -5.0/4096.0;
-      prolongation[6](15,23) = 15.0/4096.0;
-      prolongation[6](15,24) = -9.0/4096.0;
-      prolongation[6](15,25) = -9.0/4096.0;
-      prolongation[6](15,26) = -9.0/4096.0;
-      prolongation[6](15,27) = -9.0/4096.0;
-      prolongation[6](15,28) = -45.0/4096.0;
-      prolongation[6](15,29) = -45.0/4096.0;
-      prolongation[6](15,30) = -45.0/4096.0;
-      prolongation[6](15,31) = -45.0/4096.0;
-      prolongation[6](15,32) = 45.0/4096.0;
-      prolongation[6](15,33) = 45.0/4096.0;
-      prolongation[6](15,34) = -135.0/4096.0;
-      prolongation[6](15,35) = -135.0/4096.0;
-      prolongation[6](15,36) = 45.0/4096.0;
-      prolongation[6](15,37) = 45.0/4096.0;
-      prolongation[6](15,38) = -135.0/4096.0;
-      prolongation[6](15,39) = -135.0/4096.0;
-      prolongation[6](15,40) = 81.0/4096.0;
-      prolongation[6](15,41) = 81.0/4096.0;
-      prolongation[6](15,42) = 81.0/4096.0;
-      prolongation[6](15,43) = 81.0/4096.0;
-      prolongation[6](15,44) = 45.0/4096.0;
-      prolongation[6](15,45) = 45.0/4096.0;
-      prolongation[6](15,46) = -135.0/4096.0;
-      prolongation[6](15,47) = -135.0/4096.0;
-      prolongation[6](15,48) = 405.0/4096.0;
-      prolongation[6](15,49) = 405.0/4096.0;
-      prolongation[6](15,50) = 405.0/4096.0;
-      prolongation[6](15,51) = 405.0/4096.0;
-      prolongation[6](15,52) = 45.0/4096.0;
-      prolongation[6](15,53) = 45.0/4096.0;
-      prolongation[6](15,54) = -135.0/4096.0;
-      prolongation[6](15,55) = -135.0/4096.0;
-      prolongation[6](15,56) = -405.0/4096.0;
-      prolongation[6](15,57) = -405.0/4096.0;
-      prolongation[6](15,58) = -405.0/4096.0;
-      prolongation[6](15,59) = -405.0/4096.0;
-      prolongation[6](15,60) = 1215.0/4096.0;
-      prolongation[6](15,61) = 1215.0/4096.0;
-      prolongation[6](15,62) = 1215.0/4096.0;
-      prolongation[6](15,63) = 1215.0/4096.0;
-      prolongation[6](16,17) = -1.0/16.0;
-      prolongation[6](16,21) = -1.0/16.0;
-      prolongation[6](16,37) = 9.0/16.0;
-      prolongation[6](16,39) = 9.0/16.0;
-      prolongation[6](17,4) = -1.0/256.0;
-      prolongation[6](17,5) = -5.0/256.0;
-      prolongation[6](17,6) = -5.0/256.0;
-      prolongation[6](17,7) = -1.0/256.0;
-      prolongation[6](17,16) = 5.0/256.0;
-      prolongation[6](17,17) = -15.0/256.0;
-      prolongation[6](17,18) = 45.0/256.0;
-      prolongation[6](17,19) = 45.0/256.0;
-      prolongation[6](17,20) = 5.0/256.0;
-      prolongation[6](17,21) = -15.0/256.0;
-      prolongation[6](17,22) = 9.0/256.0;
-      prolongation[6](17,23) = 9.0/256.0;
-      prolongation[6](17,36) = -45.0/256.0;
-      prolongation[6](17,37) = 135.0/256.0;
-      prolongation[6](17,38) = -45.0/256.0;
-      prolongation[6](17,39) = 135.0/256.0;
-      prolongation[6](18,19) = 1.0;
-      prolongation[6](19,5) = 1.0/16.0;
-      prolongation[6](19,6) = 5.0/16.0;
-      prolongation[6](19,18) = -5.0/16.0;
-      prolongation[6](19,19) = 15.0/16.0;
-      prolongation[6](20,21) = 1.0;
-      prolongation[6](21,6) = 5.0/16.0;
-      prolongation[6](21,7) = 1.0/16.0;
-      prolongation[6](21,20) = -5.0/16.0;
-      prolongation[6](21,21) = 15.0/16.0;
-      prolongation[6](22,19) = -1.0/16.0;
-      prolongation[6](22,23) = -1.0/16.0;
-      prolongation[6](22,38) = 9.0/16.0;
-      prolongation[6](22,39) = 9.0/16.0;
-      prolongation[6](23,4) = -1.0/256.0;
-      prolongation[6](23,5) = -1.0/256.0;
-      prolongation[6](23,6) = -5.0/256.0;
-      prolongation[6](23,7) = -5.0/256.0;
-      prolongation[6](23,16) = 9.0/256.0;
-      prolongation[6](23,17) = 9.0/256.0;
-      prolongation[6](23,18) = 5.0/256.0;
-      prolongation[6](23,19) = -15.0/256.0;
-      prolongation[6](23,20) = 45.0/256.0;
-      prolongation[6](23,21) = 45.0/256.0;
-      prolongation[6](23,22) = 5.0/256.0;
-      prolongation[6](23,23) = -15.0/256.0;
-      prolongation[6](23,36) = -45.0/256.0;
-      prolongation[6](23,37) = -45.0/256.0;
-      prolongation[6](23,38) = 135.0/256.0;
-      prolongation[6](23,39) = 135.0/256.0;
-      prolongation[6](24,25) = 1.0/256.0;
-      prolongation[6](24,27) = 1.0/256.0;
-      prolongation[6](24,29) = 1.0/256.0;
-      prolongation[6](24,31) = 1.0/256.0;
-      prolongation[6](24,42) = -9.0/256.0;
-      prolongation[6](24,43) = -9.0/256.0;
-      prolongation[6](24,45) = -9.0/256.0;
-      prolongation[6](24,47) = -9.0/256.0;
-      prolongation[6](24,50) = -9.0/256.0;
-      prolongation[6](24,51) = -9.0/256.0;
-      prolongation[6](24,53) = -9.0/256.0;
-      prolongation[6](24,55) = -9.0/256.0;
-      prolongation[6](24,58) = 81.0/256.0;
-      prolongation[6](24,59) = 81.0/256.0;
-      prolongation[6](24,62) = 81.0/256.0;
-      prolongation[6](24,63) = 81.0/256.0;
-      prolongation[6](25,0) = 1.0/4096.0;
-      prolongation[6](25,1) = 1.0/4096.0;
-      prolongation[6](25,2) = 1.0/4096.0;
-      prolongation[6](25,3) = 1.0/4096.0;
-      prolongation[6](25,4) = 5.0/4096.0;
-      prolongation[6](25,5) = 5.0/4096.0;
-      prolongation[6](25,6) = 5.0/4096.0;
-      prolongation[6](25,7) = 5.0/4096.0;
-      prolongation[6](25,8) = -9.0/4096.0;
-      prolongation[6](25,9) = -9.0/4096.0;
-      prolongation[6](25,10) = -9.0/4096.0;
-      prolongation[6](25,11) = -9.0/4096.0;
-      prolongation[6](25,12) = -9.0/4096.0;
-      prolongation[6](25,13) = -9.0/4096.0;
-      prolongation[6](25,14) = -9.0/4096.0;
-      prolongation[6](25,15) = -9.0/4096.0;
-      prolongation[6](25,16) = -45.0/4096.0;
-      prolongation[6](25,17) = -45.0/4096.0;
-      prolongation[6](25,18) = -45.0/4096.0;
-      prolongation[6](25,19) = -45.0/4096.0;
-      prolongation[6](25,20) = -45.0/4096.0;
-      prolongation[6](25,21) = -45.0/4096.0;
-      prolongation[6](25,22) = -45.0/4096.0;
-      prolongation[6](25,23) = -45.0/4096.0;
-      prolongation[6](25,24) = -5.0/4096.0;
-      prolongation[6](25,25) = 15.0/4096.0;
-      prolongation[6](25,26) = -5.0/4096.0;
-      prolongation[6](25,27) = 15.0/4096.0;
-      prolongation[6](25,28) = -5.0/4096.0;
-      prolongation[6](25,29) = 15.0/4096.0;
-      prolongation[6](25,30) = -5.0/4096.0;
-      prolongation[6](25,31) = 15.0/4096.0;
-      prolongation[6](25,32) = 81.0/4096.0;
-      prolongation[6](25,33) = 81.0/4096.0;
-      prolongation[6](25,34) = 81.0/4096.0;
-      prolongation[6](25,35) = 81.0/4096.0;
-      prolongation[6](25,36) = 405.0/4096.0;
-      prolongation[6](25,37) = 405.0/4096.0;
-      prolongation[6](25,38) = 405.0/4096.0;
-      prolongation[6](25,39) = 405.0/4096.0;
-      prolongation[6](25,40) = 45.0/4096.0;
-      prolongation[6](25,41) = 45.0/4096.0;
-      prolongation[6](25,42) = -135.0/4096.0;
-      prolongation[6](25,43) = -135.0/4096.0;
-      prolongation[6](25,44) = 45.0/4096.0;
-      prolongation[6](25,45) = -135.0/4096.0;
-      prolongation[6](25,46) = 45.0/4096.0;
-      prolongation[6](25,47) = -135.0/4096.0;
-      prolongation[6](25,48) = 45.0/4096.0;
-      prolongation[6](25,49) = 45.0/4096.0;
-      prolongation[6](25,50) = -135.0/4096.0;
-      prolongation[6](25,51) = -135.0/4096.0;
-      prolongation[6](25,52) = 45.0/4096.0;
-      prolongation[6](25,53) = -135.0/4096.0;
-      prolongation[6](25,54) = 45.0/4096.0;
-      prolongation[6](25,55) = -135.0/4096.0;
-      prolongation[6](25,56) = -405.0/4096.0;
-      prolongation[6](25,57) = -405.0/4096.0;
-      prolongation[6](25,58) = 1215.0/4096.0;
-      prolongation[6](25,59) = 1215.0/4096.0;
-      prolongation[6](25,60) = -405.0/4096.0;
-      prolongation[6](25,61) = -405.0/4096.0;
-      prolongation[6](25,62) = 1215.0/4096.0;
-      prolongation[6](25,63) = 1215.0/4096.0;
-      prolongation[6](26,27) = -1.0/16.0;
-      prolongation[6](26,29) = -1.0/16.0;
-      prolongation[6](26,45) = 9.0/16.0;
-      prolongation[6](26,47) = 9.0/16.0;
-      prolongation[6](27,1) = -1.0/256.0;
-      prolongation[6](27,2) = -1.0/256.0;
-      prolongation[6](27,5) = -5.0/256.0;
-      prolongation[6](27,6) = -5.0/256.0;
-      prolongation[6](27,10) = 9.0/256.0;
-      prolongation[6](27,11) = 9.0/256.0;
-      prolongation[6](27,18) = 45.0/256.0;
-      prolongation[6](27,19) = 45.0/256.0;
-      prolongation[6](27,26) = 5.0/256.0;
-      prolongation[6](27,27) = -15.0/256.0;
-      prolongation[6](27,28) = 5.0/256.0;
-      prolongation[6](27,29) = -15.0/256.0;
-      prolongation[6](27,44) = -45.0/256.0;
-      prolongation[6](27,45) = 135.0/256.0;
-      prolongation[6](27,46) = -45.0/256.0;
-      prolongation[6](27,47) = 135.0/256.0;
-      prolongation[6](28,29) = 1.0;
-      prolongation[6](29,2) = 1.0/16.0;
-      prolongation[6](29,6) = 5.0/16.0;
-      prolongation[6](29,28) = -5.0/16.0;
-      prolongation[6](29,29) = 15.0/16.0;
-      prolongation[6](30,29) = -1.0/16.0;
-      prolongation[6](30,31) = -1.0/16.0;
-      prolongation[6](30,50) = 9.0/16.0;
-      prolongation[6](30,51) = 9.0/16.0;
-      prolongation[6](31,2) = -1.0/256.0;
-      prolongation[6](31,3) = -1.0/256.0;
-      prolongation[6](31,6) = -5.0/256.0;
-      prolongation[6](31,7) = -5.0/256.0;
-      prolongation[6](31,12) = 9.0/256.0;
-      prolongation[6](31,13) = 9.0/256.0;
-      prolongation[6](31,20) = 45.0/256.0;
-      prolongation[6](31,21) = 45.0/256.0;
-      prolongation[6](31,28) = 5.0/256.0;
-      prolongation[6](31,29) = -15.0/256.0;
-      prolongation[6](31,30) = 5.0/256.0;
-      prolongation[6](31,31) = -15.0/256.0;
-      prolongation[6](31,48) = -45.0/256.0;
-      prolongation[6](31,49) = -45.0/256.0;
-      prolongation[6](31,50) = 135.0/256.0;
-      prolongation[6](31,51) = 135.0/256.0;
-      prolongation[6](32,35) = -1.0/16.0;
-      prolongation[6](32,39) = -1.0/16.0;
-      prolongation[6](32,61) = 9.0/16.0;
-      prolongation[6](32,63) = 9.0/16.0;
-      prolongation[6](33,11) = -5.0/256.0;
-      prolongation[6](33,15) = -1.0/256.0;
-      prolongation[6](33,19) = -5.0/256.0;
-      prolongation[6](33,23) = -1.0/256.0;
-      prolongation[6](33,34) = 5.0/256.0;
-      prolongation[6](33,35) = -15.0/256.0;
-      prolongation[6](33,38) = 5.0/256.0;
-      prolongation[6](33,39) = -15.0/256.0;
-      prolongation[6](33,46) = 45.0/256.0;
-      prolongation[6](33,47) = 45.0/256.0;
-      prolongation[6](33,54) = 9.0/256.0;
-      prolongation[6](33,55) = 9.0/256.0;
-      prolongation[6](33,60) = -45.0/256.0;
-      prolongation[6](33,61) = 135.0/256.0;
-      prolongation[6](33,62) = -45.0/256.0;
-      prolongation[6](33,63) = 135.0/256.0;
-      prolongation[6](34,9) = -1.0/256.0;
-      prolongation[6](34,13) = -5.0/256.0;
-      prolongation[6](34,17) = -1.0/256.0;
-      prolongation[6](34,21) = -5.0/256.0;
-      prolongation[6](34,33) = 5.0/256.0;
-      prolongation[6](34,35) = -15.0/256.0;
-      prolongation[6](34,37) = 5.0/256.0;
-      prolongation[6](34,39) = -15.0/256.0;
-      prolongation[6](34,41) = 9.0/256.0;
-      prolongation[6](34,43) = 9.0/256.0;
-      prolongation[6](34,49) = 45.0/256.0;
-      prolongation[6](34,51) = 45.0/256.0;
-      prolongation[6](34,57) = -45.0/256.0;
-      prolongation[6](34,59) = -45.0/256.0;
-      prolongation[6](34,61) = 135.0/256.0;
-      prolongation[6](34,63) = 135.0/256.0;
-      prolongation[6](35,0) = -1.0/4096.0;
-      prolongation[6](35,1) = -5.0/4096.0;
-      prolongation[6](35,2) = -25.0/4096.0;
-      prolongation[6](35,3) = -5.0/4096.0;
-      prolongation[6](35,4) = -1.0/4096.0;
-      prolongation[6](35,5) = -5.0/4096.0;
-      prolongation[6](35,6) = -25.0/4096.0;
-      prolongation[6](35,7) = -5.0/4096.0;
-      prolongation[6](35,8) = 5.0/4096.0;
-      prolongation[6](35,9) = -15.0/4096.0;
-      prolongation[6](35,10) = 25.0/4096.0;
-      prolongation[6](35,11) = -75.0/4096.0;
-      prolongation[6](35,12) = 25.0/4096.0;
-      prolongation[6](35,13) = -75.0/4096.0;
-      prolongation[6](35,14) = 5.0/4096.0;
-      prolongation[6](35,15) = -15.0/4096.0;
-      prolongation[6](35,16) = 5.0/4096.0;
-      prolongation[6](35,17) = -15.0/4096.0;
-      prolongation[6](35,18) = 25.0/4096.0;
-      prolongation[6](35,19) = -75.0/4096.0;
-      prolongation[6](35,20) = 25.0/4096.0;
-      prolongation[6](35,21) = -75.0/4096.0;
-      prolongation[6](35,22) = 5.0/4096.0;
-      prolongation[6](35,23) = -15.0/4096.0;
-      prolongation[6](35,24) = 9.0/4096.0;
-      prolongation[6](35,25) = 9.0/4096.0;
-      prolongation[6](35,26) = 45.0/4096.0;
-      prolongation[6](35,27) = 45.0/4096.0;
-      prolongation[6](35,28) = 225.0/4096.0;
-      prolongation[6](35,29) = 225.0/4096.0;
-      prolongation[6](35,30) = 45.0/4096.0;
-      prolongation[6](35,31) = 45.0/4096.0;
-      prolongation[6](35,32) = -25.0/4096.0;
-      prolongation[6](35,33) = 75.0/4096.0;
-      prolongation[6](35,34) = 75.0/4096.0;
-      prolongation[6](35,35) = -225.0/4096.0;
-      prolongation[6](35,36) = -25.0/4096.0;
-      prolongation[6](35,37) = 75.0/4096.0;
-      prolongation[6](35,38) = 75.0/4096.0;
-      prolongation[6](35,39) = -225.0/4096.0;
-      prolongation[6](35,40) = -45.0/4096.0;
-      prolongation[6](35,41) = 135.0/4096.0;
-      prolongation[6](35,42) = -45.0/4096.0;
-      prolongation[6](35,43) = 135.0/4096.0;
-      prolongation[6](35,44) = -225.0/4096.0;
-      prolongation[6](35,45) = -225.0/4096.0;
-      prolongation[6](35,46) = 675.0/4096.0;
-      prolongation[6](35,47) = 675.0/4096.0;
-      prolongation[6](35,48) = -225.0/4096.0;
-      prolongation[6](35,49) = 675.0/4096.0;
-      prolongation[6](35,50) = -225.0/4096.0;
-      prolongation[6](35,51) = 675.0/4096.0;
-      prolongation[6](35,52) = -45.0/4096.0;
-      prolongation[6](35,53) = -45.0/4096.0;
-      prolongation[6](35,54) = 135.0/4096.0;
-      prolongation[6](35,55) = 135.0/4096.0;
-      prolongation[6](35,56) = 225.0/4096.0;
-      prolongation[6](35,57) = -675.0/4096.0;
-      prolongation[6](35,58) = 225.0/4096.0;
-      prolongation[6](35,59) = -675.0/4096.0;
-      prolongation[6](35,60) = -675.0/4096.0;
-      prolongation[6](35,61) = 2025.0/4096.0;
-      prolongation[6](35,62) = -675.0/4096.0;
-      prolongation[6](35,63) = 2025.0/4096.0;
-      prolongation[6](36,39) = 1.0;
-      prolongation[6](37,19) = 5.0/16.0;
-      prolongation[6](37,23) = 1.0/16.0;
-      prolongation[6](37,38) = -5.0/16.0;
-      prolongation[6](37,39) = 15.0/16.0;
-      prolongation[6](38,17) = 1.0/16.0;
-      prolongation[6](38,21) = 5.0/16.0;
-      prolongation[6](38,37) = -5.0/16.0;
-      prolongation[6](38,39) = 15.0/16.0;
-      prolongation[6](39,4) = 1.0/256.0;
-      prolongation[6](39,5) = 5.0/256.0;
-      prolongation[6](39,6) = 25.0/256.0;
-      prolongation[6](39,7) = 5.0/256.0;
-      prolongation[6](39,16) = -5.0/256.0;
-      prolongation[6](39,17) = 15.0/256.0;
-      prolongation[6](39,18) = -25.0/256.0;
-      prolongation[6](39,19) = 75.0/256.0;
-      prolongation[6](39,20) = -25.0/256.0;
-      prolongation[6](39,21) = 75.0/256.0;
-      prolongation[6](39,22) = -5.0/256.0;
-      prolongation[6](39,23) = 15.0/256.0;
-      prolongation[6](39,36) = 25.0/256.0;
-      prolongation[6](39,37) = -75.0/256.0;
-      prolongation[6](39,38) = -75.0/256.0;
-      prolongation[6](39,39) = 225.0/256.0;
-      prolongation[6](40,43) = -1.0/16.0;
-      prolongation[6](40,51) = -1.0/16.0;
-      prolongation[6](40,59) = 9.0/16.0;
-      prolongation[6](40,63) = 9.0/16.0;
-      prolongation[6](41,25) = -1.0/256.0;
-      prolongation[6](41,27) = -5.0/256.0;
-      prolongation[6](41,29) = -5.0/256.0;
-      prolongation[6](41,31) = -1.0/256.0;
-      prolongation[6](41,42) = 5.0/256.0;
-      prolongation[6](41,43) = -15.0/256.0;
-      prolongation[6](41,45) = 45.0/256.0;
-      prolongation[6](41,47) = 45.0/256.0;
-      prolongation[6](41,50) = 5.0/256.0;
-      prolongation[6](41,51) = -15.0/256.0;
-      prolongation[6](41,53) = 9.0/256.0;
-      prolongation[6](41,55) = 9.0/256.0;
-      prolongation[6](41,58) = -45.0/256.0;
-      prolongation[6](41,59) = 135.0/256.0;
-      prolongation[6](41,62) = -45.0/256.0;
-      prolongation[6](41,63) = 135.0/256.0;
-      prolongation[6](42,9) = -1.0/256.0;
-      prolongation[6](42,13) = -1.0/256.0;
-      prolongation[6](42,17) = -5.0/256.0;
-      prolongation[6](42,21) = -5.0/256.0;
-      prolongation[6](42,33) = 9.0/256.0;
-      prolongation[6](42,35) = 9.0/256.0;
-      prolongation[6](42,37) = 45.0/256.0;
-      prolongation[6](42,39) = 45.0/256.0;
-      prolongation[6](42,41) = 5.0/256.0;
-      prolongation[6](42,43) = -15.0/256.0;
-      prolongation[6](42,49) = 5.0/256.0;
-      prolongation[6](42,51) = -15.0/256.0;
-      prolongation[6](42,57) = -45.0/256.0;
-      prolongation[6](42,59) = 135.0/256.0;
-      prolongation[6](42,61) = -45.0/256.0;
-      prolongation[6](42,63) = 135.0/256.0;
-      prolongation[6](43,0) = -1.0/4096.0;
-      prolongation[6](43,1) = -5.0/4096.0;
-      prolongation[6](43,2) = -5.0/4096.0;
-      prolongation[6](43,3) = -1.0/4096.0;
-      prolongation[6](43,4) = -5.0/4096.0;
-      prolongation[6](43,5) = -25.0/4096.0;
-      prolongation[6](43,6) = -25.0/4096.0;
-      prolongation[6](43,7) = -5.0/4096.0;
-      prolongation[6](43,8) = 5.0/4096.0;
-      prolongation[6](43,9) = -15.0/4096.0;
-      prolongation[6](43,10) = 45.0/4096.0;
-      prolongation[6](43,11) = 45.0/4096.0;
-      prolongation[6](43,12) = 5.0/4096.0;
-      prolongation[6](43,13) = -15.0/4096.0;
-      prolongation[6](43,14) = 9.0/4096.0;
-      prolongation[6](43,15) = 9.0/4096.0;
-      prolongation[6](43,16) = 25.0/4096.0;
-      prolongation[6](43,17) = -75.0/4096.0;
-      prolongation[6](43,18) = 225.0/4096.0;
-      prolongation[6](43,19) = 225.0/4096.0;
-      prolongation[6](43,20) = 25.0/4096.0;
-      prolongation[6](43,21) = -75.0/4096.0;
-      prolongation[6](43,22) = 45.0/4096.0;
-      prolongation[6](43,23) = 45.0/4096.0;
-      prolongation[6](43,24) = 5.0/4096.0;
-      prolongation[6](43,25) = -15.0/4096.0;
-      prolongation[6](43,26) = 25.0/4096.0;
-      prolongation[6](43,27) = -75.0/4096.0;
-      prolongation[6](43,28) = 25.0/4096.0;
-      prolongation[6](43,29) = -75.0/4096.0;
-      prolongation[6](43,30) = 5.0/4096.0;
-      prolongation[6](43,31) = -15.0/4096.0;
-      prolongation[6](43,32) = -45.0/4096.0;
-      prolongation[6](43,33) = 135.0/4096.0;
-      prolongation[6](43,34) = -45.0/4096.0;
-      prolongation[6](43,35) = 135.0/4096.0;
-      prolongation[6](43,36) = -225.0/4096.0;
-      prolongation[6](43,37) = 675.0/4096.0;
-      prolongation[6](43,38) = -225.0/4096.0;
-      prolongation[6](43,39) = 675.0/4096.0;
-      prolongation[6](43,40) = -25.0/4096.0;
-      prolongation[6](43,41) = 75.0/4096.0;
-      prolongation[6](43,42) = 75.0/4096.0;
-      prolongation[6](43,43) = -225.0/4096.0;
-      prolongation[6](43,44) = -225.0/4096.0;
-      prolongation[6](43,45) = 675.0/4096.0;
-      prolongation[6](43,46) = -225.0/4096.0;
-      prolongation[6](43,47) = 675.0/4096.0;
-      prolongation[6](43,48) = -25.0/4096.0;
-      prolongation[6](43,49) = 75.0/4096.0;
-      prolongation[6](43,50) = 75.0/4096.0;
-      prolongation[6](43,51) = -225.0/4096.0;
-      prolongation[6](43,52) = -45.0/4096.0;
-      prolongation[6](43,53) = 135.0/4096.0;
-      prolongation[6](43,54) = -45.0/4096.0;
-      prolongation[6](43,55) = 135.0/4096.0;
-      prolongation[6](43,56) = 225.0/4096.0;
-      prolongation[6](43,57) = -675.0/4096.0;
-      prolongation[6](43,58) = -675.0/4096.0;
-      prolongation[6](43,59) = 2025.0/4096.0;
-      prolongation[6](43,60) = 225.0/4096.0;
-      prolongation[6](43,61) = -675.0/4096.0;
-      prolongation[6](43,62) = -675.0/4096.0;
-      prolongation[6](43,63) = 2025.0/4096.0;
-      prolongation[6](44,47) = 1.0;
-      prolongation[6](45,11) = 1.0/16.0;
-      prolongation[6](45,19) = 5.0/16.0;
-      prolongation[6](45,46) = -5.0/16.0;
-      prolongation[6](45,47) = 15.0/16.0;
-      prolongation[6](46,27) = 1.0/16.0;
-      prolongation[6](46,29) = 5.0/16.0;
-      prolongation[6](46,45) = -5.0/16.0;
-      prolongation[6](46,47) = 15.0/16.0;
-      prolongation[6](47,1) = 1.0/256.0;
-      prolongation[6](47,2) = 5.0/256.0;
-      prolongation[6](47,5) = 5.0/256.0;
-      prolongation[6](47,6) = 25.0/256.0;
-      prolongation[6](47,10) = -5.0/256.0;
-      prolongation[6](47,11) = 15.0/256.0;
-      prolongation[6](47,18) = -25.0/256.0;
-      prolongation[6](47,19) = 75.0/256.0;
-      prolongation[6](47,26) = -5.0/256.0;
-      prolongation[6](47,27) = 15.0/256.0;
-      prolongation[6](47,28) = -25.0/256.0;
-      prolongation[6](47,29) = 75.0/256.0;
-      prolongation[6](47,44) = 25.0/256.0;
-      prolongation[6](47,45) = -75.0/256.0;
-      prolongation[6](47,46) = -75.0/256.0;
-      prolongation[6](47,47) = 225.0/256.0;
-      prolongation[6](48,51) = 1.0;
-      prolongation[6](49,29) = 5.0/16.0;
-      prolongation[6](49,31) = 1.0/16.0;
-      prolongation[6](49,50) = -5.0/16.0;
-      prolongation[6](49,51) = 15.0/16.0;
-      prolongation[6](50,13) = 1.0/16.0;
-      prolongation[6](50,21) = 5.0/16.0;
-      prolongation[6](50,49) = -5.0/16.0;
-      prolongation[6](50,51) = 15.0/16.0;
-      prolongation[6](51,2) = 5.0/256.0;
-      prolongation[6](51,3) = 1.0/256.0;
-      prolongation[6](51,6) = 25.0/256.0;
-      prolongation[6](51,7) = 5.0/256.0;
-      prolongation[6](51,12) = -5.0/256.0;
-      prolongation[6](51,13) = 15.0/256.0;
-      prolongation[6](51,20) = -25.0/256.0;
-      prolongation[6](51,21) = 75.0/256.0;
-      prolongation[6](51,28) = -25.0/256.0;
-      prolongation[6](51,29) = 75.0/256.0;
-      prolongation[6](51,30) = -5.0/256.0;
-      prolongation[6](51,31) = 15.0/256.0;
-      prolongation[6](51,48) = 25.0/256.0;
-      prolongation[6](51,49) = -75.0/256.0;
-      prolongation[6](51,50) = -75.0/256.0;
-      prolongation[6](51,51) = 225.0/256.0;
-      prolongation[6](52,47) = -1.0/16.0;
-      prolongation[6](52,55) = -1.0/16.0;
-      prolongation[6](52,62) = 9.0/16.0;
-      prolongation[6](52,63) = 9.0/16.0;
-      prolongation[6](53,11) = -1.0/256.0;
-      prolongation[6](53,15) = -1.0/256.0;
-      prolongation[6](53,19) = -5.0/256.0;
-      prolongation[6](53,23) = -5.0/256.0;
-      prolongation[6](53,34) = 9.0/256.0;
-      prolongation[6](53,35) = 9.0/256.0;
-      prolongation[6](53,38) = 45.0/256.0;
-      prolongation[6](53,39) = 45.0/256.0;
-      prolongation[6](53,46) = 5.0/256.0;
-      prolongation[6](53,47) = -15.0/256.0;
-      prolongation[6](53,54) = 5.0/256.0;
-      prolongation[6](53,55) = -15.0/256.0;
-      prolongation[6](53,60) = -45.0/256.0;
-      prolongation[6](53,61) = -45.0/256.0;
-      prolongation[6](53,62) = 135.0/256.0;
-      prolongation[6](53,63) = 135.0/256.0;
-      prolongation[6](54,25) = -1.0/256.0;
-      prolongation[6](54,27) = -1.0/256.0;
-      prolongation[6](54,29) = -5.0/256.0;
-      prolongation[6](54,31) = -5.0/256.0;
-      prolongation[6](54,42) = 9.0/256.0;
-      prolongation[6](54,43) = 9.0/256.0;
-      prolongation[6](54,45) = 5.0/256.0;
-      prolongation[6](54,47) = -15.0/256.0;
-      prolongation[6](54,50) = 45.0/256.0;
-      prolongation[6](54,51) = 45.0/256.0;
-      prolongation[6](54,53) = 5.0/256.0;
-      prolongation[6](54,55) = -15.0/256.0;
-      prolongation[6](54,58) = -45.0/256.0;
-      prolongation[6](54,59) = -45.0/256.0;
-      prolongation[6](54,62) = 135.0/256.0;
-      prolongation[6](54,63) = 135.0/256.0;
-      prolongation[6](55,0) = -1.0/4096.0;
-      prolongation[6](55,1) = -1.0/4096.0;
-      prolongation[6](55,2) = -5.0/4096.0;
-      prolongation[6](55,3) = -5.0/4096.0;
-      prolongation[6](55,4) = -5.0/4096.0;
-      prolongation[6](55,5) = -5.0/4096.0;
-      prolongation[6](55,6) = -25.0/4096.0;
-      prolongation[6](55,7) = -25.0/4096.0;
-      prolongation[6](55,8) = 9.0/4096.0;
-      prolongation[6](55,9) = 9.0/4096.0;
-      prolongation[6](55,10) = 5.0/4096.0;
-      prolongation[6](55,11) = -15.0/4096.0;
-      prolongation[6](55,12) = 45.0/4096.0;
-      prolongation[6](55,13) = 45.0/4096.0;
-      prolongation[6](55,14) = 5.0/4096.0;
-      prolongation[6](55,15) = -15.0/4096.0;
-      prolongation[6](55,16) = 45.0/4096.0;
-      prolongation[6](55,17) = 45.0/4096.0;
-      prolongation[6](55,18) = 25.0/4096.0;
-      prolongation[6](55,19) = -75.0/4096.0;
-      prolongation[6](55,20) = 225.0/4096.0;
-      prolongation[6](55,21) = 225.0/4096.0;
-      prolongation[6](55,22) = 25.0/4096.0;
-      prolongation[6](55,23) = -75.0/4096.0;
-      prolongation[6](55,24) = 5.0/4096.0;
-      prolongation[6](55,25) = -15.0/4096.0;
-      prolongation[6](55,26) = 5.0/4096.0;
-      prolongation[6](55,27) = -15.0/4096.0;
-      prolongation[6](55,28) = 25.0/4096.0;
-      prolongation[6](55,29) = -75.0/4096.0;
-      prolongation[6](55,30) = 25.0/4096.0;
-      prolongation[6](55,31) = -75.0/4096.0;
-      prolongation[6](55,32) = -45.0/4096.0;
-      prolongation[6](55,33) = -45.0/4096.0;
-      prolongation[6](55,34) = 135.0/4096.0;
-      prolongation[6](55,35) = 135.0/4096.0;
-      prolongation[6](55,36) = -225.0/4096.0;
-      prolongation[6](55,37) = -225.0/4096.0;
-      prolongation[6](55,38) = 675.0/4096.0;
-      prolongation[6](55,39) = 675.0/4096.0;
-      prolongation[6](55,40) = -45.0/4096.0;
-      prolongation[6](55,41) = -45.0/4096.0;
-      prolongation[6](55,42) = 135.0/4096.0;
-      prolongation[6](55,43) = 135.0/4096.0;
-      prolongation[6](55,44) = -25.0/4096.0;
-      prolongation[6](55,45) = 75.0/4096.0;
-      prolongation[6](55,46) = 75.0/4096.0;
-      prolongation[6](55,47) = -225.0/4096.0;
-      prolongation[6](55,48) = -225.0/4096.0;
-      prolongation[6](55,49) = -225.0/4096.0;
-      prolongation[6](55,50) = 675.0/4096.0;
-      prolongation[6](55,51) = 675.0/4096.0;
-      prolongation[6](55,52) = -25.0/4096.0;
-      prolongation[6](55,53) = 75.0/4096.0;
-      prolongation[6](55,54) = 75.0/4096.0;
-      prolongation[6](55,55) = -225.0/4096.0;
-      prolongation[6](55,56) = 225.0/4096.0;
-      prolongation[6](55,57) = 225.0/4096.0;
-      prolongation[6](55,58) = -675.0/4096.0;
-      prolongation[6](55,59) = -675.0/4096.0;
-      prolongation[6](55,60) = -675.0/4096.0;
-      prolongation[6](55,61) = -675.0/4096.0;
-      prolongation[6](55,62) = 2025.0/4096.0;
-      prolongation[6](55,63) = 2025.0/4096.0;
-      prolongation[6](56,63) = 1.0;
-      prolongation[6](57,47) = 5.0/16.0;
-      prolongation[6](57,55) = 1.0/16.0;
-      prolongation[6](57,62) = -5.0/16.0;
-      prolongation[6](57,63) = 15.0/16.0;
-      prolongation[6](58,35) = 1.0/16.0;
-      prolongation[6](58,39) = 5.0/16.0;
-      prolongation[6](58,61) = -5.0/16.0;
-      prolongation[6](58,63) = 15.0/16.0;
-      prolongation[6](59,11) = 5.0/256.0;
-      prolongation[6](59,15) = 1.0/256.0;
-      prolongation[6](59,19) = 25.0/256.0;
-      prolongation[6](59,23) = 5.0/256.0;
-      prolongation[6](59,34) = -5.0/256.0;
-      prolongation[6](59,35) = 15.0/256.0;
-      prolongation[6](59,38) = -25.0/256.0;
-      prolongation[6](59,39) = 75.0/256.0;
-      prolongation[6](59,46) = -25.0/256.0;
-      prolongation[6](59,47) = 75.0/256.0;
-      prolongation[6](59,54) = -5.0/256.0;
-      prolongation[6](59,55) = 15.0/256.0;
-      prolongation[6](59,60) = 25.0/256.0;
-      prolongation[6](59,61) = -75.0/256.0;
-      prolongation[6](59,62) = -75.0/256.0;
-      prolongation[6](59,63) = 225.0/256.0;
-      prolongation[6](60,43) = 1.0/16.0;
-      prolongation[6](60,51) = 5.0/16.0;
-      prolongation[6](60,59) = -5.0/16.0;
-      prolongation[6](60,63) = 15.0/16.0;
-      prolongation[6](61,25) = 1.0/256.0;
-      prolongation[6](61,27) = 5.0/256.0;
-      prolongation[6](61,29) = 25.0/256.0;
-      prolongation[6](61,31) = 5.0/256.0;
-      prolongation[6](61,42) = -5.0/256.0;
-      prolongation[6](61,43) = 15.0/256.0;
-      prolongation[6](61,45) = -25.0/256.0;
-      prolongation[6](61,47) = 75.0/256.0;
-      prolongation[6](61,50) = -25.0/256.0;
-      prolongation[6](61,51) = 75.0/256.0;
-      prolongation[6](61,53) = -5.0/256.0;
-      prolongation[6](61,55) = 15.0/256.0;
-      prolongation[6](61,58) = 25.0/256.0;
-      prolongation[6](61,59) = -75.0/256.0;
-      prolongation[6](61,62) = -75.0/256.0;
-      prolongation[6](61,63) = 225.0/256.0;
-      prolongation[6](62,9) = 1.0/256.0;
-      prolongation[6](62,13) = 5.0/256.0;
-      prolongation[6](62,17) = 5.0/256.0;
-      prolongation[6](62,21) = 25.0/256.0;
-      prolongation[6](62,33) = -5.0/256.0;
-      prolongation[6](62,35) = 15.0/256.0;
-      prolongation[6](62,37) = -25.0/256.0;
-      prolongation[6](62,39) = 75.0/256.0;
-      prolongation[6](62,41) = -5.0/256.0;
-      prolongation[6](62,43) = 15.0/256.0;
-      prolongation[6](62,49) = -25.0/256.0;
-      prolongation[6](62,51) = 75.0/256.0;
-      prolongation[6](62,57) = 25.0/256.0;
-      prolongation[6](62,59) = -75.0/256.0;
-      prolongation[6](62,61) = -75.0/256.0;
-      prolongation[6](62,63) = 225.0/256.0;
-      prolongation[6](63,0) = 1.0/4096.0;
-      prolongation[6](63,1) = 5.0/4096.0;
-      prolongation[6](63,2) = 25.0/4096.0;
-      prolongation[6](63,3) = 5.0/4096.0;
-      prolongation[6](63,4) = 5.0/4096.0;
-      prolongation[6](63,5) = 25.0/4096.0;
-      prolongation[6](63,6) = 125.0/4096.0;
-      prolongation[6](63,7) = 25.0/4096.0;
-      prolongation[6](63,8) = -5.0/4096.0;
-      prolongation[6](63,9) = 15.0/4096.0;
-      prolongation[6](63,10) = -25.0/4096.0;
-      prolongation[6](63,11) = 75.0/4096.0;
-      prolongation[6](63,12) = -25.0/4096.0;
-      prolongation[6](63,13) = 75.0/4096.0;
-      prolongation[6](63,14) = -5.0/4096.0;
-      prolongation[6](63,15) = 15.0/4096.0;
-      prolongation[6](63,16) = -25.0/4096.0;
-      prolongation[6](63,17) = 75.0/4096.0;
-      prolongation[6](63,18) = -125.0/4096.0;
-      prolongation[6](63,19) = 375.0/4096.0;
-      prolongation[6](63,20) = -125.0/4096.0;
-      prolongation[6](63,21) = 375.0/4096.0;
-      prolongation[6](63,22) = -25.0/4096.0;
-      prolongation[6](63,23) = 75.0/4096.0;
-      prolongation[6](63,24) = -5.0/4096.0;
-      prolongation[6](63,25) = 15.0/4096.0;
-      prolongation[6](63,26) = -25.0/4096.0;
-      prolongation[6](63,27) = 75.0/4096.0;
-      prolongation[6](63,28) = -125.0/4096.0;
-      prolongation[6](63,29) = 375.0/4096.0;
-      prolongation[6](63,30) = -25.0/4096.0;
-      prolongation[6](63,31) = 75.0/4096.0;
-      prolongation[6](63,32) = 25.0/4096.0;
-      prolongation[6](63,33) = -75.0/4096.0;
-      prolongation[6](63,34) = -75.0/4096.0;
-      prolongation[6](63,35) = 225.0/4096.0;
-      prolongation[6](63,36) = 125.0/4096.0;
-      prolongation[6](63,37) = -375.0/4096.0;
-      prolongation[6](63,38) = -375.0/4096.0;
-      prolongation[6](63,39) = 1125.0/4096.0;
-      prolongation[6](63,40) = 25.0/4096.0;
-      prolongation[6](63,41) = -75.0/4096.0;
-      prolongation[6](63,42) = -75.0/4096.0;
-      prolongation[6](63,43) = 225.0/4096.0;
-      prolongation[6](63,44) = 125.0/4096.0;
-      prolongation[6](63,45) = -375.0/4096.0;
-      prolongation[6](63,46) = -375.0/4096.0;
-      prolongation[6](63,47) = 1125.0/4096.0;
-      prolongation[6](63,48) = 125.0/4096.0;
-      prolongation[6](63,49) = -375.0/4096.0;
-      prolongation[6](63,50) = -375.0/4096.0;
-      prolongation[6](63,51) = 1125.0/4096.0;
-      prolongation[6](63,52) = 25.0/4096.0;
-      prolongation[6](63,53) = -75.0/4096.0;
-      prolongation[6](63,54) = -75.0/4096.0;
-      prolongation[6](63,55) = 225.0/4096.0;
-      prolongation[6](63,56) = -125.0/4096.0;
-      prolongation[6](63,57) = 375.0/4096.0;
-      prolongation[6](63,58) = 375.0/4096.0;
-      prolongation[6](63,59) = -1125.0/4096.0;
-      prolongation[6](63,60) = 375.0/4096.0;
-      prolongation[6](63,61) = -1125.0/4096.0;
-      prolongation[6](63,62) = -1125.0/4096.0;
-      prolongation[6](63,63) = 3375.0/4096.0;
-      prolongation[7](0,0) = 1.0/256.0;
-      prolongation[7](0,3) = 1.0/256.0;
-      prolongation[7](0,4) = 1.0/256.0;
-      prolongation[7](0,7) = 1.0/256.0;
-      prolongation[7](0,14) = -9.0/256.0;
-      prolongation[7](0,15) = -9.0/256.0;
-      prolongation[7](0,22) = -9.0/256.0;
-      prolongation[7](0,23) = -9.0/256.0;
-      prolongation[7](0,24) = -9.0/256.0;
-      prolongation[7](0,25) = -9.0/256.0;
-      prolongation[7](0,30) = -9.0/256.0;
-      prolongation[7](0,31) = -9.0/256.0;
-      prolongation[7](0,52) = 81.0/256.0;
-      prolongation[7](0,53) = 81.0/256.0;
-      prolongation[7](0,54) = 81.0/256.0;
-      prolongation[7](0,55) = 81.0/256.0;
-      prolongation[7](1,0) = -1.0/4096.0;
-      prolongation[7](1,1) = -1.0/4096.0;
-      prolongation[7](1,2) = -1.0/4096.0;
-      prolongation[7](1,3) = -1.0/4096.0;
-      prolongation[7](1,4) = -1.0/4096.0;
-      prolongation[7](1,5) = -1.0/4096.0;
-      prolongation[7](1,6) = -1.0/4096.0;
-      prolongation[7](1,7) = -1.0/4096.0;
-      prolongation[7](1,8) = 9.0/4096.0;
-      prolongation[7](1,9) = 9.0/4096.0;
-      prolongation[7](1,10) = 9.0/4096.0;
-      prolongation[7](1,11) = 9.0/4096.0;
-      prolongation[7](1,12) = 9.0/4096.0;
-      prolongation[7](1,13) = 9.0/4096.0;
-      prolongation[7](1,14) = 9.0/4096.0;
-      prolongation[7](1,15) = 9.0/4096.0;
-      prolongation[7](1,16) = 9.0/4096.0;
-      prolongation[7](1,17) = 9.0/4096.0;
-      prolongation[7](1,18) = 9.0/4096.0;
-      prolongation[7](1,19) = 9.0/4096.0;
-      prolongation[7](1,20) = 9.0/4096.0;
-      prolongation[7](1,21) = 9.0/4096.0;
-      prolongation[7](1,22) = 9.0/4096.0;
-      prolongation[7](1,23) = 9.0/4096.0;
-      prolongation[7](1,24) = 9.0/4096.0;
-      prolongation[7](1,25) = 9.0/4096.0;
-      prolongation[7](1,26) = 9.0/4096.0;
-      prolongation[7](1,27) = 9.0/4096.0;
-      prolongation[7](1,28) = 9.0/4096.0;
-      prolongation[7](1,29) = 9.0/4096.0;
-      prolongation[7](1,30) = 9.0/4096.0;
-      prolongation[7](1,31) = 9.0/4096.0;
-      prolongation[7](1,32) = -81.0/4096.0;
-      prolongation[7](1,33) = -81.0/4096.0;
-      prolongation[7](1,34) = -81.0/4096.0;
-      prolongation[7](1,35) = -81.0/4096.0;
-      prolongation[7](1,36) = -81.0/4096.0;
-      prolongation[7](1,37) = -81.0/4096.0;
-      prolongation[7](1,38) = -81.0/4096.0;
-      prolongation[7](1,39) = -81.0/4096.0;
-      prolongation[7](1,40) = -81.0/4096.0;
-      prolongation[7](1,41) = -81.0/4096.0;
-      prolongation[7](1,42) = -81.0/4096.0;
-      prolongation[7](1,43) = -81.0/4096.0;
-      prolongation[7](1,44) = -81.0/4096.0;
-      prolongation[7](1,45) = -81.0/4096.0;
-      prolongation[7](1,46) = -81.0/4096.0;
-      prolongation[7](1,47) = -81.0/4096.0;
-      prolongation[7](1,48) = -81.0/4096.0;
-      prolongation[7](1,49) = -81.0/4096.0;
-      prolongation[7](1,50) = -81.0/4096.0;
-      prolongation[7](1,51) = -81.0/4096.0;
-      prolongation[7](1,52) = -81.0/4096.0;
-      prolongation[7](1,53) = -81.0/4096.0;
-      prolongation[7](1,54) = -81.0/4096.0;
-      prolongation[7](1,55) = -81.0/4096.0;
-      prolongation[7](1,56) = 729.0/4096.0;
-      prolongation[7](1,57) = 729.0/4096.0;
-      prolongation[7](1,58) = 729.0/4096.0;
-      prolongation[7](1,59) = 729.0/4096.0;
-      prolongation[7](1,60) = 729.0/4096.0;
-      prolongation[7](1,61) = 729.0/4096.0;
-      prolongation[7](1,62) = 729.0/4096.0;
-      prolongation[7](1,63) = 729.0/4096.0;
-      prolongation[7](2,2) = 1.0/256.0;
-      prolongation[7](2,3) = 1.0/256.0;
-      prolongation[7](2,6) = 1.0/256.0;
-      prolongation[7](2,7) = 1.0/256.0;
-      prolongation[7](2,12) = -9.0/256.0;
-      prolongation[7](2,13) = -9.0/256.0;
-      prolongation[7](2,20) = -9.0/256.0;
-      prolongation[7](2,21) = -9.0/256.0;
-      prolongation[7](2,28) = -9.0/256.0;
-      prolongation[7](2,29) = -9.0/256.0;
-      prolongation[7](2,30) = -9.0/256.0;
-      prolongation[7](2,31) = -9.0/256.0;
-      prolongation[7](2,48) = 81.0/256.0;
-      prolongation[7](2,49) = 81.0/256.0;
-      prolongation[7](2,50) = 81.0/256.0;
-      prolongation[7](2,51) = 81.0/256.0;
-      prolongation[7](3,3) = -1.0/16.0;
-      prolongation[7](3,7) = -1.0/16.0;
-      prolongation[7](3,30) = 9.0/16.0;
-      prolongation[7](3,31) = 9.0/16.0;
-      prolongation[7](4,4) = -1.0/16.0;
-      prolongation[7](4,7) = -1.0/16.0;
-      prolongation[7](4,22) = 9.0/16.0;
-      prolongation[7](4,23) = 9.0/16.0;
-      prolongation[7](5,4) = 1.0/256.0;
-      prolongation[7](5,5) = 1.0/256.0;
-      prolongation[7](5,6) = 1.0/256.0;
-      prolongation[7](5,7) = 1.0/256.0;
-      prolongation[7](5,16) = -9.0/256.0;
-      prolongation[7](5,17) = -9.0/256.0;
-      prolongation[7](5,18) = -9.0/256.0;
-      prolongation[7](5,19) = -9.0/256.0;
-      prolongation[7](5,20) = -9.0/256.0;
-      prolongation[7](5,21) = -9.0/256.0;
-      prolongation[7](5,22) = -9.0/256.0;
-      prolongation[7](5,23) = -9.0/256.0;
-      prolongation[7](5,36) = 81.0/256.0;
-      prolongation[7](5,37) = 81.0/256.0;
-      prolongation[7](5,38) = 81.0/256.0;
-      prolongation[7](5,39) = 81.0/256.0;
-      prolongation[7](6,6) = -1.0/16.0;
-      prolongation[7](6,7) = -1.0/16.0;
-      prolongation[7](6,20) = 9.0/16.0;
-      prolongation[7](6,21) = 9.0/16.0;
-      prolongation[7](7,7) = 1.0;
-      prolongation[7](8,0) = 5.0/4096.0;
-      prolongation[7](8,1) = 1.0/4096.0;
-      prolongation[7](8,2) = 1.0/4096.0;
-      prolongation[7](8,3) = 5.0/4096.0;
-      prolongation[7](8,4) = 5.0/4096.0;
-      prolongation[7](8,5) = 1.0/4096.0;
-      prolongation[7](8,6) = 1.0/4096.0;
-      prolongation[7](8,7) = 5.0/4096.0;
-      prolongation[7](8,8) = 15.0/4096.0;
-      prolongation[7](8,9) = -5.0/4096.0;
-      prolongation[7](8,10) = -9.0/4096.0;
-      prolongation[7](8,11) = -9.0/4096.0;
-      prolongation[7](8,12) = 15.0/4096.0;
-      prolongation[7](8,13) = -5.0/4096.0;
-      prolongation[7](8,14) = -45.0/4096.0;
-      prolongation[7](8,15) = -45.0/4096.0;
-      prolongation[7](8,16) = 15.0/4096.0;
-      prolongation[7](8,17) = -5.0/4096.0;
-      prolongation[7](8,18) = -9.0/4096.0;
-      prolongation[7](8,19) = -9.0/4096.0;
-      prolongation[7](8,20) = 15.0/4096.0;
-      prolongation[7](8,21) = -5.0/4096.0;
-      prolongation[7](8,22) = -45.0/4096.0;
-      prolongation[7](8,23) = -45.0/4096.0;
-      prolongation[7](8,24) = -45.0/4096.0;
-      prolongation[7](8,25) = -45.0/4096.0;
-      prolongation[7](8,26) = -9.0/4096.0;
-      prolongation[7](8,27) = -9.0/4096.0;
-      prolongation[7](8,28) = -9.0/4096.0;
-      prolongation[7](8,29) = -9.0/4096.0;
-      prolongation[7](8,30) = -45.0/4096.0;
-      prolongation[7](8,31) = -45.0/4096.0;
-      prolongation[7](8,32) = -135.0/4096.0;
-      prolongation[7](8,33) = 45.0/4096.0;
-      prolongation[7](8,34) = -135.0/4096.0;
-      prolongation[7](8,35) = 45.0/4096.0;
-      prolongation[7](8,36) = -135.0/4096.0;
-      prolongation[7](8,37) = 45.0/4096.0;
-      prolongation[7](8,38) = -135.0/4096.0;
-      prolongation[7](8,39) = 45.0/4096.0;
-      prolongation[7](8,40) = -135.0/4096.0;
-      prolongation[7](8,41) = 45.0/4096.0;
-      prolongation[7](8,42) = -135.0/4096.0;
-      prolongation[7](8,43) = 45.0/4096.0;
-      prolongation[7](8,44) = 81.0/4096.0;
-      prolongation[7](8,45) = 81.0/4096.0;
-      prolongation[7](8,46) = 81.0/4096.0;
-      prolongation[7](8,47) = 81.0/4096.0;
-      prolongation[7](8,48) = -135.0/4096.0;
-      prolongation[7](8,49) = 45.0/4096.0;
-      prolongation[7](8,50) = -135.0/4096.0;
-      prolongation[7](8,51) = 45.0/4096.0;
-      prolongation[7](8,52) = 405.0/4096.0;
-      prolongation[7](8,53) = 405.0/4096.0;
-      prolongation[7](8,54) = 405.0/4096.0;
-      prolongation[7](8,55) = 405.0/4096.0;
-      prolongation[7](8,56) = 1215.0/4096.0;
-      prolongation[7](8,57) = -405.0/4096.0;
-      prolongation[7](8,58) = 1215.0/4096.0;
-      prolongation[7](8,59) = -405.0/4096.0;
-      prolongation[7](8,60) = 1215.0/4096.0;
-      prolongation[7](8,61) = -405.0/4096.0;
-      prolongation[7](8,62) = 1215.0/4096.0;
-      prolongation[7](8,63) = -405.0/4096.0;
-      prolongation[7](9,8) = 1.0/256.0;
-      prolongation[7](9,12) = 1.0/256.0;
-      prolongation[7](9,16) = 1.0/256.0;
-      prolongation[7](9,20) = 1.0/256.0;
-      prolongation[7](9,32) = -9.0/256.0;
-      prolongation[7](9,34) = -9.0/256.0;
-      prolongation[7](9,36) = -9.0/256.0;
-      prolongation[7](9,38) = -9.0/256.0;
-      prolongation[7](9,40) = -9.0/256.0;
-      prolongation[7](9,42) = -9.0/256.0;
-      prolongation[7](9,48) = -9.0/256.0;
-      prolongation[7](9,50) = -9.0/256.0;
-      prolongation[7](9,56) = 81.0/256.0;
-      prolongation[7](9,58) = 81.0/256.0;
-      prolongation[7](9,60) = 81.0/256.0;
-      prolongation[7](9,62) = 81.0/256.0;
-      prolongation[7](10,11) = 1.0/256.0;
-      prolongation[7](10,15) = 1.0/256.0;
-      prolongation[7](10,19) = 1.0/256.0;
-      prolongation[7](10,23) = 1.0/256.0;
-      prolongation[7](10,34) = -9.0/256.0;
-      prolongation[7](10,35) = -9.0/256.0;
-      prolongation[7](10,38) = -9.0/256.0;
-      prolongation[7](10,39) = -9.0/256.0;
-      prolongation[7](10,46) = -9.0/256.0;
-      prolongation[7](10,47) = -9.0/256.0;
-      prolongation[7](10,54) = -9.0/256.0;
-      prolongation[7](10,55) = -9.0/256.0;
-      prolongation[7](10,60) = 81.0/256.0;
-      prolongation[7](10,61) = 81.0/256.0;
-      prolongation[7](10,62) = 81.0/256.0;
-      prolongation[7](10,63) = 81.0/256.0;
-      prolongation[7](11,0) = 1.0/4096.0;
-      prolongation[7](11,1) = 1.0/4096.0;
-      prolongation[7](11,2) = 5.0/4096.0;
-      prolongation[7](11,3) = 5.0/4096.0;
-      prolongation[7](11,4) = 1.0/4096.0;
-      prolongation[7](11,5) = 1.0/4096.0;
-      prolongation[7](11,6) = 5.0/4096.0;
-      prolongation[7](11,7) = 5.0/4096.0;
-      prolongation[7](11,8) = -9.0/4096.0;
-      prolongation[7](11,9) = -9.0/4096.0;
-      prolongation[7](11,10) = -5.0/4096.0;
-      prolongation[7](11,11) = 15.0/4096.0;
-      prolongation[7](11,12) = -45.0/4096.0;
-      prolongation[7](11,13) = -45.0/4096.0;
-      prolongation[7](11,14) = -5.0/4096.0;
-      prolongation[7](11,15) = 15.0/4096.0;
-      prolongation[7](11,16) = -9.0/4096.0;
-      prolongation[7](11,17) = -9.0/4096.0;
-      prolongation[7](11,18) = -5.0/4096.0;
-      prolongation[7](11,19) = 15.0/4096.0;
-      prolongation[7](11,20) = -45.0/4096.0;
-      prolongation[7](11,21) = -45.0/4096.0;
-      prolongation[7](11,22) = -5.0/4096.0;
-      prolongation[7](11,23) = 15.0/4096.0;
-      prolongation[7](11,24) = -9.0/4096.0;
-      prolongation[7](11,25) = -9.0/4096.0;
-      prolongation[7](11,26) = -9.0/4096.0;
-      prolongation[7](11,27) = -9.0/4096.0;
-      prolongation[7](11,28) = -45.0/4096.0;
-      prolongation[7](11,29) = -45.0/4096.0;
-      prolongation[7](11,30) = -45.0/4096.0;
-      prolongation[7](11,31) = -45.0/4096.0;
-      prolongation[7](11,32) = 45.0/4096.0;
-      prolongation[7](11,33) = 45.0/4096.0;
-      prolongation[7](11,34) = -135.0/4096.0;
-      prolongation[7](11,35) = -135.0/4096.0;
-      prolongation[7](11,36) = 45.0/4096.0;
-      prolongation[7](11,37) = 45.0/4096.0;
-      prolongation[7](11,38) = -135.0/4096.0;
-      prolongation[7](11,39) = -135.0/4096.0;
-      prolongation[7](11,40) = 81.0/4096.0;
-      prolongation[7](11,41) = 81.0/4096.0;
-      prolongation[7](11,42) = 81.0/4096.0;
-      prolongation[7](11,43) = 81.0/4096.0;
-      prolongation[7](11,44) = 45.0/4096.0;
-      prolongation[7](11,45) = 45.0/4096.0;
-      prolongation[7](11,46) = -135.0/4096.0;
-      prolongation[7](11,47) = -135.0/4096.0;
-      prolongation[7](11,48) = 405.0/4096.0;
-      prolongation[7](11,49) = 405.0/4096.0;
-      prolongation[7](11,50) = 405.0/4096.0;
-      prolongation[7](11,51) = 405.0/4096.0;
-      prolongation[7](11,52) = 45.0/4096.0;
-      prolongation[7](11,53) = 45.0/4096.0;
-      prolongation[7](11,54) = -135.0/4096.0;
-      prolongation[7](11,55) = -135.0/4096.0;
-      prolongation[7](11,56) = -405.0/4096.0;
-      prolongation[7](11,57) = -405.0/4096.0;
-      prolongation[7](11,58) = -405.0/4096.0;
-      prolongation[7](11,59) = -405.0/4096.0;
-      prolongation[7](11,60) = 1215.0/4096.0;
-      prolongation[7](11,61) = 1215.0/4096.0;
-      prolongation[7](11,62) = 1215.0/4096.0;
-      prolongation[7](11,63) = 1215.0/4096.0;
-      prolongation[7](12,2) = -1.0/256.0;
-      prolongation[7](12,3) = -5.0/256.0;
-      prolongation[7](12,6) = -1.0/256.0;
-      prolongation[7](12,7) = -5.0/256.0;
-      prolongation[7](12,12) = -15.0/256.0;
-      prolongation[7](12,13) = 5.0/256.0;
-      prolongation[7](12,20) = -15.0/256.0;
-      prolongation[7](12,21) = 5.0/256.0;
-      prolongation[7](12,28) = 9.0/256.0;
-      prolongation[7](12,29) = 9.0/256.0;
-      prolongation[7](12,30) = 45.0/256.0;
-      prolongation[7](12,31) = 45.0/256.0;
-      prolongation[7](12,48) = 135.0/256.0;
-      prolongation[7](12,49) = -45.0/256.0;
-      prolongation[7](12,50) = 135.0/256.0;
-      prolongation[7](12,51) = -45.0/256.0;
-      prolongation[7](13,12) = -1.0/16.0;
-      prolongation[7](13,20) = -1.0/16.0;
-      prolongation[7](13,48) = 9.0/16.0;
-      prolongation[7](13,50) = 9.0/16.0;
-      prolongation[7](14,15) = -1.0/16.0;
-      prolongation[7](14,23) = -1.0/16.0;
-      prolongation[7](14,54) = 9.0/16.0;
-      prolongation[7](14,55) = 9.0/16.0;
-      prolongation[7](15,0) = -1.0/256.0;
-      prolongation[7](15,3) = -5.0/256.0;
-      prolongation[7](15,4) = -1.0/256.0;
-      prolongation[7](15,7) = -5.0/256.0;
-      prolongation[7](15,14) = 5.0/256.0;
-      prolongation[7](15,15) = -15.0/256.0;
-      prolongation[7](15,22) = 5.0/256.0;
-      prolongation[7](15,23) = -15.0/256.0;
-      prolongation[7](15,24) = 9.0/256.0;
-      prolongation[7](15,25) = 9.0/256.0;
-      prolongation[7](15,30) = 45.0/256.0;
-      prolongation[7](15,31) = 45.0/256.0;
-      prolongation[7](15,52) = -45.0/256.0;
-      prolongation[7](15,53) = -45.0/256.0;
-      prolongation[7](15,54) = 135.0/256.0;
-      prolongation[7](15,55) = 135.0/256.0;
-      prolongation[7](16,4) = -5.0/256.0;
-      prolongation[7](16,5) = -1.0/256.0;
-      prolongation[7](16,6) = -1.0/256.0;
-      prolongation[7](16,7) = -5.0/256.0;
-      prolongation[7](16,16) = -15.0/256.0;
-      prolongation[7](16,17) = 5.0/256.0;
-      prolongation[7](16,18) = 9.0/256.0;
-      prolongation[7](16,19) = 9.0/256.0;
-      prolongation[7](16,20) = -15.0/256.0;
-      prolongation[7](16,21) = 5.0/256.0;
-      prolongation[7](16,22) = 45.0/256.0;
-      prolongation[7](16,23) = 45.0/256.0;
-      prolongation[7](16,36) = 135.0/256.0;
-      prolongation[7](16,37) = -45.0/256.0;
-      prolongation[7](16,38) = 135.0/256.0;
-      prolongation[7](16,39) = -45.0/256.0;
-      prolongation[7](17,16) = -1.0/16.0;
-      prolongation[7](17,20) = -1.0/16.0;
-      prolongation[7](17,36) = 9.0/16.0;
-      prolongation[7](17,38) = 9.0/16.0;
-      prolongation[7](18,19) = -1.0/16.0;
-      prolongation[7](18,23) = -1.0/16.0;
-      prolongation[7](18,38) = 9.0/16.0;
-      prolongation[7](18,39) = 9.0/16.0;
-      prolongation[7](19,4) = -1.0/256.0;
-      prolongation[7](19,5) = -1.0/256.0;
-      prolongation[7](19,6) = -5.0/256.0;
-      prolongation[7](19,7) = -5.0/256.0;
-      prolongation[7](19,16) = 9.0/256.0;
-      prolongation[7](19,17) = 9.0/256.0;
-      prolongation[7](19,18) = 5.0/256.0;
-      prolongation[7](19,19) = -15.0/256.0;
-      prolongation[7](19,20) = 45.0/256.0;
-      prolongation[7](19,21) = 45.0/256.0;
-      prolongation[7](19,22) = 5.0/256.0;
-      prolongation[7](19,23) = -15.0/256.0;
-      prolongation[7](19,36) = -45.0/256.0;
-      prolongation[7](19,37) = -45.0/256.0;
-      prolongation[7](19,38) = 135.0/256.0;
-      prolongation[7](19,39) = 135.0/256.0;
-      prolongation[7](20,6) = 1.0/16.0;
-      prolongation[7](20,7) = 5.0/16.0;
-      prolongation[7](20,20) = 15.0/16.0;
-      prolongation[7](20,21) = -5.0/16.0;
-      prolongation[7](21,20) = 1.0;
-      prolongation[7](22,23) = 1.0;
-      prolongation[7](23,4) = 1.0/16.0;
-      prolongation[7](23,7) = 5.0/16.0;
-      prolongation[7](23,22) = -5.0/16.0;
-      prolongation[7](23,23) = 15.0/16.0;
-      prolongation[7](24,25) = -1.0/16.0;
-      prolongation[7](24,31) = -1.0/16.0;
-      prolongation[7](24,53) = 9.0/16.0;
-      prolongation[7](24,55) = 9.0/16.0;
-      prolongation[7](25,0) = -1.0/256.0;
-      prolongation[7](25,3) = -1.0/256.0;
-      prolongation[7](25,4) = -5.0/256.0;
-      prolongation[7](25,7) = -5.0/256.0;
-      prolongation[7](25,14) = 9.0/256.0;
-      prolongation[7](25,15) = 9.0/256.0;
-      prolongation[7](25,22) = 45.0/256.0;
-      prolongation[7](25,23) = 45.0/256.0;
-      prolongation[7](25,24) = 5.0/256.0;
-      prolongation[7](25,25) = -15.0/256.0;
-      prolongation[7](25,30) = 5.0/256.0;
-      prolongation[7](25,31) = -15.0/256.0;
-      prolongation[7](25,52) = -45.0/256.0;
-      prolongation[7](25,53) = 135.0/256.0;
-      prolongation[7](25,54) = -45.0/256.0;
-      prolongation[7](25,55) = 135.0/256.0;
-      prolongation[7](26,25) = 1.0/256.0;
-      prolongation[7](26,27) = 1.0/256.0;
-      prolongation[7](26,29) = 1.0/256.0;
-      prolongation[7](26,31) = 1.0/256.0;
-      prolongation[7](26,42) = -9.0/256.0;
-      prolongation[7](26,43) = -9.0/256.0;
-      prolongation[7](26,45) = -9.0/256.0;
-      prolongation[7](26,47) = -9.0/256.0;
-      prolongation[7](26,50) = -9.0/256.0;
-      prolongation[7](26,51) = -9.0/256.0;
-      prolongation[7](26,53) = -9.0/256.0;
-      prolongation[7](26,55) = -9.0/256.0;
-      prolongation[7](26,58) = 81.0/256.0;
-      prolongation[7](26,59) = 81.0/256.0;
-      prolongation[7](26,62) = 81.0/256.0;
-      prolongation[7](26,63) = 81.0/256.0;
-      prolongation[7](27,0) = 1.0/4096.0;
-      prolongation[7](27,1) = 1.0/4096.0;
-      prolongation[7](27,2) = 1.0/4096.0;
-      prolongation[7](27,3) = 1.0/4096.0;
-      prolongation[7](27,4) = 5.0/4096.0;
-      prolongation[7](27,5) = 5.0/4096.0;
-      prolongation[7](27,6) = 5.0/4096.0;
-      prolongation[7](27,7) = 5.0/4096.0;
-      prolongation[7](27,8) = -9.0/4096.0;
-      prolongation[7](27,9) = -9.0/4096.0;
-      prolongation[7](27,10) = -9.0/4096.0;
-      prolongation[7](27,11) = -9.0/4096.0;
-      prolongation[7](27,12) = -9.0/4096.0;
-      prolongation[7](27,13) = -9.0/4096.0;
-      prolongation[7](27,14) = -9.0/4096.0;
-      prolongation[7](27,15) = -9.0/4096.0;
-      prolongation[7](27,16) = -45.0/4096.0;
-      prolongation[7](27,17) = -45.0/4096.0;
-      prolongation[7](27,18) = -45.0/4096.0;
-      prolongation[7](27,19) = -45.0/4096.0;
-      prolongation[7](27,20) = -45.0/4096.0;
-      prolongation[7](27,21) = -45.0/4096.0;
-      prolongation[7](27,22) = -45.0/4096.0;
-      prolongation[7](27,23) = -45.0/4096.0;
-      prolongation[7](27,24) = -5.0/4096.0;
-      prolongation[7](27,25) = 15.0/4096.0;
-      prolongation[7](27,26) = -5.0/4096.0;
-      prolongation[7](27,27) = 15.0/4096.0;
-      prolongation[7](27,28) = -5.0/4096.0;
-      prolongation[7](27,29) = 15.0/4096.0;
-      prolongation[7](27,30) = -5.0/4096.0;
-      prolongation[7](27,31) = 15.0/4096.0;
-      prolongation[7](27,32) = 81.0/4096.0;
-      prolongation[7](27,33) = 81.0/4096.0;
-      prolongation[7](27,34) = 81.0/4096.0;
-      prolongation[7](27,35) = 81.0/4096.0;
-      prolongation[7](27,36) = 405.0/4096.0;
-      prolongation[7](27,37) = 405.0/4096.0;
-      prolongation[7](27,38) = 405.0/4096.0;
-      prolongation[7](27,39) = 405.0/4096.0;
-      prolongation[7](27,40) = 45.0/4096.0;
-      prolongation[7](27,41) = 45.0/4096.0;
-      prolongation[7](27,42) = -135.0/4096.0;
-      prolongation[7](27,43) = -135.0/4096.0;
-      prolongation[7](27,44) = 45.0/4096.0;
-      prolongation[7](27,45) = -135.0/4096.0;
-      prolongation[7](27,46) = 45.0/4096.0;
-      prolongation[7](27,47) = -135.0/4096.0;
-      prolongation[7](27,48) = 45.0/4096.0;
-      prolongation[7](27,49) = 45.0/4096.0;
-      prolongation[7](27,50) = -135.0/4096.0;
-      prolongation[7](27,51) = -135.0/4096.0;
-      prolongation[7](27,52) = 45.0/4096.0;
-      prolongation[7](27,53) = -135.0/4096.0;
-      prolongation[7](27,54) = 45.0/4096.0;
-      prolongation[7](27,55) = -135.0/4096.0;
-      prolongation[7](27,56) = -405.0/4096.0;
-      prolongation[7](27,57) = -405.0/4096.0;
-      prolongation[7](27,58) = 1215.0/4096.0;
-      prolongation[7](27,59) = 1215.0/4096.0;
-      prolongation[7](27,60) = -405.0/4096.0;
-      prolongation[7](27,61) = -405.0/4096.0;
-      prolongation[7](27,62) = 1215.0/4096.0;
-      prolongation[7](27,63) = 1215.0/4096.0;
-      prolongation[7](28,29) = -1.0/16.0;
-      prolongation[7](28,31) = -1.0/16.0;
-      prolongation[7](28,50) = 9.0/16.0;
-      prolongation[7](28,51) = 9.0/16.0;
-      prolongation[7](29,2) = -1.0/256.0;
-      prolongation[7](29,3) = -1.0/256.0;
-      prolongation[7](29,6) = -5.0/256.0;
-      prolongation[7](29,7) = -5.0/256.0;
-      prolongation[7](29,12) = 9.0/256.0;
-      prolongation[7](29,13) = 9.0/256.0;
-      prolongation[7](29,20) = 45.0/256.0;
-      prolongation[7](29,21) = 45.0/256.0;
-      prolongation[7](29,28) = 5.0/256.0;
-      prolongation[7](29,29) = -15.0/256.0;
-      prolongation[7](29,30) = 5.0/256.0;
-      prolongation[7](29,31) = -15.0/256.0;
-      prolongation[7](29,48) = -45.0/256.0;
-      prolongation[7](29,49) = -45.0/256.0;
-      prolongation[7](29,50) = 135.0/256.0;
-      prolongation[7](29,51) = 135.0/256.0;
-      prolongation[7](30,31) = 1.0;
-      prolongation[7](31,3) = 1.0/16.0;
-      prolongation[7](31,7) = 5.0/16.0;
-      prolongation[7](31,30) = -5.0/16.0;
-      prolongation[7](31,31) = 15.0/16.0;
-      prolongation[7](32,11) = -1.0/256.0;
-      prolongation[7](32,15) = -5.0/256.0;
-      prolongation[7](32,19) = -1.0/256.0;
-      prolongation[7](32,23) = -5.0/256.0;
-      prolongation[7](32,34) = -15.0/256.0;
-      prolongation[7](32,35) = 5.0/256.0;
-      prolongation[7](32,38) = -15.0/256.0;
-      prolongation[7](32,39) = 5.0/256.0;
-      prolongation[7](32,46) = 9.0/256.0;
-      prolongation[7](32,47) = 9.0/256.0;
-      prolongation[7](32,54) = 45.0/256.0;
-      prolongation[7](32,55) = 45.0/256.0;
-      prolongation[7](32,60) = 135.0/256.0;
-      prolongation[7](32,61) = -45.0/256.0;
-      prolongation[7](32,62) = 135.0/256.0;
-      prolongation[7](32,63) = -45.0/256.0;
-      prolongation[7](33,34) = -1.0/16.0;
-      prolongation[7](33,38) = -1.0/16.0;
-      prolongation[7](33,60) = 9.0/16.0;
-      prolongation[7](33,62) = 9.0/16.0;
-      prolongation[7](34,0) = -5.0/4096.0;
-      prolongation[7](34,1) = -1.0/4096.0;
-      prolongation[7](34,2) = -5.0/4096.0;
-      prolongation[7](34,3) = -25.0/4096.0;
-      prolongation[7](34,4) = -5.0/4096.0;
-      prolongation[7](34,5) = -1.0/4096.0;
-      prolongation[7](34,6) = -5.0/4096.0;
-      prolongation[7](34,7) = -25.0/4096.0;
-      prolongation[7](34,8) = -15.0/4096.0;
-      prolongation[7](34,9) = 5.0/4096.0;
-      prolongation[7](34,10) = 5.0/4096.0;
-      prolongation[7](34,11) = -15.0/4096.0;
-      prolongation[7](34,12) = -75.0/4096.0;
-      prolongation[7](34,13) = 25.0/4096.0;
-      prolongation[7](34,14) = 25.0/4096.0;
-      prolongation[7](34,15) = -75.0/4096.0;
-      prolongation[7](34,16) = -15.0/4096.0;
-      prolongation[7](34,17) = 5.0/4096.0;
-      prolongation[7](34,18) = 5.0/4096.0;
-      prolongation[7](34,19) = -15.0/4096.0;
-      prolongation[7](34,20) = -75.0/4096.0;
-      prolongation[7](34,21) = 25.0/4096.0;
-      prolongation[7](34,22) = 25.0/4096.0;
-      prolongation[7](34,23) = -75.0/4096.0;
-      prolongation[7](34,24) = 45.0/4096.0;
-      prolongation[7](34,25) = 45.0/4096.0;
-      prolongation[7](34,26) = 9.0/4096.0;
-      prolongation[7](34,27) = 9.0/4096.0;
-      prolongation[7](34,28) = 45.0/4096.0;
-      prolongation[7](34,29) = 45.0/4096.0;
-      prolongation[7](34,30) = 225.0/4096.0;
-      prolongation[7](34,31) = 225.0/4096.0;
-      prolongation[7](34,32) = 75.0/4096.0;
-      prolongation[7](34,33) = -25.0/4096.0;
-      prolongation[7](34,34) = -225.0/4096.0;
-      prolongation[7](34,35) = 75.0/4096.0;
-      prolongation[7](34,36) = 75.0/4096.0;
-      prolongation[7](34,37) = -25.0/4096.0;
-      prolongation[7](34,38) = -225.0/4096.0;
-      prolongation[7](34,39) = 75.0/4096.0;
-      prolongation[7](34,40) = 135.0/4096.0;
-      prolongation[7](34,41) = -45.0/4096.0;
-      prolongation[7](34,42) = 135.0/4096.0;
-      prolongation[7](34,43) = -45.0/4096.0;
-      prolongation[7](34,44) = -45.0/4096.0;
-      prolongation[7](34,45) = -45.0/4096.0;
-      prolongation[7](34,46) = 135.0/4096.0;
-      prolongation[7](34,47) = 135.0/4096.0;
-      prolongation[7](34,48) = 675.0/4096.0;
-      prolongation[7](34,49) = -225.0/4096.0;
-      prolongation[7](34,50) = 675.0/4096.0;
-      prolongation[7](34,51) = -225.0/4096.0;
-      prolongation[7](34,52) = -225.0/4096.0;
-      prolongation[7](34,53) = -225.0/4096.0;
-      prolongation[7](34,54) = 675.0/4096.0;
-      prolongation[7](34,55) = 675.0/4096.0;
-      prolongation[7](34,56) = -675.0/4096.0;
-      prolongation[7](34,57) = 225.0/4096.0;
-      prolongation[7](34,58) = -675.0/4096.0;
-      prolongation[7](34,59) = 225.0/4096.0;
-      prolongation[7](34,60) = 2025.0/4096.0;
-      prolongation[7](34,61) = -675.0/4096.0;
-      prolongation[7](34,62) = 2025.0/4096.0;
-      prolongation[7](34,63) = -675.0/4096.0;
-      prolongation[7](35,8) = -1.0/256.0;
-      prolongation[7](35,12) = -5.0/256.0;
-      prolongation[7](35,16) = -1.0/256.0;
-      prolongation[7](35,20) = -5.0/256.0;
-      prolongation[7](35,32) = 5.0/256.0;
-      prolongation[7](35,34) = -15.0/256.0;
-      prolongation[7](35,36) = 5.0/256.0;
-      prolongation[7](35,38) = -15.0/256.0;
-      prolongation[7](35,40) = 9.0/256.0;
-      prolongation[7](35,42) = 9.0/256.0;
-      prolongation[7](35,48) = 45.0/256.0;
-      prolongation[7](35,50) = 45.0/256.0;
-      prolongation[7](35,56) = -45.0/256.0;
-      prolongation[7](35,58) = -45.0/256.0;
-      prolongation[7](35,60) = 135.0/256.0;
-      prolongation[7](35,62) = 135.0/256.0;
-      prolongation[7](36,19) = 1.0/16.0;
-      prolongation[7](36,23) = 5.0/16.0;
-      prolongation[7](36,38) = 15.0/16.0;
-      prolongation[7](36,39) = -5.0/16.0;
-      prolongation[7](37,38) = 1.0;
-      prolongation[7](38,4) = 5.0/256.0;
-      prolongation[7](38,5) = 1.0/256.0;
-      prolongation[7](38,6) = 5.0/256.0;
-      prolongation[7](38,7) = 25.0/256.0;
-      prolongation[7](38,16) = 15.0/256.0;
-      prolongation[7](38,17) = -5.0/256.0;
-      prolongation[7](38,18) = -5.0/256.0;
-      prolongation[7](38,19) = 15.0/256.0;
-      prolongation[7](38,20) = 75.0/256.0;
-      prolongation[7](38,21) = -25.0/256.0;
-      prolongation[7](38,22) = -25.0/256.0;
-      prolongation[7](38,23) = 75.0/256.0;
-      prolongation[7](38,36) = -75.0/256.0;
-      prolongation[7](38,37) = 25.0/256.0;
-      prolongation[7](38,38) = 225.0/256.0;
-      prolongation[7](38,39) = -75.0/256.0;
-      prolongation[7](39,16) = 1.0/16.0;
-      prolongation[7](39,20) = 5.0/16.0;
-      prolongation[7](39,36) = -5.0/16.0;
-      prolongation[7](39,38) = 15.0/16.0;
-      prolongation[7](40,25) = -5.0/256.0;
-      prolongation[7](40,27) = -1.0/256.0;
-      prolongation[7](40,29) = -1.0/256.0;
-      prolongation[7](40,31) = -5.0/256.0;
-      prolongation[7](40,42) = -15.0/256.0;
-      prolongation[7](40,43) = 5.0/256.0;
-      prolongation[7](40,45) = 9.0/256.0;
-      prolongation[7](40,47) = 9.0/256.0;
-      prolongation[7](40,50) = -15.0/256.0;
-      prolongation[7](40,51) = 5.0/256.0;
-      prolongation[7](40,53) = 45.0/256.0;
-      prolongation[7](40,55) = 45.0/256.0;
-      prolongation[7](40,58) = 135.0/256.0;
-      prolongation[7](40,59) = -45.0/256.0;
-      prolongation[7](40,62) = 135.0/256.0;
-      prolongation[7](40,63) = -45.0/256.0;
-      prolongation[7](41,42) = -1.0/16.0;
-      prolongation[7](41,50) = -1.0/16.0;
-      prolongation[7](41,58) = 9.0/16.0;
-      prolongation[7](41,62) = 9.0/16.0;
-      prolongation[7](42,0) = -5.0/4096.0;
-      prolongation[7](42,1) = -1.0/4096.0;
-      prolongation[7](42,2) = -1.0/4096.0;
-      prolongation[7](42,3) = -5.0/4096.0;
-      prolongation[7](42,4) = -25.0/4096.0;
-      prolongation[7](42,5) = -5.0/4096.0;
-      prolongation[7](42,6) = -5.0/4096.0;
-      prolongation[7](42,7) = -25.0/4096.0;
-      prolongation[7](42,8) = -15.0/4096.0;
-      prolongation[7](42,9) = 5.0/4096.0;
-      prolongation[7](42,10) = 9.0/4096.0;
-      prolongation[7](42,11) = 9.0/4096.0;
-      prolongation[7](42,12) = -15.0/4096.0;
-      prolongation[7](42,13) = 5.0/4096.0;
-      prolongation[7](42,14) = 45.0/4096.0;
-      prolongation[7](42,15) = 45.0/4096.0;
-      prolongation[7](42,16) = -75.0/4096.0;
-      prolongation[7](42,17) = 25.0/4096.0;
-      prolongation[7](42,18) = 45.0/4096.0;
-      prolongation[7](42,19) = 45.0/4096.0;
-      prolongation[7](42,20) = -75.0/4096.0;
-      prolongation[7](42,21) = 25.0/4096.0;
-      prolongation[7](42,22) = 225.0/4096.0;
-      prolongation[7](42,23) = 225.0/4096.0;
-      prolongation[7](42,24) = 25.0/4096.0;
-      prolongation[7](42,25) = -75.0/4096.0;
-      prolongation[7](42,26) = 5.0/4096.0;
-      prolongation[7](42,27) = -15.0/4096.0;
-      prolongation[7](42,28) = 5.0/4096.0;
-      prolongation[7](42,29) = -15.0/4096.0;
-      prolongation[7](42,30) = 25.0/4096.0;
-      prolongation[7](42,31) = -75.0/4096.0;
-      prolongation[7](42,32) = 135.0/4096.0;
-      prolongation[7](42,33) = -45.0/4096.0;
-      prolongation[7](42,34) = 135.0/4096.0;
-      prolongation[7](42,35) = -45.0/4096.0;
-      prolongation[7](42,36) = 675.0/4096.0;
-      prolongation[7](42,37) = -225.0/4096.0;
-      prolongation[7](42,38) = 675.0/4096.0;
-      prolongation[7](42,39) = -225.0/4096.0;
-      prolongation[7](42,40) = 75.0/4096.0;
-      prolongation[7](42,41) = -25.0/4096.0;
-      prolongation[7](42,42) = -225.0/4096.0;
-      prolongation[7](42,43) = 75.0/4096.0;
-      prolongation[7](42,44) = -45.0/4096.0;
-      prolongation[7](42,45) = 135.0/4096.0;
-      prolongation[7](42,46) = -45.0/4096.0;
-      prolongation[7](42,47) = 135.0/4096.0;
-      prolongation[7](42,48) = 75.0/4096.0;
-      prolongation[7](42,49) = -25.0/4096.0;
-      prolongation[7](42,50) = -225.0/4096.0;
-      prolongation[7](42,51) = 75.0/4096.0;
-      prolongation[7](42,52) = -225.0/4096.0;
-      prolongation[7](42,53) = 675.0/4096.0;
-      prolongation[7](42,54) = -225.0/4096.0;
-      prolongation[7](42,55) = 675.0/4096.0;
-      prolongation[7](42,56) = -675.0/4096.0;
-      prolongation[7](42,57) = 225.0/4096.0;
-      prolongation[7](42,58) = 2025.0/4096.0;
-      prolongation[7](42,59) = -675.0/4096.0;
-      prolongation[7](42,60) = -675.0/4096.0;
-      prolongation[7](42,61) = 225.0/4096.0;
-      prolongation[7](42,62) = 2025.0/4096.0;
-      prolongation[7](42,63) = -675.0/4096.0;
-      prolongation[7](43,8) = -1.0/256.0;
-      prolongation[7](43,12) = -1.0/256.0;
-      prolongation[7](43,16) = -5.0/256.0;
-      prolongation[7](43,20) = -5.0/256.0;
-      prolongation[7](43,32) = 9.0/256.0;
-      prolongation[7](43,34) = 9.0/256.0;
-      prolongation[7](43,36) = 45.0/256.0;
-      prolongation[7](43,38) = 45.0/256.0;
-      prolongation[7](43,40) = 5.0/256.0;
-      prolongation[7](43,42) = -15.0/256.0;
-      prolongation[7](43,48) = 5.0/256.0;
-      prolongation[7](43,50) = -15.0/256.0;
-      prolongation[7](43,56) = -45.0/256.0;
-      prolongation[7](43,58) = 135.0/256.0;
-      prolongation[7](43,60) = -45.0/256.0;
-      prolongation[7](43,62) = 135.0/256.0;
-      prolongation[7](44,47) = -1.0/16.0;
-      prolongation[7](44,55) = -1.0/16.0;
-      prolongation[7](44,62) = 9.0/16.0;
-      prolongation[7](44,63) = 9.0/16.0;
-      prolongation[7](45,11) = -1.0/256.0;
-      prolongation[7](45,15) = -1.0/256.0;
-      prolongation[7](45,19) = -5.0/256.0;
-      prolongation[7](45,23) = -5.0/256.0;
-      prolongation[7](45,34) = 9.0/256.0;
-      prolongation[7](45,35) = 9.0/256.0;
-      prolongation[7](45,38) = 45.0/256.0;
-      prolongation[7](45,39) = 45.0/256.0;
-      prolongation[7](45,46) = 5.0/256.0;
-      prolongation[7](45,47) = -15.0/256.0;
-      prolongation[7](45,54) = 5.0/256.0;
-      prolongation[7](45,55) = -15.0/256.0;
-      prolongation[7](45,60) = -45.0/256.0;
-      prolongation[7](45,61) = -45.0/256.0;
-      prolongation[7](45,62) = 135.0/256.0;
-      prolongation[7](45,63) = 135.0/256.0;
-      prolongation[7](46,25) = -1.0/256.0;
-      prolongation[7](46,27) = -1.0/256.0;
-      prolongation[7](46,29) = -5.0/256.0;
-      prolongation[7](46,31) = -5.0/256.0;
-      prolongation[7](46,42) = 9.0/256.0;
-      prolongation[7](46,43) = 9.0/256.0;
-      prolongation[7](46,45) = 5.0/256.0;
-      prolongation[7](46,47) = -15.0/256.0;
-      prolongation[7](46,50) = 45.0/256.0;
-      prolongation[7](46,51) = 45.0/256.0;
-      prolongation[7](46,53) = 5.0/256.0;
-      prolongation[7](46,55) = -15.0/256.0;
-      prolongation[7](46,58) = -45.0/256.0;
-      prolongation[7](46,59) = -45.0/256.0;
-      prolongation[7](46,62) = 135.0/256.0;
-      prolongation[7](46,63) = 135.0/256.0;
-      prolongation[7](47,0) = -1.0/4096.0;
-      prolongation[7](47,1) = -1.0/4096.0;
-      prolongation[7](47,2) = -5.0/4096.0;
-      prolongation[7](47,3) = -5.0/4096.0;
-      prolongation[7](47,4) = -5.0/4096.0;
-      prolongation[7](47,5) = -5.0/4096.0;
-      prolongation[7](47,6) = -25.0/4096.0;
-      prolongation[7](47,7) = -25.0/4096.0;
-      prolongation[7](47,8) = 9.0/4096.0;
-      prolongation[7](47,9) = 9.0/4096.0;
-      prolongation[7](47,10) = 5.0/4096.0;
-      prolongation[7](47,11) = -15.0/4096.0;
-      prolongation[7](47,12) = 45.0/4096.0;
-      prolongation[7](47,13) = 45.0/4096.0;
-      prolongation[7](47,14) = 5.0/4096.0;
-      prolongation[7](47,15) = -15.0/4096.0;
-      prolongation[7](47,16) = 45.0/4096.0;
-      prolongation[7](47,17) = 45.0/4096.0;
-      prolongation[7](47,18) = 25.0/4096.0;
-      prolongation[7](47,19) = -75.0/4096.0;
-      prolongation[7](47,20) = 225.0/4096.0;
-      prolongation[7](47,21) = 225.0/4096.0;
-      prolongation[7](47,22) = 25.0/4096.0;
-      prolongation[7](47,23) = -75.0/4096.0;
-      prolongation[7](47,24) = 5.0/4096.0;
-      prolongation[7](47,25) = -15.0/4096.0;
-      prolongation[7](47,26) = 5.0/4096.0;
-      prolongation[7](47,27) = -15.0/4096.0;
-      prolongation[7](47,28) = 25.0/4096.0;
-      prolongation[7](47,29) = -75.0/4096.0;
-      prolongation[7](47,30) = 25.0/4096.0;
-      prolongation[7](47,31) = -75.0/4096.0;
-      prolongation[7](47,32) = -45.0/4096.0;
-      prolongation[7](47,33) = -45.0/4096.0;
-      prolongation[7](47,34) = 135.0/4096.0;
-      prolongation[7](47,35) = 135.0/4096.0;
-      prolongation[7](47,36) = -225.0/4096.0;
-      prolongation[7](47,37) = -225.0/4096.0;
-      prolongation[7](47,38) = 675.0/4096.0;
-      prolongation[7](47,39) = 675.0/4096.0;
-      prolongation[7](47,40) = -45.0/4096.0;
-      prolongation[7](47,41) = -45.0/4096.0;
-      prolongation[7](47,42) = 135.0/4096.0;
-      prolongation[7](47,43) = 135.0/4096.0;
-      prolongation[7](47,44) = -25.0/4096.0;
-      prolongation[7](47,45) = 75.0/4096.0;
-      prolongation[7](47,46) = 75.0/4096.0;
-      prolongation[7](47,47) = -225.0/4096.0;
-      prolongation[7](47,48) = -225.0/4096.0;
-      prolongation[7](47,49) = -225.0/4096.0;
-      prolongation[7](47,50) = 675.0/4096.0;
-      prolongation[7](47,51) = 675.0/4096.0;
-      prolongation[7](47,52) = -25.0/4096.0;
-      prolongation[7](47,53) = 75.0/4096.0;
-      prolongation[7](47,54) = 75.0/4096.0;
-      prolongation[7](47,55) = -225.0/4096.0;
-      prolongation[7](47,56) = 225.0/4096.0;
-      prolongation[7](47,57) = 225.0/4096.0;
-      prolongation[7](47,58) = -675.0/4096.0;
-      prolongation[7](47,59) = -675.0/4096.0;
-      prolongation[7](47,60) = -675.0/4096.0;
-      prolongation[7](47,61) = -675.0/4096.0;
-      prolongation[7](47,62) = 2025.0/4096.0;
-      prolongation[7](47,63) = 2025.0/4096.0;
-      prolongation[7](48,29) = 1.0/16.0;
-      prolongation[7](48,31) = 5.0/16.0;
-      prolongation[7](48,50) = 15.0/16.0;
-      prolongation[7](48,51) = -5.0/16.0;
-      prolongation[7](49,50) = 1.0;
-      prolongation[7](50,2) = 1.0/256.0;
-      prolongation[7](50,3) = 5.0/256.0;
-      prolongation[7](50,6) = 5.0/256.0;
-      prolongation[7](50,7) = 25.0/256.0;
-      prolongation[7](50,12) = 15.0/256.0;
-      prolongation[7](50,13) = -5.0/256.0;
-      prolongation[7](50,20) = 75.0/256.0;
-      prolongation[7](50,21) = -25.0/256.0;
-      prolongation[7](50,28) = -5.0/256.0;
-      prolongation[7](50,29) = 15.0/256.0;
-      prolongation[7](50,30) = -25.0/256.0;
-      prolongation[7](50,31) = 75.0/256.0;
-      prolongation[7](50,48) = -75.0/256.0;
-      prolongation[7](50,49) = 25.0/256.0;
-      prolongation[7](50,50) = 225.0/256.0;
-      prolongation[7](50,51) = -75.0/256.0;
-      prolongation[7](51,12) = 1.0/16.0;
-      prolongation[7](51,20) = 5.0/16.0;
-      prolongation[7](51,48) = -5.0/16.0;
-      prolongation[7](51,50) = 15.0/16.0;
-      prolongation[7](52,55) = 1.0;
-      prolongation[7](53,15) = 1.0/16.0;
-      prolongation[7](53,23) = 5.0/16.0;
-      prolongation[7](53,54) = -5.0/16.0;
-      prolongation[7](53,55) = 15.0/16.0;
-      prolongation[7](54,25) = 1.0/16.0;
-      prolongation[7](54,31) = 5.0/16.0;
-      prolongation[7](54,53) = -5.0/16.0;
-      prolongation[7](54,55) = 15.0/16.0;
-      prolongation[7](55,0) = 1.0/256.0;
-      prolongation[7](55,3) = 5.0/256.0;
-      prolongation[7](55,4) = 5.0/256.0;
-      prolongation[7](55,7) = 25.0/256.0;
-      prolongation[7](55,14) = -5.0/256.0;
-      prolongation[7](55,15) = 15.0/256.0;
-      prolongation[7](55,22) = -25.0/256.0;
-      prolongation[7](55,23) = 75.0/256.0;
-      prolongation[7](55,24) = -5.0/256.0;
-      prolongation[7](55,25) = 15.0/256.0;
-      prolongation[7](55,30) = -25.0/256.0;
-      prolongation[7](55,31) = 75.0/256.0;
-      prolongation[7](55,52) = 25.0/256.0;
-      prolongation[7](55,53) = -75.0/256.0;
-      prolongation[7](55,54) = -75.0/256.0;
-      prolongation[7](55,55) = 225.0/256.0;
-      prolongation[7](56,47) = 1.0/16.0;
-      prolongation[7](56,55) = 5.0/16.0;
-      prolongation[7](56,62) = 15.0/16.0;
-      prolongation[7](56,63) = -5.0/16.0;
-      prolongation[7](57,62) = 1.0;
-      prolongation[7](58,11) = 1.0/256.0;
-      prolongation[7](58,15) = 5.0/256.0;
-      prolongation[7](58,19) = 5.0/256.0;
-      prolongation[7](58,23) = 25.0/256.0;
-      prolongation[7](58,34) = 15.0/256.0;
-      prolongation[7](58,35) = -5.0/256.0;
-      prolongation[7](58,38) = 75.0/256.0;
-      prolongation[7](58,39) = -25.0/256.0;
-      prolongation[7](58,46) = -5.0/256.0;
-      prolongation[7](58,47) = 15.0/256.0;
-      prolongation[7](58,54) = -25.0/256.0;
-      prolongation[7](58,55) = 75.0/256.0;
-      prolongation[7](58,60) = -75.0/256.0;
-      prolongation[7](58,61) = 25.0/256.0;
-      prolongation[7](58,62) = 225.0/256.0;
-      prolongation[7](58,63) = -75.0/256.0;
-      prolongation[7](59,34) = 1.0/16.0;
-      prolongation[7](59,38) = 5.0/16.0;
-      prolongation[7](59,60) = -5.0/16.0;
-      prolongation[7](59,62) = 15.0/16.0;
-      prolongation[7](60,25) = 5.0/256.0;
-      prolongation[7](60,27) = 1.0/256.0;
-      prolongation[7](60,29) = 5.0/256.0;
-      prolongation[7](60,31) = 25.0/256.0;
-      prolongation[7](60,42) = 15.0/256.0;
-      prolongation[7](60,43) = -5.0/256.0;
-      prolongation[7](60,45) = -5.0/256.0;
-      prolongation[7](60,47) = 15.0/256.0;
-      prolongation[7](60,50) = 75.0/256.0;
-      prolongation[7](60,51) = -25.0/256.0;
-      prolongation[7](60,53) = -25.0/256.0;
-      prolongation[7](60,55) = 75.0/256.0;
-      prolongation[7](60,58) = -75.0/256.0;
-      prolongation[7](60,59) = 25.0/256.0;
-      prolongation[7](60,62) = 225.0/256.0;
-      prolongation[7](60,63) = -75.0/256.0;
-      prolongation[7](61,42) = 1.0/16.0;
-      prolongation[7](61,50) = 5.0/16.0;
-      prolongation[7](61,58) = -5.0/16.0;
-      prolongation[7](61,62) = 15.0/16.0;
-      prolongation[7](62,0) = 5.0/4096.0;
-      prolongation[7](62,1) = 1.0/4096.0;
-      prolongation[7](62,2) = 5.0/4096.0;
-      prolongation[7](62,3) = 25.0/4096.0;
-      prolongation[7](62,4) = 25.0/4096.0;
-      prolongation[7](62,5) = 5.0/4096.0;
-      prolongation[7](62,6) = 25.0/4096.0;
-      prolongation[7](62,7) = 125.0/4096.0;
-      prolongation[7](62,8) = 15.0/4096.0;
-      prolongation[7](62,9) = -5.0/4096.0;
-      prolongation[7](62,10) = -5.0/4096.0;
-      prolongation[7](62,11) = 15.0/4096.0;
-      prolongation[7](62,12) = 75.0/4096.0;
-      prolongation[7](62,13) = -25.0/4096.0;
-      prolongation[7](62,14) = -25.0/4096.0;
-      prolongation[7](62,15) = 75.0/4096.0;
-      prolongation[7](62,16) = 75.0/4096.0;
-      prolongation[7](62,17) = -25.0/4096.0;
-      prolongation[7](62,18) = -25.0/4096.0;
-      prolongation[7](62,19) = 75.0/4096.0;
-      prolongation[7](62,20) = 375.0/4096.0;
-      prolongation[7](62,21) = -125.0/4096.0;
-      prolongation[7](62,22) = -125.0/4096.0;
-      prolongation[7](62,23) = 375.0/4096.0;
-      prolongation[7](62,24) = -25.0/4096.0;
-      prolongation[7](62,25) = 75.0/4096.0;
-      prolongation[7](62,26) = -5.0/4096.0;
-      prolongation[7](62,27) = 15.0/4096.0;
-      prolongation[7](62,28) = -25.0/4096.0;
-      prolongation[7](62,29) = 75.0/4096.0;
-      prolongation[7](62,30) = -125.0/4096.0;
-      prolongation[7](62,31) = 375.0/4096.0;
-      prolongation[7](62,32) = -75.0/4096.0;
-      prolongation[7](62,33) = 25.0/4096.0;
-      prolongation[7](62,34) = 225.0/4096.0;
-      prolongation[7](62,35) = -75.0/4096.0;
-      prolongation[7](62,36) = -375.0/4096.0;
-      prolongation[7](62,37) = 125.0/4096.0;
-      prolongation[7](62,38) = 1125.0/4096.0;
-      prolongation[7](62,39) = -375.0/4096.0;
-      prolongation[7](62,40) = -75.0/4096.0;
-      prolongation[7](62,41) = 25.0/4096.0;
-      prolongation[7](62,42) = 225.0/4096.0;
-      prolongation[7](62,43) = -75.0/4096.0;
-      prolongation[7](62,44) = 25.0/4096.0;
-      prolongation[7](62,45) = -75.0/4096.0;
-      prolongation[7](62,46) = -75.0/4096.0;
-      prolongation[7](62,47) = 225.0/4096.0;
-      prolongation[7](62,48) = -375.0/4096.0;
-      prolongation[7](62,49) = 125.0/4096.0;
-      prolongation[7](62,50) = 1125.0/4096.0;
-      prolongation[7](62,51) = -375.0/4096.0;
-      prolongation[7](62,52) = 125.0/4096.0;
-      prolongation[7](62,53) = -375.0/4096.0;
-      prolongation[7](62,54) = -375.0/4096.0;
-      prolongation[7](62,55) = 1125.0/4096.0;
-      prolongation[7](62,56) = 375.0/4096.0;
-      prolongation[7](62,57) = -125.0/4096.0;
-      prolongation[7](62,58) = -1125.0/4096.0;
-      prolongation[7](62,59) = 375.0/4096.0;
-      prolongation[7](62,60) = -1125.0/4096.0;
-      prolongation[7](62,61) = 375.0/4096.0;
-      prolongation[7](62,62) = 3375.0/4096.0;
-      prolongation[7](62,63) = -1125.0/4096.0;
-      prolongation[7](63,8) = 1.0/256.0;
-      prolongation[7](63,12) = 5.0/256.0;
-      prolongation[7](63,16) = 5.0/256.0;
-      prolongation[7](63,20) = 25.0/256.0;
-      prolongation[7](63,32) = -5.0/256.0;
-      prolongation[7](63,34) = 15.0/256.0;
-      prolongation[7](63,36) = -25.0/256.0;
-      prolongation[7](63,38) = 75.0/256.0;
-      prolongation[7](63,40) = -5.0/256.0;
-      prolongation[7](63,42) = 15.0/256.0;
-      prolongation[7](63,48) = -25.0/256.0;
-      prolongation[7](63,50) = 75.0/256.0;
-      prolongation[7](63,56) = 25.0/256.0;
-      prolongation[7](63,58) = -75.0/256.0;
-      prolongation[7](63,60) = -75.0/256.0;
-      prolongation[7](63,62) = 225.0/256.0;
-
-
-      restriction[0](0,0) = 1.0;
-      restriction[0](8,9) = 1.0;
-      restriction[0](14,15) = 1.0;
-      restriction[0](24,25) = 1.0;
-      restriction[0](32,35) = 1.0;
-      restriction[0](40,43) = 1.0;
-      restriction[0](52,55) = 1.0;
-      restriction[0](56,63) = 1.0;
-      restriction[1](1,1) = 1.0;
-      restriction[1](9,8) = 1.0;
-      restriction[1](10,11) = 1.0;
-      restriction[1](26,27) = 1.0;
-      restriction[1](33,34) = 1.0;
-      restriction[1](41,42) = 1.0;
-      restriction[1](44,47) = 1.0;
-      restriction[1](57,62) = 1.0;
-      restriction[2](2,2) = 1.0;
-      restriction[2](11,10) = 1.0;
-      restriction[2](13,12) = 1.0;
-      restriction[2](28,29) = 1.0;
-      restriction[2](35,32) = 1.0;
-      restriction[2](46,45) = 1.0;
-      restriction[2](49,50) = 1.0;
-      restriction[2](61,58) = 1.0;
-      restriction[3](3,3) = 1.0;
-      restriction[3](12,13) = 1.0;
-      restriction[3](15,14) = 1.0;
-      restriction[3](30,31) = 1.0;
-      restriction[3](34,33) = 1.0;
-      restriction[3](48,51) = 1.0;
-      restriction[3](54,53) = 1.0;
-      restriction[3](60,59) = 1.0;
-      restriction[4](4,4) = 1.0;
-      restriction[4](16,17) = 1.0;
-      restriction[4](22,23) = 1.0;
-      restriction[4](25,24) = 1.0;
-      restriction[4](36,39) = 1.0;
-      restriction[4](42,41) = 1.0;
-      restriction[4](53,54) = 1.0;
-      restriction[4](58,61) = 1.0;
-      restriction[5](5,5) = 1.0;
-      restriction[5](17,16) = 1.0;
-      restriction[5](18,19) = 1.0;
-      restriction[5](27,26) = 1.0;
-      restriction[5](37,38) = 1.0;
-      restriction[5](43,40) = 1.0;
-      restriction[5](45,46) = 1.0;
-      restriction[5](59,60) = 1.0;
-      restriction[6](6,6) = 1.0;
-      restriction[6](19,18) = 1.0;
-      restriction[6](21,20) = 1.0;
-      restriction[6](29,28) = 1.0;
-      restriction[6](39,36) = 1.0;
-      restriction[6](47,44) = 1.0;
-      restriction[6](51,48) = 1.0;
-      restriction[6](63,56) = 1.0;
-      restriction[7](7,7) = 1.0;
-      restriction[7](20,21) = 1.0;
-      restriction[7](23,22) = 1.0;
-      restriction[7](31,30) = 1.0;
-      restriction[7](38,37) = 1.0;
-      restriction[7](50,49) = 1.0;
-      restriction[7](55,52) = 1.0;
-      restriction[7](62,57) = 1.0;
-};
-
-
-template <>
-double
-FEQ3<3>::shape_value (const unsigned int i,
-                     const Point<3>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi  = p(0),
-              eta = p(1),
-              zeta=p(2);
-  switch (i)
-    {
-      case 0: return 1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+(-11.0/2.0+
-121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi)*eta+(9.0-99.0/2.0*xi+81.0*xi*xi
--81.0/2.0*xi*xi*xi)*eta*eta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi
-*xi)*eta*eta*eta+(-11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+(
-121.0/4.0-1331.0/8.0*xi+1089.0/4.0*xi*xi-1089.0/8.0*xi*xi*xi)*eta+(-99.0/2.0+
-1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0-1089.0/8.0*
-xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+(9.0-99.0/2.0*xi+81.0*
-xi*xi-81.0/2.0*xi*xi*xi+(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*
-xi*xi)*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/
-2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(
--9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+(99.0/4.0-1089.0/8.0*xi+
-891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi
-+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*
-xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 1: return xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+(-11.0/2.0*xi+99.0/4.0
-*xi*xi-99.0/4.0*xi*xi*xi)*eta+(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta*eta
-+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta+(-11.0/2.0*xi+99.0/
-4.0*xi*xi-99.0/4.0*xi*xi*xi+(121.0/4.0*xi-1089.0/8.0*xi*xi+1089.0/8.0*xi*xi*xi)
-*eta+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0*xi
--891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+(9.0*xi-81.0/2.0*xi*xi+
-81.0/2.0*xi*xi*xi+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+(81.0*
-xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi
--729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/
-4.0*xi*xi*xi+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0*xi
-+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0
-/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 2: return (xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+(-11.0/2.0*xi+99.0/
-4.0*xi*xi-99.0/4.0*xi*xi*xi)*eta+(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta*
-eta+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+(-9.0/2.0*
-xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*
-xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*
-xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(9.0/2.0*xi-81.0/
-4.0*xi*xi+81.0/4.0*xi*xi*xi+(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*
-eta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+
-729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 3: return (1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+(-11.0/2.0+
-121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi)*eta+(9.0-99.0/2.0*xi+81.0*xi*xi
--81.0/2.0*xi*xi*xi)*eta*eta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi
-*xi)*eta*eta*eta)*zeta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+(
-99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+891.0
-/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+
-729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(9.0/2.0-99.0/4.0*xi
-+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi+(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+
-891.0/8.0*xi*xi*xi)*eta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*
-xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta
-*eta)*zeta*zeta*zeta;
-      case 4: return (1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi)*eta+(-9.0/
-2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0-99.0/4.0*xi+
-81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta+((-11.0/2.0+121.0/4.0*xi-99.0/2.0
-*xi*xi+99.0/4.0*xi*xi*xi)*eta+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0
-*xi*xi*xi)*eta*eta+(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)
-*eta*eta*eta)*zeta+((9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(-81.0/
-2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0-891.0/
-4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-9.0/2.0+
-99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(81.0/4.0-891.0/8.0*xi+729.0/
-4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+
-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 5: return (xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi)*eta+(-9.0/2.0*xi+
-81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*
-xi*xi*xi)*eta*eta*eta+((-11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi)*eta+(
-99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta+(-99.0/4.0*xi+891.0/8.0
-*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((9.0*xi-81.0/2.0*xi*xi+81.0/2.0*
-xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/
-2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-9.0/2.0*xi
-+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*
-xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta*zeta;
-      case 6: return ((xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi)*eta+(-9.0/2.0*xi+
-81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*
-xi*xi*xi)*eta*eta*eta)*zeta+((-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta
-+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/
-8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((9.0/2.0*xi-81.0/4.0*xi*
-xi+81.0/4.0*xi*xi*xi)*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta
-*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*
-zeta;
-      case 7: return ((1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi)*eta+(-9.0/
-2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0-99.0/4.0*xi+
-81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-9.0/2.0+99.0/4.0*xi-81.0
-/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/
-8.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*
-xi)*eta*eta*eta)*zeta*zeta+((9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*
-xi)*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(
-81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*
-zeta*zeta;
-      case 8: return 9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+(-99.0/2.0*xi+
-495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi)*eta+(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*
-xi*xi)*eta*eta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta+(
--99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+(1089.0/4.0*xi-5445.0/8.0*xi*xi
-+3267.0/8.0*xi*xi*xi)*eta+(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*
-eta*eta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+(
-81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+(-891.0/2.0*xi+4455.0/4.0*xi*xi
--2673.0/4.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*
-eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta
-+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/4.0*xi-4455.0/8.0*xi*
-xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi
-)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta
-*zeta*zeta;
-      case 9: return -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+(99.0/4.0*xi
--99.0*xi*xi+297.0/4.0*xi*xi*xi)*eta+(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*
-xi)*eta*eta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta+(99.0/4.0*
-xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+(-1089.0/8.0*xi+1089.0/2.0*xi*xi-3267.0/8.0*xi
-*xi*xi)*eta+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta*eta+(-891.0/8.0*
-xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+(-81.0/2.0*xi+162.0*
-xi*xi-243.0/2.0*xi*xi*xi+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+(
--729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-729.0*xi*
-xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(81.0/4.0*xi-81.0*xi*xi+243.0/
-4.0*xi*xi*xi+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/4.0
-*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi
--2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 10: return (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+(-99.0/2.0*xi+
-891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*
-xi*xi)*eta*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta)*
-zeta+(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi+(495.0/4.0*xi-4455.0/8.0*
-xi*xi+4455.0/8.0*xi*xi*xi)*eta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi
-*xi)*eta*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta+(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+(-297.0/4.0*xi+2673.0
-/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*
-xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*
-eta)*zeta*zeta*zeta;
-      case 11: return (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+(99.0/4.0
-*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0
-/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta
-*eta)*zeta+(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+(-99.0*xi+891.0/2.0*xi*xi-891.0/
-2.0*xi*xi*xi)*eta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+(-81.0*xi+729.0
-/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(-27.0/2.0*xi+243.0/4.0*
-xi*xi-243.0/4.0*xi*xi*xi+(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*
-eta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi
--2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 12: return (9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+(-99.0/2.0*xi+
-495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi)*eta+(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*
-xi*xi)*eta*eta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta)*
-zeta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/4.0*xi-4455.0/8.0*
-xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi
-*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta+(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/4.0*xi+4455.0
-/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*
-xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*
-eta)*zeta*zeta*zeta;
-      case 13: return (-9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+(99.0/4.0*xi
--99.0*xi*xi+297.0/4.0*xi*xi*xi)*eta+(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*
-xi)*eta*eta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+(81.0
-/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0
-*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/
-8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(-81.0/4.0*
-xi+81.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi
-*xi)*eta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi
--729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 14: return (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+(-99.0/
-2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+(81.0-891.0/2.0*xi+
-729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi
-+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+
-405.0/4.0*xi*xi*xi+(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*
-xi)*eta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta
-+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta+(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi+(-297.0/4.0
-+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(243.0/2.0-2673.0/4.0*
-xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi
--2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 15: return (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+
-(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+
-891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi
-+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+(18.0-99.0*xi+162.0*xi*
-xi-81.0*xi*xi*xi+(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta+(
-162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+(-81.0+891.0/2.0*xi-729.0*
-xi*xi+729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(-27.0/2.0+297.0/4.0*xi-243.0/
-2.0*xi*xi+243.0/4.0*xi*xi*xi+(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/
-8.0*xi*xi*xi)*eta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*
-xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta*zeta;
-      case 16: return (9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi)*eta+(-81.0/
-2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-405.0/4.0*xi*xi
-+243.0/4.0*xi*xi*xi)*eta*eta*eta+((-99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi
-*xi)*eta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+(-891.0/
-4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((81.0*xi-405.0/
-2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi
-*xi*xi)*eta*eta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta+((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/4.0*
-xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*
-xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 17: return (-9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi)*eta+(81.0/
-4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+81.0*xi*xi-243.0/
-4.0*xi*xi*xi)*eta*eta*eta+((99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi)*eta+(
--891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+(891.0/8.0*xi-891.0/
-2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0*xi+162.0*xi*xi
--243.0/2.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta
-+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/
-4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0
-/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta*zeta;
-      case 18: return ((9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-81.0/
-2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-729.0/4.0*xi*xi
-+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0
-*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(
--405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
-27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-243.0/4.0*xi+2187.0/8.0*
-xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi
-*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 19: return ((-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(
-81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0
-*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((18.0*xi-81.0*xi*xi+81.0*xi*xi*xi
-)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(81.0*xi-729.0/2.0*
-xi*xi+729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-27.0/2.0*xi+243.0/4.0*xi*xi
--243.0/4.0*xi*xi*xi)*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*
-eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*
-zeta*zeta;
-      case 20: return ((9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi)*eta+(-81.0/
-2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-405.0/4.0*xi*xi
-+243.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0
-*xi*xi*xi)*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(
--729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
-81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/4.0*xi+3645.0/8.0*
-xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi
-*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 21: return ((-9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi)*eta+(81.0/
-4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+81.0*xi*xi-243.0/
-4.0*xi*xi*xi)*eta*eta*eta)*zeta+((81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*
-eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi
--729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/4.0*xi+
-81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*
-xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)
-*zeta*zeta*zeta;
-      case 22: return ((9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(
--81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0
--891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-45.0/2.0
-+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+
-3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-405.0/4.0+4455.0/8.0*xi-3645.0/
-4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((27.0/2.0-297.0/4.0*xi+
-243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi
-*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi
--2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 23: return ((-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi
-)*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(-81.0
-/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((18.0
--99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/
-2.0*xi*xi*xi)*eta*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta+((-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)
-*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(
--243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta*zeta;
-      case 24: return (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(
--45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0
--297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta+((-99.0/2.0+
-1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+(495.0/4.0-5445.0/8.0*xi+
-4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta*eta+(-297.0/4.0+3267.0/8.0*xi-2673.0/
-4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((81.0-891.0/2.0*xi+729.0*xi*
-xi-729.0/2.0*xi*xi*xi)*eta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/
-4.0*xi*xi*xi)*eta*eta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*
-xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/
-4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi
-)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta*zeta;
-      case 25: return (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)
-*eta+(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta*eta+(-27.0/2.0+297.0/4.0*xi
--243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta+((99.0/4.0-1089.0/8.0*xi+891.0
-/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*
-xi*xi*xi)*eta*eta+(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi
-)*eta*eta*eta)*zeta+((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi
-)*eta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+(-243.0/2.0+2673.0/
-4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/4.0
--891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0
-*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi
--2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 26: return (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-45.0/
-2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0*xi-243.0/4.0*xi*xi
-+243.0/4.0*xi*xi*xi)*eta*eta*eta+((-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi
-*xi)*eta+(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta*eta+(-297.0/
-4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((81.0*xi-729.0/
-2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi
-*xi*xi)*eta*eta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta+((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(405.0/4.0*
-xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*
-xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 27: return (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(
-18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta*eta+(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/
-4.0*xi*xi*xi)*eta*eta*eta+((99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta
-+(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta*eta+(297.0/4.0*xi-2673.0/8.0
-*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0*xi+729.0/4.0*xi*xi
--729.0/4.0*xi*xi*xi)*eta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+(-243.0/
-2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/4.0*
-xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*
-xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*
-eta)*zeta*zeta*zeta;
-      case 28: return ((9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-45.0/
-2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0*xi-243.0/4.0*xi*xi
-+243.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0
-*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(
--243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
-81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-405.0/4.0*xi+3645.0/8.0*
-xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi
-*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 29: return ((-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(
-18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta*eta+(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/
-4.0*xi*xi*xi)*eta*eta*eta)*zeta+((81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*
-xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi
--2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/4.0*xi+
-729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*
-xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta*zeta;
-      case 30: return ((9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(
--45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0
--297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0
-+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+
-3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/
-4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/2.0-891.0/4.0*xi+
-729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi
-*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi
--2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 31: return ((-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi
-)*eta+(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta*eta+(-27.0/2.0+297.0/4.0*xi
--243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((81.0/4.0-891.0/8.0*xi+
-729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/
-2.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*
-xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/
-8.0*xi*xi*xi)*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(
--243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta*zeta;
-      case 32: return (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+(-891.0/2.0
-*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0
-/2.0*xi*xi*xi)*eta*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta
-*eta*eta)*zeta+(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi+(4455.0/4.0*
-xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta+(-3645.0/2.0*xi+18225.0/4.0*xi*
-xi-10935.0/4.0*xi*xi*xi)*eta*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*
-xi*xi*xi)*eta*eta*eta)*zeta*zeta+(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi
-*xi+(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta+(2187.0/2.0*xi
--10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*
-xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 33: return (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+(891.0/4.0
-*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0
-*xi*xi*xi)*eta*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*
-zeta+(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi+(-4455.0/8.0*xi+4455.0/2.0*
-xi*xi-13365.0/8.0*xi*xi*xi)*eta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*
-xi)*eta*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta)
-*zeta*zeta+(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi+(2673.0/8.0*xi-2673.0/
-2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*
-xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta*zeta;
-      case 34: return (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0
-/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*
-xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi
-*xi)*eta*eta*eta)*zeta+(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+(-891.0*xi+4455.0/
-2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta
-*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(
--243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+(2673.0/4.0*xi-13365.0/8.0*xi
-*xi+8019.0/8.0*xi*xi*xi)*eta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi
-*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)
-*zeta*zeta*zeta;
-      case 35: return (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/8.0*
-xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/
-4.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta+(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+(891.0/2.0*xi-1782.0*xi*xi+
-2673.0/2.0*xi*xi*xi)*eta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+(
-729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(243.0/
-4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi+(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/
-8.0*xi*xi*xi)*eta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+(
--2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*
-zeta;
-      case 36: return ((81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(
--729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/2.0*xi
--3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-405.0/2.0*xi+2025.0
-/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/
-8.0*xi*xi*xi)*eta*eta+(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*
-eta*eta*eta)*zeta*zeta+((243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+
-(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi
--10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 37: return ((-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(
-729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+729.0*xi*
-xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((405.0/4.0*xi-405.0*xi*xi+1215.0/4.0
-*xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(
-3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
--243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(2187.0/8.0*xi-2187.0/2.0*xi*
-xi+6561.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*
-xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 38: return ((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+
-(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+
-3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((162.0*xi-405.0*xi*xi+
-243.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(
-729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/
-2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(2187.0/4.0*xi-10935.0/8.0*xi*
-xi+6561.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi
-*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 39: return ((81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(
--729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/
-2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0*xi+324.0*xi*xi-243.0*
-xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/
-2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((243.0/4.0*xi
--243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/
-8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta*zeta;
-      case 40: return (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(
--405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi
--1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+((-891.0/2.0*xi+4455.0/4.0*xi
-*xi-2673.0/4.0*xi*xi*xi)*eta+(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi
-*xi)*eta*eta+(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta+((729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+(-3645.0/2.0*xi+
-18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+(2187.0/2.0*xi-10935.0/4.0*xi*
-xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-729.0/2.0*xi+3645.0/4.0*xi*xi
--2187.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi
-)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta*zeta;
-      case 41: return (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(
-405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+243.0*xi*
-xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+((891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*
-xi)*eta+(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta*eta+(2673.0/
-8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-729.0/2.0*xi+
-1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*
-xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta+((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/8.0*xi
-+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi
-+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 42: return (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(
-162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+1215.0/4.0*xi*xi
--729.0/4.0*xi*xi*xi)*eta*eta*eta+((891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*
-xi*xi)*eta+(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta*eta+(2673.0/4.0
-*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-729.0/2.0*xi+
-3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*
-xi)*eta*eta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta)
-*zeta*zeta+((729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0*xi+
-3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+
-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 43: return (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-81.0*
-xi+324.0*xi*xi-243.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*
-xi*xi)*eta*eta*eta+((-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(
-891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta*eta+(-2673.0/8.0*xi+2673.0/
-2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((729.0/4.0*xi-729.0*xi*xi+
-2187.0/4.0*xi*xi*xi)*eta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+(
-2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-729.0
-/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+
-2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*
-xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 44: return ((81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+(
--405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi
--2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-405.0/2.0*xi+3645.0
-/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+(2025.0/4.0*xi-18225.0/8.0*xi*xi+18225.0/
-8.0*xi*xi*xi)*eta*eta+(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*
-eta*eta*eta)*zeta*zeta+((243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta
-+(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi
--6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 45: return ((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+
-(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+2187.0/4.0*xi*xi
--2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/
-8.0*xi*xi*xi)*eta+(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta*eta+(
-1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
--243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(243.0*xi-2187.0/2.0*xi
-*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*
-xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 46: return ((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+
-(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+
-2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((162.0*xi-729.0*xi*xi+
-729.0*xi*xi*xi)*eta+(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta*eta+(
-243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/
-2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(1215.0/4.0*xi-10935.0/8.0*xi*
-xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*
-xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 47: return ((81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(
--81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*
-xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0*xi+729.0/2.0*xi*xi-729.0/
-2.0*xi*xi*xi)*eta+(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi)*eta*eta+(-243.0*xi+
-2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((243.0/4.0*xi
--2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-243.0*xi+2187.0/2.0*xi*xi-2187.0/
-2.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta*zeta;
-      case 48: return ((81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(
--405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi
--1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-729.0/2.0*xi+3645.0/
-4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0
-*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta+((729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(
--3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi
--10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 49: return ((-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(
-405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+243.0*xi*
-xi-729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*
-xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(
-2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
--729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/8.0*xi-3645.0/2.0*xi
-*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*
-xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 50: return ((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+
-(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+1215.0/4.0*xi*xi
--729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/
-8.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(
-2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
--729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi
-*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*
-xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 51: return ((81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-81.0
-*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*
-xi*xi)*eta*eta*eta)*zeta+((-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*
-eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+
-2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((729.0/8.0*xi
--729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/
-2.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*
-eta*eta)*zeta*zeta*zeta;
-      case 52: return ((81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta
-+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta+(243.0
-/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((
--405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+(2025.0/4.0
--22275.0/8.0*xi+18225.0/4.0*xi*xi-18225.0/8.0*xi*xi*xi)*eta*eta+(-1215.0/4.0+
-13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+(
-(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(-1215.0/4.0
-+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0
--8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*
-zeta;
-      case 53: return ((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*
-xi*xi)*eta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+(-243.0/2.0+
-2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((405.0/
-4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+(-405.0+4455.0/2.0*
-xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta*eta+(1215.0/4.0-13365.0/8.0*xi+10935.0
-/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/4.0+2673.0/8.0
-*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(243.0-2673.0/2.0*xi+2187.0*xi*xi
--2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0
-/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 54: return ((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*
-xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*
-eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta+((162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+(-405.0+4455.0/2.0*xi
--3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta*eta+(243.0-2673.0/2.0*xi+2187.0*xi*xi
--2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/2.0+2673.0/4.0*xi-2187.0/
-2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi
--10935.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+
-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 55: return ((81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi
-*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0
--2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-81.0+
-891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+(324.0-1782.0*xi+2916.0*xi*xi
--1458.0*xi*xi*xi)*eta*eta+(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*
-xi)*eta*eta*eta)*zeta*zeta+((243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/
-8.0*xi*xi*xi)*eta+(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*
-eta+(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)
-*zeta*zeta*zeta;
-      case 56: return ((729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+(
--3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+(2187.0/2.0*xi
--10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-3645.0/2.0*xi+
-18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+(18225.0/4.0*xi-91125.0/8.0*xi*xi+
-54675.0/8.0*xi*xi*xi)*eta*eta+(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi
-*xi*xi)*eta*eta*eta)*zeta*zeta+((2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*
-xi*xi)*eta+(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta+(
-6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*
-zeta;
-      case 57: return ((-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+(
-3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+2187.0
-*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((3645.0/4.0*xi-3645.0*xi*xi+
-10935.0/4.0*xi*xi*xi)*eta+(-18225.0/8.0*xi+18225.0/2.0*xi*xi-54675.0/8.0*xi*xi*
-xi)*eta*eta+(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta+((-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+(10935.0/8.0
-*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta+(-6561.0/8.0*xi+6561.0/2.0*
-xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 58: return ((-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*
-eta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta*eta+(-2187.0/2.0*xi+10935.0/
-4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((3645.0/4.0*xi-18225.0/8.0*xi
-*xi+10935.0/8.0*xi*xi*xi)*eta+(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*
-xi)*eta*eta+(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta*eta
-)*zeta*zeta+((-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+(2187.0
-*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta+(-6561.0/4.0*xi+32805.0/8.0*
-xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 59: return ((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(
--729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-2187.0*xi*xi+
-6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+((-3645.0/8.0*xi+3645.0/2.0*xi*xi
--10935.0/8.0*xi*xi*xi)*eta+(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*
-eta*eta+(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta*eta)*
-zeta*zeta+((2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+(-2187.0/
-2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta+(6561.0/8.0*xi-6561.0/2.0*xi*
-xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 60: return ((-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*
-eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0
-*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((1458.0*xi-3645.0
-*xi*xi+2187.0*xi*xi*xi)*eta+(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)
-*eta*eta+(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*
-zeta+((-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+(10935.0/4.0*
-xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta+(-6561.0/4.0*xi+32805.0/8.0*
-xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 61: return ((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(
--3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi
--2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-729.0*xi+2916.0*xi*
-xi-2187.0*xi*xi*xi)*eta+(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta*
-eta+(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
-2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+(-10935.0/8.0*xi+10935.0/
-2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta+(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0
-/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 62: return ((729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*
-eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi
--10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((-729.0*xi+3645.0/
-2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi)*eta
-*eta+(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+
-((2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+(-2187.0*xi+10935.0/
-2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta+(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0
-/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-      case 63: return ((-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*
-eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+
-2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+((729.0/2.0*xi-1458.0*
-xi*xi+2187.0/2.0*xi*xi*xi)*eta+(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi)*eta*
-eta+(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta+((
--2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+(2187.0/2.0*xi-4374.0*
-xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta+(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0
-*xi*xi*xi)*eta*eta*eta)*zeta*zeta*zeta;
-    };
-  return 0;
-};
-
-
-template <>
-Tensor<1,3>
-FEQ3<3>::shape_grad (const unsigned int i,
-                    const Point<3>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi  = p(0),
-              eta = p(1),
-              zeta=p(2);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<3>(-11.0/2.0+18.0*xi-27.0/2.0*xi*xi+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta*eta+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi+(-1331.0/8.0+1089.0/2.0*xi-3267.0/8.0*xi*xi)*eta+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta*eta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta*eta)*zeta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+(121.0/4.0-1331.0/8.0*xi+1089.0/4.0*xi*xi-1089.0/8.0*xi*xi*xi+2.0*(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+3.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+(121.0/4.0-1331.0/8.0*xi+1089.0/4.0*xi*xi-1089.0/8.0*xi*xi*xi)*eta+(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 1: return Point<3>(1.0-9.0*xi+27.0/2.0*xi*xi+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(9.0-81.0*xi+243.0/2.0*xi*xi)*eta*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta*eta+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+(121.0/4.0-1089.0/4.0*xi+3267.0/8.0*xi*xi)*eta+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta*eta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta*eta)*zeta+(9.0-81.0*xi+243.0/2.0*xi*xi+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+(121.0/4.0*xi-1089.0/8.0*xi*xi+1089.0/8.0*xi*xi*xi+2.0*(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+3.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+(121.0/4.0*xi-1089.0/8.0*xi*xi+1089.0/8.0*xi*xi*xi)*eta+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 2: return Point<3>((1.0-9.0*xi+27.0/2.0*xi*xi+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(9.0-81.0*xi+243.0/2.0*xi*xi)*eta*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta*eta)*zeta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta)*zeta+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+(-11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi)*eta+(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta*eta+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi+(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 3: return Point<3>((-11.0/2.0+18.0*xi-27.0/2.0*xi*xi+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta*eta)*zeta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta)*zeta+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+(-11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi)*eta+(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta*eta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi+(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 4: return Point<3>((-11.0/2.0+18.0*xi-27.0/2.0*xi*xi)*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta*eta+((121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+(-11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+3.0*(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta)*zeta+(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi)*eta+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta+(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 5: return Point<3>((1.0-9.0*xi+27.0/2.0*xi*xi)*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta*eta+((-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta*eta*eta)*zeta+((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+(-11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+3.0*(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta)*zeta+(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi)*eta+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta+(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 6: return Point<3>(((1.0-9.0*xi+27.0/2.0*xi*xi)*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi)*eta+(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 7: return Point<3>(((-11.0/2.0+18.0*xi-27.0/2.0*xi*xi)*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta*eta)*zeta+((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi)*eta+(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 8: return Point<3>(9.0-45.0*xi+81.0/2.0*xi*xi+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(81.0-405.0*xi+729.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+(1089.0/4.0-5445.0/4.0*xi+9801.0/8.0*xi*xi)*eta+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta*eta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+(81.0-405.0*xi+729.0/2.0*xi*xi+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(1089.0/4.0*xi-5445.0/8.0*xi*xi+3267.0/8.0*xi*xi*xi+2.0*(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+3.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+(1089.0/4.0*xi-5445.0/8.0*xi*xi+3267.0/8.0*xi*xi*xi)*eta+(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta*eta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 9: return Point<3>(-9.0/2.0+36.0*xi-81.0/2.0*xi*xi+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi+(-1089.0/8.0+1089.0*xi-9801.0/8.0*xi*xi)*eta+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-1089.0/8.0*xi+1089.0/2.0*xi*xi-3267.0/8.0*xi*xi*xi+2.0*(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+3.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+(-1089.0/8.0*xi+1089.0/2.0*xi*xi-3267.0/8.0*xi*xi*xi)*eta+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta*eta+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 10: return Point<3>((9.0-81.0*xi+243.0/2.0*xi*xi+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi+(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 11: return Point<3>((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+(18.0-162.0*xi+243.0*xi*xi+(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 12: return Point<3>((9.0-45.0*xi+81.0/2.0*xi*xi+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(81.0-405.0*xi+729.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta)*zeta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+(-99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi)*eta+(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 13: return Point<3>((-9.0/2.0+36.0*xi-81.0/2.0*xi*xi+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta*eta)*zeta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+(99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi)*eta+(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 14: return Point<3>((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi+(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi+(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 15: return Point<3>((99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+(-99.0+324.0*xi-243.0*xi*xi+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi+(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi+(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 16: return Point<3>((9.0-45.0*xi+81.0/2.0*xi*xi)*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+((-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+3.0*(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi)*eta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 17: return Point<3>((-9.0/2.0+36.0*xi-81.0/2.0*xi*xi)*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+((99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+3.0*(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi)*eta+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 18: return Point<3>(((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 19: return Point<3>(((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+((18.0-162.0*xi+243.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta+(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 20: return Point<3>(((9.0-45.0*xi+81.0/2.0*xi*xi)*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi)*eta+(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 21: return Point<3>(((-9.0/2.0+36.0*xi-81.0/2.0*xi*xi)*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta*eta)*zeta+((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi)*eta+(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 22: return Point<3>(((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+((495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 23: return Point<3>(((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-99.0+324.0*xi-243.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta+(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 24: return Point<3>((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta*eta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+((1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta*eta+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta+3.0*(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta*eta+(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 25: return Point<3>((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-99.0+324.0*xi-243.0*xi*xi)*eta*eta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+((-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta*eta+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta+3.0*(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta*eta+(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 26: return Point<3>((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta*eta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+((-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta*eta+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+((81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta+3.0*(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta*eta+(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 27: return Point<3>((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(18.0-162.0*xi+243.0*xi*xi)*eta*eta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+((99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta*eta+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta+3.0*(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta*eta+(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 28: return Point<3>(((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta*eta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta+(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 29: return Point<3>(((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(18.0-162.0*xi+243.0*xi*xi)*eta*eta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta)*zeta+((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta*eta+(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 30: return Point<3>(((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta*eta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta*eta)*zeta+((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta+(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta*eta+(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 31: return Point<3>(((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-99.0+324.0*xi-243.0*xi*xi)*eta*eta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta)*zeta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta*eta+(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 32: return Point<3>((81.0-405.0*xi+729.0/2.0*xi*xi+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi+2.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi+(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta+(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta+(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 33: return Point<3>((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi+2.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi+(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi+(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 34: return Point<3>((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+(162.0-810.0*xi+729.0*xi*xi+(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi+2.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 35: return Point<3>((81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+(-81.0+648.0*xi-729.0*xi*xi+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi+2.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi+(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 36: return Point<3>(((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 37: return Point<3>(((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+((405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 38: return Point<3>(((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+((162.0-810.0*xi+729.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 39: return Point<3>(((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-81.0+648.0*xi-729.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 40: return Point<3>((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta*eta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+((-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta*eta+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta*eta*eta)*zeta+((729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta+3.0*(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta)*zeta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta*eta+(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 41: return Point<3>((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+((891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta+3.0*(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta*eta+(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 42: return Point<3>((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(162.0-810.0*xi+729.0*xi*xi)*eta*eta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+((891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta*eta+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta+3.0*(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta*eta+(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta*eta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 43: return Point<3>((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-81.0+648.0*xi-729.0*xi*xi)*eta*eta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+((-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta*eta*eta)*zeta+((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta+3.0*(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta)*zeta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta*eta+(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 44: return Point<3>(((81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+(2025.0/4.0-18225.0/4.0*xi+54675.0/8.0*xi*xi)*eta*eta+(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta+(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta+(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi+2.0*(2025.0/4.0*xi-18225.0/8.0*xi*xi+18225.0/8.0*xi*xi*xi)*eta+3.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+(2025.0/4.0*xi-18225.0/8.0*xi*xi+18225.0/8.0*xi*xi*xi)*eta*eta+(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 45: return Point<3>(((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+((405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta*eta+(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta+(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta+3.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta*eta+(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 46: return Point<3>(((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+((162.0-1458.0*xi+2187.0*xi*xi)*eta+(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta*eta+(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta+3.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta*eta+(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 47: return Point<3>(((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+(324.0-2916.0*xi+4374.0*xi*xi)*eta*eta+(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi)*eta+3.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi)*eta*eta+(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 48: return Point<3>(((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta*eta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 49: return Point<3>(((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 50: return Point<3>(((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(162.0-810.0*xi+729.0*xi*xi)*eta*eta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta*eta+(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 51: return Point<3>(((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-81.0+648.0*xi-729.0*xi*xi)*eta*eta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 52: return Point<3>(((-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+((4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+(-22275.0/8.0+18225.0/2.0*xi-54675.0/8.0*xi*xi)*eta*eta+(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta+(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi+2.0*(2025.0/4.0-22275.0/8.0*xi+18225.0/4.0*xi*xi-18225.0/8.0*xi*xi*xi)*eta+3.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+(2025.0/4.0-22275.0/8.0*xi+18225.0/4.0*xi*xi-18225.0/8.0*xi*xi*xi)*eta*eta+(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 53: return Point<3>(((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta*eta+(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta+(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta+(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta+3.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta*eta+(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 54: return Point<3>(((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-891.0+2916.0*xi-2187.0*xi*xi)*eta+(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta*eta+(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta+(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta+(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta+3.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta*eta+(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 55: return Point<3>(((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+((891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+(-1782.0+5832.0*xi-4374.0*xi*xi)*eta*eta+(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta+(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi)*eta+3.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi)*eta*eta+(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 56: return Point<3>(((729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+(18225.0/4.0-91125.0/4.0*xi+164025.0/8.0*xi*xi)*eta*eta+(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta+(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta+(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi+2.0*(18225.0/4.0*xi-91125.0/8.0*xi*xi+54675.0/8.0*xi*xi*xi)*eta+3.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi+2.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta+3.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+(18225.0/4.0*xi-91125.0/8.0*xi*xi+54675.0/8.0*xi*xi*xi)*eta*eta+(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta+(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 57: return Point<3>(((-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+((3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+(-18225.0/8.0+18225.0*xi-164025.0/8.0*xi*xi)*eta*eta+(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta+(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta+(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi+2.0*(-18225.0/8.0*xi+18225.0/2.0*xi*xi-54675.0/8.0*xi*xi*xi)*eta+3.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi+2.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta+3.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+(-18225.0/8.0*xi+18225.0/2.0*xi*xi-54675.0/8.0*xi*xi*xi)*eta*eta+(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta+(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 58: return Point<3>(((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+((3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta*eta+(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta+(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta+(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta+3.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi+2.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta+3.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta*eta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta*eta+(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta+(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 59: return Point<3>(((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+((-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta*eta+(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta+((2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta+(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta+(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta+3.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi+2.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta+3.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta+2.0*((-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta*eta+(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta+(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 60: return Point<3>(((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+((1458.0-7290.0*xi+6561.0*xi*xi)*eta+(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta*eta+(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta+(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta+(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta+3.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi+2.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta+3.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta*eta+(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta+(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 61: return Point<3>(((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-729.0+5832.0*xi-6561.0*xi*xi)*eta+(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta*eta+(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta+(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta+(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi+2.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta+3.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta+(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 62: return Point<3>(((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+((-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+(2916.0-14580.0*xi+13122.0*xi*xi)*eta*eta+(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta+(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta+(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi)*eta+3.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi+2.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta+3.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi)*eta*eta+(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta+(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-      case 63: return Point<3>(((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+((729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+(-1458.0+11664.0*xi-13122.0*xi*xi)*eta*eta+(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta+(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta+(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta*zeta,
-      (-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi+2.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta+3.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta*zeta,
-      (-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta+2.0*((729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi)*eta*eta+(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta+(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta*zeta);
-    };
-  return Point<3> ();
-};
-
-
-template <>
-Tensor<2,3>
-FEQ3<3>::shape_grad_grad (const unsigned int i,
-                         const Point<3>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi  = p(0),
-              eta = p(1),
-              zeta=p(2);
-  Tensor<2,3> 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+(-99.0+297.0/2.0*xi+(1089.0/2.0-3267.0/4.0*xi)*eta+(-891.0+2673.0/2.0*xi)*eta*eta+(891.0/2.0-2673.0/4.0*xi)*eta*eta*eta)*zeta+(162.0-243.0*xi+(-891.0+2673.0/2.0*xi)*eta+(1458.0-2187.0*xi)*eta*eta+(-729.0+2187.0/2.0*xi)*eta*eta*eta)*zeta*zeta+(-81.0+243.0/2.0*xi+(891.0/2.0-2673.0/4.0*xi)*eta+(-729.0+2187.0/2.0*xi)*eta*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-1331.0/8.0+1089.0/2.0*xi-3267.0/8.0*xi*xi+2.0*(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+3.0*(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta)*zeta+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi+2.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 121.0/4.0-99.0*xi+297.0/4.0*xi*xi+(-1331.0/8.0+1089.0/2.0*xi-3267.0/8.0*xi*xi)*eta+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta*eta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta*eta+2.0*(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-1331.0/8.0+1089.0/2.0*xi-3267.0/8.0*xi*xi+2.0*(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+3.0*(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta)*zeta+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi+2.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi+6.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta)*zeta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi+6.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+6.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 121.0/4.0-1331.0/8.0*xi+1089.0/4.0*xi*xi-1089.0/8.0*xi*xi*xi+2.0*(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+3.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 121.0/4.0-99.0*xi+297.0/4.0*xi*xi+(-1331.0/8.0+1089.0/2.0*xi-3267.0/8.0*xi*xi)*eta+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta*eta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta*eta+2.0*(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 121.0/4.0-1331.0/8.0*xi+1089.0/4.0*xi*xi-1089.0/8.0*xi*xi*xi+2.0*(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+3.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi+2.0*(-99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi)*eta+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+(99.0/2.0-297.0/2.0*xi+(-1089.0/4.0+3267.0/4.0*xi)*eta+(891.0/2.0-2673.0/2.0*xi)*eta*eta+(-891.0/4.0+2673.0/4.0*xi)*eta*eta*eta)*zeta+(-81.0+243.0*xi+(891.0/2.0-2673.0/2.0*xi)*eta+(-729.0+2187.0*xi)*eta*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta*eta)*zeta*zeta+(81.0/2.0-243.0/2.0*xi+(-891.0/4.0+2673.0/4.0*xi)*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(121.0/4.0-1089.0/4.0*xi+3267.0/8.0*xi*xi+2.0*(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+3.0*(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi+2.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+(121.0/4.0-1089.0/4.0*xi+3267.0/8.0*xi*xi)*eta+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta*eta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta*eta+2.0*(9.0-81.0*xi+243.0/2.0*xi*xi+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(121.0/4.0-1089.0/4.0*xi+3267.0/8.0*xi*xi+2.0*(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+3.0*(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi+2.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi+6.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta)*zeta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi+6.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+6.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 121.0/4.0*xi-1089.0/8.0*xi*xi+1089.0/8.0*xi*xi*xi+2.0*(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+3.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+(121.0/4.0-1089.0/4.0*xi+3267.0/8.0*xi*xi)*eta+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta*eta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta*eta+2.0*(9.0-81.0*xi+243.0/2.0*xi*xi+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 121.0/4.0*xi-1089.0/8.0*xi*xi+1089.0/8.0*xi*xi*xi+2.0*(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+3.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+2.0*(-99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi)*eta+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 2:
-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)*zeta+(81.0/2.0-243.0/2.0*xi+(-891.0/4.0+2673.0/4.0*xi)*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(-81.0/2.0+243.0/2.0*xi+(891.0/4.0-2673.0/4.0*xi)*eta+(-729.0/2.0+2187.0/2.0*xi)*eta*eta+(729.0/4.0-2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi+2.0*(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 1.0-9.0*xi+27.0/2.0*xi*xi+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(9.0-81.0*xi+243.0/2.0*xi*xi)*eta*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta*eta+2.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi+2.0*(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+6.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+6.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+2.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 1.0-9.0*xi+27.0/2.0*xi*xi+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(9.0-81.0*xi+243.0/2.0*xi*xi)*eta*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta*eta+2.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+2.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -9.0*xi+81.0/2.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi+(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 3:
-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)*zeta+(-81.0+243.0/2.0*xi+(891.0/2.0-2673.0/4.0*xi)*eta+(-729.0+2187.0/2.0*xi)*eta*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(81.0-243.0/2.0*xi+(-891.0/2.0+2673.0/4.0*xi)*eta+(729.0-2187.0/2.0*xi)*eta*eta+(-729.0/2.0+2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi+2.0*(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -11.0/2.0+18.0*xi-27.0/2.0*xi*xi+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta*eta+2.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi+2.0*(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+6.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+6.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+2.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -11.0/2.0+18.0*xi-27.0/2.0*xi*xi+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta*eta+2.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+2.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -9.0+99.0/2.0*xi-81.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi+(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 4:
-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+((-99.0+297.0/2.0*xi)*eta+(891.0/2.0-2673.0/4.0*xi)*eta*eta+(-891.0/2.0+2673.0/4.0*xi)*eta*eta*eta)*zeta+((162.0-243.0*xi)*eta+(-729.0+2187.0/2.0*xi)*eta*eta+(729.0-2187.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((-81.0+243.0/2.0*xi)*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta+(-729.0/2.0+2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi+2.0*(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+3.0*(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta*eta*eta+2.0*((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(121.0/4.0-99.0*xi+297.0/4.0*xi*xi+2.0*(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+3.0*(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(99.0/2.0-1089.0/4.0*xi+891.0/2.0*xi*xi-891.0/4.0*xi*xi*xi+6.0*(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta)*zeta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+6.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi+6.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+3.0*(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (121.0/4.0-99.0*xi+297.0/4.0*xi*xi)*eta+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta*eta+(1089.0/8.0-891.0/2.0*xi+2673.0/8.0*xi*xi)*eta*eta*eta+2.0*((-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -11.0/2.0+121.0/4.0*xi-99.0/2.0*xi*xi+99.0/4.0*xi*xi*xi+2.0*(99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi)*eta+3.0*(-99.0/4.0+1089.0/8.0*xi-891.0/4.0*xi*xi+891.0/8.0*xi*xi*xi)*eta*eta+2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi)*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta*eta+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+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 5:
-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+((99.0/2.0-297.0/2.0*xi)*eta+(-891.0/4.0+2673.0/4.0*xi)*eta*eta+(891.0/4.0-2673.0/4.0*xi)*eta*eta*eta)*zeta+((-81.0+243.0*xi)*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta+(-729.0/2.0+2187.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((81.0/2.0-243.0/2.0*xi)*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta+(729.0/4.0-2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+2.0*(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+3.0*(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta*eta)*zeta+(9.0-81.0*xi+243.0/2.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta*eta*eta+2.0*((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+2.0*(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+3.0*(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta*eta)*zeta+(9.0-81.0*xi+243.0/2.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(99.0/2.0*xi-891.0/4.0*xi*xi+891.0/4.0*xi*xi*xi+6.0*(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta)*zeta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+6.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+6.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+3.0*(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi)*eta+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta*eta+(-99.0/4.0+891.0/4.0*xi-2673.0/8.0*xi*xi)*eta*eta*eta+2.0*((9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -11.0/2.0*xi+99.0/4.0*xi*xi-99.0/4.0*xi*xi*xi+2.0*(99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi)*eta+3.0*(-99.0/4.0*xi+891.0/8.0*xi*xi-891.0/8.0*xi*xi*xi)*eta*eta+2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi)*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 6:
-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)*zeta+((81.0/2.0-243.0/2.0*xi)*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta+(729.0/4.0-2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-81.0/2.0+243.0/2.0*xi)*eta+(729.0/4.0-2187.0/4.0*xi)*eta*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi+2.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (1.0-9.0*xi+27.0/2.0*xi*xi)*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta*eta+2.0*((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi+2.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+6.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+6.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (1.0-9.0*xi+27.0/2.0*xi*xi)*eta+(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta+(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta*eta+2.0*((-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = xi-9.0/2.0*xi*xi+9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta*eta+2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 7:
-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)*zeta+((-81.0+243.0/2.0*xi)*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta+(-729.0/2.0+2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((81.0-243.0/2.0*xi)*eta+(-729.0/2.0+2187.0/4.0*xi)*eta*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi+2.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-11.0/2.0+18.0*xi-27.0/2.0*xi*xi)*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta*eta+2.0*((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi+2.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi+6.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+6.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-11.0/2.0+18.0*xi-27.0/2.0*xi*xi)*eta+(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta+(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta*eta+2.0*((99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 1.0-11.0/2.0*xi+9.0*xi*xi-9.0/2.0*xi*xi*xi+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta*eta+2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta*eta+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+(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 8:
-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+(495.0/2.0-891.0/2.0*xi+(-5445.0/4.0+9801.0/4.0*xi)*eta+(4455.0/2.0-8019.0/2.0*xi)*eta*eta+(-4455.0/4.0+8019.0/4.0*xi)*eta*eta*eta)*zeta+(-405.0+729.0*xi+(4455.0/2.0-8019.0/2.0*xi)*eta+(-3645.0+6561.0*xi)*eta*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+(405.0/2.0-729.0/2.0*xi+(-4455.0/4.0+8019.0/4.0*xi)*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(1089.0/4.0-5445.0/4.0*xi+9801.0/8.0*xi*xi+2.0*(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+3.0*(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi+2.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+(1089.0/4.0-5445.0/4.0*xi+9801.0/8.0*xi*xi)*eta+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta*eta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*(81.0-405.0*xi+729.0/2.0*xi*xi+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(1089.0/4.0-5445.0/4.0*xi+9801.0/8.0*xi*xi+2.0*(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+3.0*(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi+2.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi+6.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta)*zeta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi+6.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 1089.0/4.0*xi-5445.0/8.0*xi*xi+3267.0/8.0*xi*xi*xi+2.0*(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+3.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+(1089.0/4.0-5445.0/4.0*xi+9801.0/8.0*xi*xi)*eta+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta*eta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*(81.0-405.0*xi+729.0/2.0*xi*xi+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 1089.0/4.0*xi-5445.0/8.0*xi*xi+3267.0/8.0*xi*xi*xi+2.0*(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+3.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+2.0*(-891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi)*eta+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-break;
-case 9:
-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+(-198.0+891.0/2.0*xi+(1089.0-9801.0/4.0*xi)*eta+(-1782.0+8019.0/2.0*xi)*eta*eta+(891.0-8019.0/4.0*xi)*eta*eta*eta)*zeta+(324.0-729.0*xi+(-1782.0+8019.0/2.0*xi)*eta+(2916.0-6561.0*xi)*eta*eta+(-1458.0+6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+(-162.0+729.0/2.0*xi+(891.0-8019.0/4.0*xi)*eta+(-1458.0+6561.0/2.0*xi)*eta*eta+(729.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-1089.0/8.0+1089.0*xi-9801.0/8.0*xi*xi+2.0*(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi+2.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 99.0/4.0-198.0*xi+891.0/4.0*xi*xi+(-1089.0/8.0+1089.0*xi-9801.0/8.0*xi*xi)*eta+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-1089.0/8.0+1089.0*xi-9801.0/8.0*xi*xi+2.0*(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi+2.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi+6.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta)*zeta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi+6.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -1089.0/8.0*xi+1089.0/2.0*xi*xi-3267.0/8.0*xi*xi*xi+2.0*(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+3.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 99.0/4.0-198.0*xi+891.0/4.0*xi*xi+(-1089.0/8.0+1089.0*xi-9801.0/8.0*xi*xi)*eta+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -1089.0/8.0*xi+1089.0/2.0*xi*xi-3267.0/8.0*xi*xi*xi+2.0*(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+3.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+2.0*(891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi)*eta+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (-81.0+243.0*xi+(891.0/2.0-2673.0/2.0*xi)*eta+(-729.0+2187.0*xi)*eta*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta*eta)*zeta+(405.0/2.0-1215.0/2.0*xi+(-4455.0/4.0+13365.0/4.0*xi)*eta+(3645.0/2.0-10935.0/2.0*xi)*eta*eta+(-3645.0/4.0+10935.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(-243.0/2.0+729.0/2.0*xi+(2673.0/4.0-8019.0/4.0*xi)*eta+(-2187.0/2.0+6561.0/2.0*xi)*eta*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi+2.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi+2.0*(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+3.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi+2.0*(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 9.0-81.0*xi+243.0/2.0*xi*xi+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi+2.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi+2.0*(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+3.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi+2.0*(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (162.0*xi-729.0*xi*xi+729.0*xi*xi*xi+6.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta)*zeta+(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi+6.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 9.0-81.0*xi+243.0/2.0*xi*xi+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -45.0*xi+405.0/2.0*xi*xi-405.0/2.0*xi*xi*xi+2.0*(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (81.0/2.0-243.0/2.0*xi+(-891.0/4.0+2673.0/4.0*xi)*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta*eta)*zeta+(-162.0+486.0*xi+(891.0-2673.0*xi)*eta+(-1458.0+4374.0*xi)*eta*eta+(729.0-2187.0*xi)*eta*eta*eta)*zeta*zeta+(243.0/2.0-729.0/2.0*xi+(-2673.0/4.0+8019.0/4.0*xi)*eta+(2187.0/2.0-6561.0/2.0*xi)*eta*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0+891.0*xi-2673.0/2.0*xi*xi+2.0*(162.0-1458.0*xi+2187.0*xi*xi)*eta+3.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta+2.0*(18.0-162.0*xi+243.0*xi*xi+(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0+891.0*xi-2673.0/2.0*xi*xi+2.0*(162.0-1458.0*xi+2187.0*xi*xi)*eta+3.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+6.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta+(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi+6.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta+2.0*(18.0-162.0*xi+243.0*xi*xi+(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 36.0*xi-162.0*xi*xi+162.0*xi*xi*xi+2.0*(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+(405.0/2.0-729.0/2.0*xi+(-4455.0/4.0+8019.0/4.0*xi)*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(-405.0/2.0+729.0/2.0*xi+(4455.0/4.0-8019.0/4.0*xi)*eta+(-3645.0/2.0+6561.0/2.0*xi)*eta*eta+(3645.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 9.0-45.0*xi+81.0/2.0*xi*xi+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(81.0-405.0*xi+729.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 9.0-45.0*xi+81.0/2.0*xi*xi+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(81.0-405.0*xi+729.0/2.0*xi*xi)*eta*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -81.0*xi+405.0/2.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+(-162.0+729.0/2.0*xi+(891.0-8019.0/4.0*xi)*eta+(-1458.0+6561.0/2.0*xi)*eta*eta+(729.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(162.0-729.0/2.0*xi+(-891.0+8019.0/4.0*xi)*eta+(1458.0-6561.0/2.0*xi)*eta*eta+(-729.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -9.0/2.0+36.0*xi-81.0/2.0*xi*xi+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -9.0/2.0+36.0*xi-81.0/2.0*xi*xi+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 81.0/2.0*xi-162.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi+(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (162.0-243.0*xi+(-891.0+2673.0/2.0*xi)*eta+(1458.0-2187.0*xi)*eta*eta+(-729.0+2187.0/2.0*xi)*eta*eta*eta)*zeta+(-405.0+1215.0/2.0*xi+(4455.0/2.0-13365.0/4.0*xi)*eta+(-3645.0+10935.0/2.0*xi)*eta*eta+(3645.0/2.0-10935.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(243.0-729.0/2.0*xi+(-2673.0/2.0+8019.0/4.0*xi)*eta+(2187.0-6561.0/2.0*xi)*eta*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi+2.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi+2.0*(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+3.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi+2.0*(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -99.0/2.0+162.0*xi-243.0/2.0*xi*xi+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi+2.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi+2.0*(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+3.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi+2.0*(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi+6.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta)*zeta+(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi+6.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -99.0/2.0+162.0*xi-243.0/2.0*xi*xi+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -45.0+495.0/2.0*xi-405.0*xi*xi+405.0/2.0*xi*xi*xi+2.0*(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi+(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (-81.0+243.0/2.0*xi+(891.0/2.0-2673.0/4.0*xi)*eta+(-729.0+2187.0/2.0*xi)*eta*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta*eta)*zeta+(324.0-486.0*xi+(-1782.0+2673.0*xi)*eta+(2916.0-4374.0*xi)*eta*eta+(-1458.0+2187.0*xi)*eta*eta*eta)*zeta*zeta+(-243.0+729.0/2.0*xi+(2673.0/2.0-8019.0/4.0*xi)*eta+(-2187.0+6561.0/2.0*xi)*eta*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi+2.0*(-891.0+2916.0*xi-2187.0*xi*xi)*eta+3.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi+2.0*(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta+2.0*(-99.0+324.0*xi-243.0*xi*xi+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(297.0/4.0-243.0*xi+729.0/4.0*xi*xi+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi+2.0*(-891.0+2916.0*xi-2187.0*xi*xi)*eta+3.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi+2.0*(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+6.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta+(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi+6.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 99.0/4.0-81.0*xi+243.0/4.0*xi*xi+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta+2.0*(-99.0+324.0*xi-243.0*xi*xi+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(297.0/4.0-243.0*xi+729.0/4.0*xi*xi+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+2.0*(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 36.0-198.0*xi+324.0*xi*xi-162.0*xi*xi*xi+2.0*(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi+(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((495.0/2.0-891.0/2.0*xi)*eta+(-4455.0/4.0+8019.0/4.0*xi)*eta*eta+(4455.0/4.0-8019.0/4.0*xi)*eta*eta*eta)*zeta+((-405.0+729.0*xi)*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta+(-3645.0/2.0+6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((405.0/2.0-729.0/2.0*xi)*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta+(3645.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+2.0*(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+3.0*(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(81.0-405.0*xi+729.0/2.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+2.0*(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+3.0*(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(81.0-405.0*xi+729.0/2.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(891.0/2.0*xi-4455.0/4.0*xi*xi+2673.0/4.0*xi*xi*xi+6.0*(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta)*zeta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+6.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+3.0*(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi)*eta+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta+(-891.0/4.0+4455.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -99.0/2.0*xi+495.0/4.0*xi*xi-297.0/4.0*xi*xi*xi+2.0*(891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta+3.0*(-891.0/4.0*xi+4455.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi)*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((-198.0+891.0/2.0*xi)*eta+(891.0-8019.0/4.0*xi)*eta*eta+(-891.0+8019.0/4.0*xi)*eta*eta*eta)*zeta+((324.0-729.0*xi)*eta+(-1458.0+6561.0/2.0*xi)*eta*eta+(1458.0-6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((-162.0+729.0/2.0*xi)*eta+(729.0-6561.0/4.0*xi)*eta*eta+(-729.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi+2.0*(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(99.0/4.0-198.0*xi+891.0/4.0*xi*xi+2.0*(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-891.0/4.0*xi+891.0*xi*xi-2673.0/4.0*xi*xi*xi+6.0*(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta)*zeta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi+6.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+3.0*(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (99.0/4.0-198.0*xi+891.0/4.0*xi*xi)*eta+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta*eta+(891.0/8.0-891.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 99.0/4.0*xi-99.0*xi*xi+297.0/4.0*xi*xi*xi+2.0*(-891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta+3.0*(891.0/8.0*xi-891.0/2.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi)*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-81.0+243.0*xi)*eta+(729.0/2.0-2187.0/2.0*xi)*eta*eta+(-729.0/2.0+2187.0/2.0*xi)*eta*eta*eta)*zeta+((405.0/2.0-1215.0/2.0*xi)*eta+(-3645.0/4.0+10935.0/4.0*xi)*eta*eta+(3645.0/4.0-10935.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-243.0/2.0+729.0/2.0*xi)*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (9.0-81.0*xi+243.0/2.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi+2.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (9.0-81.0*xi+243.0/2.0*xi*xi+2.0*(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+3.0*(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta)*zeta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi+2.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+6.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta)*zeta+(405.0/2.0*xi-3645.0/4.0*xi*xi+3645.0/4.0*xi*xi*xi+6.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+6.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+2.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((81.0/2.0-243.0/2.0*xi)*eta+(-729.0/4.0+2187.0/4.0*xi)*eta*eta+(729.0/4.0-2187.0/4.0*xi)*eta*eta*eta)*zeta+((-162.0+486.0*xi)*eta+(729.0-2187.0*xi)*eta*eta+(-729.0+2187.0*xi)*eta*eta*eta)*zeta*zeta+((243.0/2.0-729.0/2.0*xi)*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta+(18.0-162.0*xi+243.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi+2.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta+2.0*((18.0-162.0*xi+243.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+3.0*(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta)*zeta+(18.0-162.0*xi+243.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi+2.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+6.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta)*zeta+(-162.0*xi+729.0*xi*xi-729.0*xi*xi*xi+6.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+6.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta*eta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta*eta*eta+2.0*((18.0-162.0*xi+243.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta*eta+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((405.0/2.0-729.0/2.0*xi)*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta+(3645.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-405.0/2.0+729.0/2.0*xi)*eta+(3645.0/4.0-6561.0/4.0*xi)*eta*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (9.0-45.0*xi+81.0/2.0*xi*xi)*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+6.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+6.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (9.0-45.0*xi+81.0/2.0*xi*xi)*eta+(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta+(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 9.0*xi-45.0/2.0*xi*xi+27.0/2.0*xi*xi*xi+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((-162.0+729.0/2.0*xi)*eta+(729.0-6561.0/4.0*xi)*eta*eta+(-729.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((162.0-729.0/2.0*xi)*eta+(-729.0+6561.0/4.0*xi)*eta*eta+(729.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi+2.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-9.0/2.0+36.0*xi-81.0/2.0*xi*xi)*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi+2.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi+6.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+6.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-9.0/2.0+36.0*xi-81.0/2.0*xi*xi)*eta+(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta+(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*((81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -9.0/2.0*xi+18.0*xi*xi-27.0/2.0*xi*xi*xi+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta+(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((162.0-243.0*xi)*eta+(-729.0+2187.0/2.0*xi)*eta*eta+(729.0-2187.0/2.0*xi)*eta*eta*eta)*zeta+((-405.0+1215.0/2.0*xi)*eta+(3645.0/2.0-10935.0/4.0*xi)*eta*eta+(-3645.0/2.0+10935.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((243.0-729.0/2.0*xi)*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi+2.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-99.0/2.0+162.0*xi-243.0/2.0*xi*xi+2.0*(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+3.0*(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta)*zeta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi+2.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+6.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta)*zeta+(405.0/2.0-4455.0/4.0*xi+3645.0/2.0*xi*xi-3645.0/4.0*xi*xi*xi+6.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi+6.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta*eta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+2.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta*eta+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+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-81.0+243.0/2.0*xi)*eta+(729.0/2.0-2187.0/4.0*xi)*eta*eta+(-729.0/2.0+2187.0/4.0*xi)*eta*eta*eta)*zeta+((324.0-486.0*xi)*eta+(-1458.0+2187.0*xi)*eta*eta+(1458.0-2187.0*xi)*eta*eta*eta)*zeta*zeta+((-243.0+729.0/2.0*xi)*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0+324.0*xi-243.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi+2.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta+2.0*((-99.0+324.0*xi-243.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+3.0*(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta)*zeta+(-99.0+324.0*xi-243.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi+2.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi+6.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta)*zeta+(-162.0+891.0*xi-1458.0*xi*xi+729.0*xi*xi*xi+6.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi+6.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta*eta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta*eta*eta+2.0*((-99.0+324.0*xi-243.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta*eta+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta*eta+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+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((-891.0+2673.0/2.0*xi)*eta+(4455.0/2.0-13365.0/4.0*xi)*eta*eta+(-2673.0/2.0+8019.0/4.0*xi)*eta*eta*eta)*zeta+((1458.0-2187.0*xi)*eta+(-3645.0+10935.0/2.0*xi)*eta*eta+(2187.0-6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((-729.0+2187.0/2.0*xi)*eta+(3645.0/2.0-10935.0/4.0*xi)*eta*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi+2.0*(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta+3.0*(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi+2.0*(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+3.0*(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta*eta+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi+2.0*(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta+3.0*(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi+2.0*(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+3.0*(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(495.0/2.0-5445.0/4.0*xi+4455.0/2.0*xi*xi-4455.0/4.0*xi*xi*xi+6.0*(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta)*zeta+(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi+6.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(405.0/2.0-4455.0/4.0*xi+3645.0/2.0*xi*xi-3645.0/4.0*xi*xi*xi+6.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta+3.0*(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (1089.0/4.0-891.0*xi+2673.0/4.0*xi*xi)*eta+(-5445.0/8.0+4455.0/2.0*xi-13365.0/8.0*xi*xi)*eta*eta+(3267.0/8.0-2673.0/2.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -99.0/2.0+1089.0/4.0*xi-891.0/2.0*xi*xi+891.0/4.0*xi*xi*xi+2.0*(495.0/4.0-5445.0/8.0*xi+4455.0/4.0*xi*xi-4455.0/8.0*xi*xi*xi)*eta+3.0*(-297.0/4.0+3267.0/8.0*xi-2673.0/4.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta*eta+2.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((891.0/2.0-2673.0/4.0*xi)*eta+(-1782.0+2673.0*xi)*eta*eta+(2673.0/2.0-8019.0/4.0*xi)*eta*eta*eta)*zeta+((-729.0+2187.0/2.0*xi)*eta+(2916.0-4374.0*xi)*eta*eta+(-2187.0+6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((729.0/2.0-2187.0/4.0*xi)*eta+(-1458.0+2187.0*xi)*eta*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta+3.0*(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-891.0+2916.0*xi-2187.0*xi*xi)*eta+3.0*(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta*eta+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi+2.0*(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta+3.0*(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-891.0+2916.0*xi-2187.0*xi*xi)*eta+3.0*(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-198.0+1089.0*xi-1782.0*xi*xi+891.0*xi*xi*xi+6.0*(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta)*zeta+(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi+6.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-162.0+891.0*xi-1458.0*xi*xi+729.0*xi*xi*xi+6.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta+3.0*(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-1089.0/8.0+891.0/2.0*xi-2673.0/8.0*xi*xi)*eta+(1089.0/2.0-1782.0*xi+2673.0/2.0*xi*xi)*eta*eta+(-3267.0/8.0+2673.0/2.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 99.0/4.0-1089.0/8.0*xi+891.0/4.0*xi*xi-891.0/8.0*xi*xi*xi+2.0*(-99.0+1089.0/2.0*xi-891.0*xi*xi+891.0/2.0*xi*xi*xi)*eta+3.0*(297.0/4.0-3267.0/8.0*xi+2673.0/4.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta*eta+2.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((891.0/2.0-2673.0/2.0*xi)*eta+(-4455.0/4.0+13365.0/4.0*xi)*eta*eta+(2673.0/4.0-8019.0/4.0*xi)*eta*eta*eta)*zeta+((-729.0+2187.0*xi)*eta+(3645.0/2.0-10935.0/2.0*xi)*eta*eta+(-2187.0/2.0+6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((729.0/2.0-2187.0/2.0*xi)*eta+(-3645.0/4.0+10935.0/4.0*xi)*eta*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi+2.0*(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta+3.0*(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(81.0-729.0*xi+2187.0/2.0*xi*xi+2.0*(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+3.0*(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta*eta+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi+2.0*(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta+3.0*(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta)*zeta+(81.0-729.0*xi+2187.0/2.0*xi*xi+2.0*(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+3.0*(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(495.0/2.0*xi-4455.0/4.0*xi*xi+4455.0/4.0*xi*xi*xi+6.0*(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta)*zeta+(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi+6.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(405.0/2.0*xi-3645.0/4.0*xi*xi+3645.0/4.0*xi*xi*xi+6.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta+3.0*(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-99.0/2.0+891.0/2.0*xi-2673.0/4.0*xi*xi)*eta+(495.0/4.0-4455.0/4.0*xi+13365.0/8.0*xi*xi)*eta*eta+(-297.0/4.0+2673.0/4.0*xi-8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -99.0/2.0*xi+891.0/4.0*xi*xi-891.0/4.0*xi*xi*xi+2.0*(495.0/4.0*xi-4455.0/8.0*xi*xi+4455.0/8.0*xi*xi*xi)*eta+3.0*(-297.0/4.0*xi+2673.0/8.0*xi*xi-2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta*eta+2.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((-891.0/4.0+2673.0/4.0*xi)*eta+(891.0-2673.0*xi)*eta*eta+(-2673.0/4.0+8019.0/4.0*xi)*eta*eta*eta)*zeta+((729.0/2.0-2187.0/2.0*xi)*eta+(-1458.0+4374.0*xi)*eta*eta+(2187.0/2.0-6561.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((-729.0/4.0+2187.0/4.0*xi)*eta+(729.0-2187.0*xi)*eta*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta+3.0*(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(162.0-1458.0*xi+2187.0*xi*xi)*eta+3.0*(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta*eta+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi+2.0*(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta+3.0*(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(162.0-1458.0*xi+2187.0*xi*xi)*eta+3.0*(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-198.0*xi+891.0*xi*xi-891.0*xi*xi*xi+6.0*(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta)*zeta+(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi+6.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-162.0*xi+729.0*xi*xi-729.0*xi*xi*xi+6.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta+3.0*(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (99.0/4.0-891.0/4.0*xi+2673.0/8.0*xi*xi)*eta+(-99.0+891.0*xi-2673.0/2.0*xi*xi)*eta*eta+(297.0/4.0-2673.0/4.0*xi+8019.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 99.0/4.0*xi-891.0/8.0*xi*xi+891.0/8.0*xi*xi*xi+2.0*(-99.0*xi+891.0/2.0*xi*xi-891.0/2.0*xi*xi*xi)*eta+3.0*(297.0/4.0*xi-2673.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta*eta+2.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((729.0/2.0-2187.0/2.0*xi)*eta+(-3645.0/4.0+10935.0/4.0*xi)*eta*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-729.0/2.0+2187.0/2.0*xi)*eta+(3645.0/4.0-10935.0/4.0*xi)*eta*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi+2.0*(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta*eta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta+(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi+2.0*(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(405.0/2.0*xi-3645.0/4.0*xi*xi+3645.0/4.0*xi*xi*xi+6.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi+6.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (9.0-81.0*xi+243.0/2.0*xi*xi)*eta+(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta*eta+(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*((-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((81.0/2.0-729.0/2.0*xi+2187.0/4.0*xi*xi)*eta+(-405.0/4.0+3645.0/4.0*xi-10935.0/8.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 9.0*xi-81.0/2.0*xi*xi+81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0*xi+405.0/4.0*xi*xi-405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+2.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((81.0/2.0*xi-729.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-405.0/4.0*xi+3645.0/8.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((-729.0/4.0+2187.0/4.0*xi)*eta+(729.0-2187.0*xi)*eta*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((729.0/4.0-2187.0/4.0*xi)*eta+(-729.0+2187.0*xi)*eta*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi+2.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(18.0-162.0*xi+243.0*xi*xi)*eta*eta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi+2.0*(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-162.0*xi+729.0*xi*xi-729.0*xi*xi*xi+6.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi+6.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+(18.0-162.0*xi+243.0*xi*xi)*eta*eta+(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*((81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-81.0/4.0+729.0/4.0*xi-2187.0/8.0*xi*xi)*eta+(81.0-729.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi+2.0*(18.0*xi-81.0*xi*xi+81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+2.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-81.0/4.0*xi+729.0/8.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+(81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((-729.0+2187.0/2.0*xi)*eta+(3645.0/2.0-10935.0/4.0*xi)*eta*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((729.0-2187.0/2.0*xi)*eta+(-3645.0/2.0+10935.0/4.0*xi)*eta*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi+2.0*(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta*eta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta+(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi+2.0*(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(405.0/2.0-4455.0/4.0*xi+3645.0/2.0*xi*xi-3645.0/4.0*xi*xi*xi+6.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi+6.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta*eta+(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta*eta+2.0*((891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-891.0/4.0+729.0*xi-2187.0/4.0*xi*xi)*eta+(4455.0/8.0-3645.0/2.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 9.0-99.0/2.0*xi+81.0*xi*xi-81.0/2.0*xi*xi*xi+2.0*(-45.0/2.0+495.0/4.0*xi-405.0/2.0*xi*xi+405.0/4.0*xi*xi*xi)*eta+3.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta*eta+2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta*eta+2.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((81.0/2.0-891.0/4.0*xi+729.0/2.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(-405.0/4.0+4455.0/8.0*xi-3645.0/4.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta*eta+(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((729.0/2.0-2187.0/4.0*xi)*eta+(-1458.0+2187.0*xi)*eta*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-729.0/2.0+2187.0/4.0*xi)*eta+(1458.0-2187.0*xi)*eta*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi+2.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-99.0+324.0*xi-243.0*xi*xi)*eta*eta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi+2.0*(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-162.0+891.0*xi-1458.0*xi*xi+729.0*xi*xi*xi+6.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi+6.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+(-99.0+324.0*xi-243.0*xi*xi)*eta*eta+(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta*eta+2.0*((-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((891.0/8.0-729.0/2.0*xi+2187.0/8.0*xi*xi)*eta+(-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi+2.0*(18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi)*eta+3.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta*eta+2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi)*eta+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta*eta+2.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-81.0/4.0+891.0/8.0*xi-729.0/4.0*xi*xi+729.0/8.0*xi*xi*xi)*eta+(81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi)*eta*eta+(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (-405.0+729.0*xi+(4455.0/2.0-8019.0/2.0*xi)*eta+(-3645.0+6561.0*xi)*eta*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta*eta)*zeta+(2025.0/2.0-3645.0/2.0*xi+(-22275.0/4.0+40095.0/4.0*xi)*eta+(18225.0/2.0-32805.0/2.0*xi)*eta*eta+(-18225.0/4.0+32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(-1215.0/2.0+2187.0/2.0*xi+(13365.0/4.0-24057.0/4.0*xi)*eta+(-10935.0/2.0+19683.0/2.0*xi)*eta*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi+2.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi+2.0*(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+3.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi+2.0*(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 81.0-405.0*xi+729.0/2.0*xi*xi+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi+2.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi+2.0*(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+3.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi+2.0*(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi+6.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta+(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi+6.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi+2.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 81.0-405.0*xi+729.0/2.0*xi*xi+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi+2.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -405.0*xi+2025.0/2.0*xi*xi-1215.0/2.0*xi*xi*xi+2.0*(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta+(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (324.0-729.0*xi+(-1782.0+8019.0/2.0*xi)*eta+(2916.0-6561.0*xi)*eta*eta+(-1458.0+6561.0/2.0*xi)*eta*eta*eta)*zeta+(-810.0+3645.0/2.0*xi+(4455.0-40095.0/4.0*xi)*eta+(-7290.0+32805.0/2.0*xi)*eta*eta+(3645.0-32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+(486.0-2187.0/2.0*xi+(-2673.0+24057.0/4.0*xi)*eta+(4374.0-19683.0/2.0*xi)*eta*eta+(-2187.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi+2.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi+2.0*(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+3.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi+2.0*(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -81.0/2.0+324.0*xi-729.0/2.0*xi*xi+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi+2.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi+2.0*(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+3.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi+2.0*(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi+6.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta+(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi+6.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi+6.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi+2.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -81.0/2.0+324.0*xi-729.0/2.0*xi*xi+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi+2.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 405.0/2.0*xi-810.0*xi*xi+1215.0/2.0*xi*xi*xi+2.0*(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta*eta+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi+(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (405.0/2.0-729.0/2.0*xi+(-4455.0/4.0+8019.0/4.0*xi)*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta+(-810.0+1458.0*xi+(4455.0-8019.0*xi)*eta+(-7290.0+13122.0*xi)*eta*eta+(3645.0-6561.0*xi)*eta*eta*eta)*zeta*zeta+(1215.0/2.0-2187.0/2.0*xi+(-13365.0/4.0+24057.0/4.0*xi)*eta+(10935.0/2.0-19683.0/2.0*xi)*eta*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0+4455.0*xi-8019.0/2.0*xi*xi+2.0*(1458.0-7290.0*xi+6561.0*xi*xi)*eta+3.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi+2.0*(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = -81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*(162.0-810.0*xi+729.0*xi*xi+(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0+4455.0*xi-8019.0/2.0*xi*xi+2.0*(1458.0-7290.0*xi+6561.0*xi*xi)*eta+3.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi+2.0*(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta+(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi+6.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi+6.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi+2.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = -81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*(162.0-810.0*xi+729.0*xi*xi+(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi+2.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 324.0*xi-810.0*xi*xi+486.0*xi*xi*xi+2.0*(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta*eta+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = (-162.0+729.0/2.0*xi+(891.0-8019.0/4.0*xi)*eta+(-1458.0+6561.0/2.0*xi)*eta*eta+(729.0-6561.0/4.0*xi)*eta*eta*eta)*zeta+(648.0-1458.0*xi+(-3564.0+8019.0*xi)*eta+(5832.0-13122.0*xi)*eta*eta+(-2916.0+6561.0*xi)*eta*eta*eta)*zeta*zeta+(-486.0+2187.0/2.0*xi+(2673.0-24057.0/4.0*xi)*eta+(-4374.0+19683.0/2.0*xi)*eta*eta+(2187.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi+2.0*(-729.0+5832.0*xi-6561.0*xi*xi)*eta+3.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi+2.0*(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = 81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*(-81.0+648.0*xi-729.0*xi*xi+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi+2.0*(-729.0+5832.0*xi-6561.0*xi*xi)*eta+3.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi+2.0*(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta+(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi+6.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi+6.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi+2.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = 81.0/4.0-162.0*xi+729.0/4.0*xi*xi+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*(-81.0+648.0*xi-729.0*xi*xi+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi+2.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = -162.0*xi+648.0*xi*xi-486.0*xi*xi*xi+2.0*(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi+(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-405.0+729.0*xi)*eta+(3645.0/2.0-6561.0/2.0*xi)*eta*eta+(-3645.0/2.0+6561.0/2.0*xi)*eta*eta*eta)*zeta+((2025.0/2.0-3645.0/2.0*xi)*eta+(-18225.0/4.0+32805.0/4.0*xi)*eta*eta+(18225.0/4.0-32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-1215.0/2.0+2187.0/2.0*xi)*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (81.0-405.0*xi+729.0/2.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi+2.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (81.0-405.0*xi+729.0/2.0*xi*xi+2.0*(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+3.0*(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi+2.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+6.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta+(3645.0/2.0*xi-18225.0/4.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi+6.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+2.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((324.0-729.0*xi)*eta+(-1458.0+6561.0/2.0*xi)*eta*eta+(1458.0-6561.0/2.0*xi)*eta*eta*eta)*zeta+((-810.0+3645.0/2.0*xi)*eta+(3645.0-32805.0/4.0*xi)*eta*eta+(-3645.0+32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((486.0-2187.0/2.0*xi)*eta+(-2187.0+19683.0/4.0*xi)*eta*eta+(2187.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi+2.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-81.0/2.0+324.0*xi-729.0/2.0*xi*xi+2.0*(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+3.0*(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi+2.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+6.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta+(-3645.0/4.0*xi+3645.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi+6.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta*eta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+2.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((405.0/2.0-729.0/2.0*xi)*eta+(-3645.0/4.0+6561.0/4.0*xi)*eta*eta+(3645.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta+((-810.0+1458.0*xi)*eta+(3645.0-6561.0*xi)*eta*eta+(-3645.0+6561.0*xi)*eta*eta*eta)*zeta*zeta+((1215.0/2.0-2187.0/2.0*xi)*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(162.0-810.0*xi+729.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((162.0-810.0*xi+729.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(162.0-810.0*xi+729.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+6.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta+(-1458.0*xi+3645.0*xi*xi-2187.0*xi*xi*xi+6.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((162.0-810.0*xi+729.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-162.0+729.0/2.0*xi)*eta+(729.0-6561.0/4.0*xi)*eta*eta+(-729.0+6561.0/4.0*xi)*eta*eta*eta)*zeta+((648.0-1458.0*xi)*eta+(-2916.0+6561.0*xi)*eta*eta+(2916.0-6561.0*xi)*eta*eta*eta)*zeta*zeta+((-486.0+2187.0/2.0*xi)*eta+(2187.0-19683.0/4.0*xi)*eta*eta+(-2187.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0+648.0*xi-729.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi+2.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0+648.0*xi-729.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+3.0*(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0+648.0*xi-729.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi+2.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi+6.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta+(729.0*xi-2916.0*xi*xi+2187.0*xi*xi*xi+6.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi+6.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta*eta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0+648.0*xi-729.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((4455.0/2.0-8019.0/2.0*xi)*eta+(-22275.0/4.0+40095.0/4.0*xi)*eta*eta+(13365.0/4.0-24057.0/4.0*xi)*eta*eta*eta)*zeta+((-3645.0+6561.0*xi)*eta+(18225.0/2.0-32805.0/2.0*xi)*eta*eta+(-10935.0/2.0+19683.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((3645.0/2.0-6561.0/2.0*xi)*eta+(-18225.0/4.0+32805.0/4.0*xi)*eta*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi+2.0*(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta+3.0*(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta*eta)*zeta+(729.0-3645.0*xi+6561.0/2.0*xi*xi+2.0*(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+3.0*(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta*eta+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi+2.0*(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta+3.0*(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta*eta)*zeta+(729.0-3645.0*xi+6561.0/2.0*xi*xi+2.0*(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+3.0*(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(4455.0/2.0*xi-22275.0/4.0*xi*xi+13365.0/4.0*xi*xi*xi+6.0*(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta)*zeta+(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi+6.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(3645.0/2.0*xi-18225.0/4.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta+3.0*(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-891.0/2.0+4455.0/2.0*xi-8019.0/4.0*xi*xi)*eta+(4455.0/4.0-22275.0/4.0*xi+40095.0/8.0*xi*xi)*eta*eta+(-2673.0/4.0+13365.0/4.0*xi-24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -891.0/2.0*xi+4455.0/4.0*xi*xi-2673.0/4.0*xi*xi*xi+2.0*(4455.0/4.0*xi-22275.0/8.0*xi*xi+13365.0/8.0*xi*xi*xi)*eta+3.0*(-2673.0/4.0*xi+13365.0/8.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta*eta+2.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((-1782.0+8019.0/2.0*xi)*eta+(4455.0-40095.0/4.0*xi)*eta*eta+(-2673.0+24057.0/4.0*xi)*eta*eta*eta)*zeta+((2916.0-6561.0*xi)*eta+(-7290.0+32805.0/2.0*xi)*eta*eta+(4374.0-19683.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((-1458.0+6561.0/2.0*xi)*eta+(3645.0-32805.0/4.0*xi)*eta*eta+(-2187.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi+2.0*(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi+2.0*(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+3.0*(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi+2.0*(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi+2.0*(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+3.0*(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-4455.0/4.0*xi+4455.0*xi*xi-13365.0/4.0*xi*xi*xi+6.0*(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta)*zeta+(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-3645.0/4.0*xi+3645.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta+3.0*(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (891.0/4.0-1782.0*xi+8019.0/4.0*xi*xi)*eta+(-4455.0/8.0+4455.0*xi-40095.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2673.0*xi+24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 891.0/4.0*xi-891.0*xi*xi+2673.0/4.0*xi*xi*xi+2.0*(-4455.0/8.0*xi+4455.0/2.0*xi*xi-13365.0/8.0*xi*xi*xi)*eta+3.0*(2673.0/8.0*xi-2673.0/2.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta*eta+2.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((-4455.0/4.0+8019.0/4.0*xi)*eta+(4455.0-8019.0*xi)*eta*eta+(-13365.0/4.0+24057.0/4.0*xi)*eta*eta*eta)*zeta+((3645.0/2.0-6561.0/2.0*xi)*eta+(-7290.0+13122.0*xi)*eta*eta+(10935.0/2.0-19683.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((-3645.0/4.0+6561.0/4.0*xi)*eta+(3645.0-6561.0*xi)*eta*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta+3.0*(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(1458.0-7290.0*xi+6561.0*xi*xi)*eta+3.0*(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta*eta+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi+2.0*(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta+3.0*(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(1458.0-7290.0*xi+6561.0*xi*xi)*eta+3.0*(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(-1782.0*xi+4455.0*xi*xi-2673.0*xi*xi*xi+6.0*(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta)*zeta+(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi+6.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(-1458.0*xi+3645.0*xi*xi-2187.0*xi*xi*xi+6.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta+3.0*(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (891.0/4.0-4455.0/4.0*xi+8019.0/8.0*xi*xi)*eta+(-891.0+4455.0*xi-8019.0/2.0*xi*xi)*eta*eta+(2673.0/4.0-13365.0/4.0*xi+24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 891.0/4.0*xi-4455.0/8.0*xi*xi+2673.0/8.0*xi*xi*xi+2.0*(-891.0*xi+4455.0/2.0*xi*xi-2673.0/2.0*xi*xi*xi)*eta+3.0*(2673.0/4.0*xi-13365.0/8.0*xi*xi+8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta*eta+2.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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+((891.0-8019.0/4.0*xi)*eta+(-3564.0+8019.0*xi)*eta*eta+(2673.0-24057.0/4.0*xi)*eta*eta*eta)*zeta+((-1458.0+6561.0/2.0*xi)*eta+(5832.0-13122.0*xi)*eta*eta+(-4374.0+19683.0/2.0*xi)*eta*eta*eta)*zeta*zeta+((729.0-6561.0/4.0*xi)*eta+(-2916.0+6561.0*xi)*eta*eta+(2187.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta*eta)*zeta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-729.0+5832.0*xi-6561.0*xi*xi)*eta+3.0*(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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+(-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi+2.0*(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta*eta)*zeta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-729.0+5832.0*xi-6561.0*xi*xi)*eta+3.0*(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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+(891.0*xi-3564.0*xi*xi+2673.0*xi*xi*xi+6.0*(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta)*zeta+(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi+6.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta)*zeta*zeta+(729.0*xi-2916.0*xi*xi+2187.0*xi*xi*xi+6.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta+3.0*(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-891.0/8.0+891.0*xi-8019.0/8.0*xi*xi)*eta+(891.0/2.0-3564.0*xi+8019.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2673.0*xi-24057.0/8.0*xi*xi)*eta*eta*eta+2.0*((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -891.0/8.0*xi+891.0/2.0*xi*xi-2673.0/8.0*xi*xi*xi+2.0*(891.0/2.0*xi-1782.0*xi*xi+2673.0/2.0*xi*xi*xi)*eta+3.0*(-2673.0/8.0*xi+2673.0/2.0*xi*xi-8019.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta*eta+2.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta*eta+6.0*((-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-729.0+2187.0*xi)*eta+(3645.0/2.0-10935.0/2.0*xi)*eta*eta+(-2187.0/2.0+6561.0/2.0*xi)*eta*eta*eta)*zeta+((3645.0/2.0-10935.0/2.0*xi)*eta+(-18225.0/4.0+54675.0/4.0*xi)*eta*eta+(10935.0/4.0-32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/2.0+6561.0/2.0*xi)*eta+(10935.0/4.0-32805.0/4.0*xi)*eta*eta+(-6561.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (81.0-729.0*xi+2187.0/2.0*xi*xi+2.0*(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+3.0*(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi+2.0*(2025.0/4.0-18225.0/4.0*xi+54675.0/8.0*xi*xi)*eta+3.0*(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi+2.0*(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+(2025.0/4.0-18225.0/4.0*xi+54675.0/8.0*xi*xi)*eta*eta+(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta+(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta+(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (81.0-729.0*xi+2187.0/2.0*xi*xi+2.0*(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+3.0*(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi+2.0*(2025.0/4.0-18225.0/4.0*xi+54675.0/8.0*xi*xi)*eta+3.0*(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi+2.0*(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi+6.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta+(2025.0/2.0*xi-18225.0/4.0*xi*xi+18225.0/4.0*xi*xi*xi+6.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-1215.0/2.0*xi+10935.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi+2.0*(2025.0/4.0*xi-18225.0/8.0*xi*xi+18225.0/8.0*xi*xi*xi)*eta+3.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (81.0-729.0*xi+2187.0/2.0*xi*xi)*eta+(-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta*eta+(243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((-405.0/2.0+3645.0/2.0*xi-10935.0/4.0*xi*xi)*eta+(2025.0/4.0-18225.0/4.0*xi+54675.0/8.0*xi*xi)*eta*eta+(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/2.0-2187.0/2.0*xi+6561.0/4.0*xi*xi)*eta+(-1215.0/4.0+10935.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta+(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0*xi-729.0/2.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi+2.0*(2025.0/4.0*xi-18225.0/8.0*xi*xi+18225.0/8.0*xi*xi*xi)*eta+3.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-405.0/2.0*xi+3645.0/4.0*xi*xi-3645.0/4.0*xi*xi*xi)*eta+2.0*(2025.0/4.0*xi-18225.0/8.0*xi*xi+18225.0/8.0*xi*xi*xi)*eta*eta+2.0*(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((243.0/2.0*xi-2187.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-1215.0/4.0*xi+10935.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((729.0/2.0-2187.0/2.0*xi)*eta+(-1458.0+4374.0*xi)*eta*eta+(2187.0/2.0-6561.0/2.0*xi)*eta*eta*eta)*zeta+((-3645.0/4.0+10935.0/4.0*xi)*eta+(3645.0-10935.0*xi)*eta*eta+(-10935.0/4.0+32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((2187.0/4.0-6561.0/4.0*xi)*eta+(-2187.0+6561.0*xi)*eta*eta+(6561.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(162.0-1458.0*xi+2187.0*xi*xi)*eta+3.0*(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi+2.0*(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta+3.0*(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi+2.0*(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta*eta+(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta+(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(162.0-1458.0*xi+2187.0*xi*xi)*eta+3.0*(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi+2.0*(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta+3.0*(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi+2.0*(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi+6.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta+(-810.0*xi+3645.0*xi*xi-3645.0*xi*xi*xi+6.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(486.0*xi-2187.0*xi*xi+2187.0*xi*xi*xi+6.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta+3.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(162.0-1458.0*xi+2187.0*xi*xi)*eta*eta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta*eta+(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta+(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta+3.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta*eta+2.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((729.0/2.0-2187.0/2.0*xi)*eta+(-3645.0/4.0+10935.0/4.0*xi)*eta*eta+(2187.0/4.0-6561.0/4.0*xi)*eta*eta*eta)*zeta+((-1458.0+4374.0*xi)*eta+(3645.0-10935.0*xi)*eta*eta+(-2187.0+6561.0*xi)*eta*eta*eta)*zeta*zeta+((2187.0/2.0-6561.0/2.0*xi)*eta+(-10935.0/4.0+32805.0/4.0*xi)*eta*eta+(6561.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(162.0-1458.0*xi+2187.0*xi*xi+2.0*(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta+3.0*(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((162.0-1458.0*xi+2187.0*xi*xi)*eta+(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta*eta+(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi+2.0*(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta+3.0*(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(162.0-1458.0*xi+2187.0*xi*xi+2.0*(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta+3.0*(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (405.0/2.0*xi-3645.0/4.0*xi*xi+3645.0/4.0*xi*xi*xi+6.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta+(-810.0*xi+3645.0*xi*xi-3645.0*xi*xi*xi+6.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(1215.0/2.0*xi-10935.0/4.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta+3.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-81.0/2.0+729.0/2.0*xi-2187.0/4.0*xi*xi)*eta+(405.0/4.0-3645.0/4.0*xi+10935.0/8.0*xi*xi)*eta*eta+(-243.0/4.0+2187.0/4.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((162.0-1458.0*xi+2187.0*xi*xi)*eta+(-405.0+3645.0*xi-10935.0/2.0*xi*xi)*eta*eta+(243.0-2187.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-243.0/2.0+2187.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1215.0/4.0-10935.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-729.0/4.0+6561.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0*xi+729.0/4.0*xi*xi-729.0/4.0*xi*xi*xi+2.0*(405.0/4.0*xi-3645.0/8.0*xi*xi+3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+2187.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta+3.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(162.0*xi-729.0*xi*xi+729.0*xi*xi*xi)*eta+2.0*(-405.0*xi+3645.0/2.0*xi*xi-3645.0/2.0*xi*xi*xi)*eta*eta+2.0*(243.0*xi-2187.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((-243.0/2.0*xi+2187.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(1215.0/4.0*xi-10935.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0*xi+6561.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-729.0/4.0+2187.0/4.0*xi)*eta+(729.0-2187.0*xi)*eta*eta+(-2187.0/4.0+6561.0/4.0*xi)*eta*eta*eta)*zeta+((729.0-2187.0*xi)*eta+(-2916.0+8748.0*xi)*eta*eta+(2187.0-6561.0*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/4.0+6561.0/4.0*xi)*eta+(2187.0-6561.0*xi)*eta*eta+(-6561.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0+729.0*xi-2187.0/2.0*xi*xi+2.0*(324.0-2916.0*xi+4374.0*xi*xi)*eta+3.0*(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+(324.0-2916.0*xi+4374.0*xi*xi)*eta*eta+(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi+2.0*(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+3.0*(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-81.0+729.0*xi-2187.0/2.0*xi*xi+2.0*(324.0-2916.0*xi+4374.0*xi*xi)*eta+3.0*(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-162.0*xi+729.0*xi*xi-729.0*xi*xi*xi+6.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta+(648.0*xi-2916.0*xi*xi+2916.0*xi*xi*xi+6.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-486.0*xi+2187.0*xi*xi-2187.0*xi*xi*xi+6.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi)*eta+3.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (81.0/4.0-729.0/4.0*xi+2187.0/8.0*xi*xi)*eta+(-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta*eta+(243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((-81.0+729.0*xi-2187.0/2.0*xi*xi)*eta+(324.0-2916.0*xi+4374.0*xi*xi)*eta*eta+(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((243.0/4.0-2187.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-243.0+2187.0*xi-6561.0/2.0*xi*xi)*eta*eta+(729.0/4.0-6561.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0/4.0*xi-729.0/8.0*xi*xi+729.0/8.0*xi*xi*xi+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi)*eta+3.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0*xi+729.0/2.0*xi*xi-729.0/2.0*xi*xi*xi)*eta+2.0*(324.0*xi-1458.0*xi*xi+1458.0*xi*xi*xi)*eta*eta+2.0*(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((243.0/4.0*xi-2187.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-243.0*xi+2187.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0*xi-6561.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((3645.0/2.0-6561.0/2.0*xi)*eta+(-18225.0/4.0+32805.0/4.0*xi)*eta*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-3645.0/2.0+6561.0/2.0*xi)*eta+(18225.0/4.0-32805.0/4.0*xi)*eta*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta*eta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(3645.0/2.0*xi-18225.0/4.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (81.0-405.0*xi+729.0/2.0*xi*xi)*eta+(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta*eta+(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/2.0-3645.0/2.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/4.0+18225.0/4.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0*xi-405.0/2.0*xi*xi+243.0/2.0*xi*xi*xi+2.0*(-405.0/2.0*xi+2025.0/4.0*xi*xi-1215.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+2.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((729.0/2.0*xi-3645.0/4.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(-3645.0/4.0*xi+18225.0/8.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((-1458.0+6561.0/2.0*xi)*eta+(3645.0-32805.0/4.0*xi)*eta*eta+(-2187.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((1458.0-6561.0/2.0*xi)*eta+(-3645.0+32805.0/4.0*xi)*eta*eta+(2187.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-3645.0/4.0*xi+3645.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta*eta+(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/4.0+1458.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/8.0-3645.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0*xi+162.0*xi*xi-243.0/2.0*xi*xi*xi+2.0*(405.0/4.0*xi-405.0*xi*xi+1215.0/4.0*xi*xi*xi)*eta+3.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+2.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-729.0/4.0*xi+729.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(3645.0/8.0*xi-3645.0/2.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((-3645.0/4.0+6561.0/4.0*xi)*eta+(3645.0-6561.0*xi)*eta*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((3645.0/4.0-6561.0/4.0*xi)*eta+(-3645.0+6561.0*xi)*eta*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi+2.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(162.0-810.0*xi+729.0*xi*xi)*eta*eta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi+2.0*(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-1458.0*xi+3645.0*xi*xi-2187.0*xi*xi*xi+6.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+(162.0-810.0*xi+729.0*xi*xi)*eta*eta+(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-729.0/4.0+3645.0/4.0*xi-6561.0/8.0*xi*xi)*eta+(729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi+2.0*(162.0*xi-405.0*xi*xi+243.0*xi*xi*xi)*eta+3.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta*eta+2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+2.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-729.0/4.0*xi+3645.0/8.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-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)*zeta+((729.0-6561.0/4.0*xi)*eta+(-2916.0+6561.0*xi)*eta*eta+(2187.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-729.0+6561.0/4.0*xi)*eta+(2916.0-6561.0*xi)*eta*eta+(-2187.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-81.0+648.0*xi-729.0*xi*xi)*eta*eta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-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)*zeta+(-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(729.0/8.0-729.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-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)*zeta+(729.0*xi-2916.0*xi*xi+2187.0*xi*xi*xi+6.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi+6.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+(-81.0+648.0*xi-729.0*xi*xi)*eta*eta+(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta*eta+2.0*((-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((729.0/8.0-729.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi+2.0*(-81.0*xi+324.0*xi*xi-243.0*xi*xi*xi)*eta+3.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta*eta+2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+2.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((729.0/8.0*xi-729.0/2.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(-729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((1458.0-2187.0*xi)*eta+(-3645.0+10935.0/2.0*xi)*eta*eta+(2187.0-6561.0/2.0*xi)*eta*eta*eta)*zeta+((-3645.0+10935.0/2.0*xi)*eta+(18225.0/2.0-54675.0/4.0*xi)*eta*eta+(-10935.0/2.0+32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((2187.0-6561.0/2.0*xi)*eta+(-10935.0/2.0+32805.0/4.0*xi)*eta*eta+(6561.0/2.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi+2.0*(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+3.0*(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi+2.0*(-22275.0/8.0+18225.0/2.0*xi-54675.0/8.0*xi*xi)*eta+3.0*(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi+2.0*(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+(-22275.0/8.0+18225.0/2.0*xi-54675.0/8.0*xi*xi)*eta*eta+(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta+(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi+2.0*(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+3.0*(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta)*zeta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi+2.0*(-22275.0/8.0+18225.0/2.0*xi-54675.0/8.0*xi*xi)*eta+3.0*(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi+2.0*(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi+6.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta)*zeta+(2025.0/2.0-22275.0/4.0*xi+18225.0/2.0*xi*xi-18225.0/4.0*xi*xi*xi+6.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-1215.0/2.0+13365.0/4.0*xi-10935.0/2.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi+2.0*(2025.0/4.0-22275.0/8.0*xi+18225.0/4.0*xi*xi-18225.0/8.0*xi*xi*xi)*eta+3.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-891.0/2.0+1458.0*xi-2187.0/2.0*xi*xi)*eta+(4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta*eta+(-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((4455.0/4.0-3645.0*xi+10935.0/4.0*xi*xi)*eta+(-22275.0/8.0+18225.0/2.0*xi-54675.0/8.0*xi*xi)*eta*eta+(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2673.0/4.0+2187.0*xi-6561.0/4.0*xi*xi)*eta+(13365.0/8.0-10935.0/2.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0-891.0/2.0*xi+729.0*xi*xi-729.0/2.0*xi*xi*xi+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi+2.0*(2025.0/4.0-22275.0/8.0*xi+18225.0/4.0*xi*xi-18225.0/8.0*xi*xi*xi)*eta+3.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-405.0/2.0+4455.0/4.0*xi-3645.0/2.0*xi*xi+3645.0/4.0*xi*xi*xi)*eta+2.0*(2025.0/4.0-22275.0/8.0*xi+18225.0/4.0*xi*xi-18225.0/8.0*xi*xi*xi)*eta*eta+2.0*(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((243.0/2.0-2673.0/4.0*xi+2187.0/2.0*xi*xi-2187.0/4.0*xi*xi*xi)*eta+(-1215.0/4.0+13365.0/8.0*xi-10935.0/4.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta*eta+(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-729.0+2187.0/2.0*xi)*eta+(2916.0-4374.0*xi)*eta*eta+(-2187.0+6561.0/2.0*xi)*eta*eta*eta)*zeta+((3645.0/2.0-10935.0/4.0*xi)*eta+(-7290.0+10935.0*xi)*eta*eta+(10935.0/2.0-32805.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-2187.0/2.0+6561.0/4.0*xi)*eta+(4374.0-6561.0*xi)*eta*eta+(-6561.0/2.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-891.0+2916.0*xi-2187.0*xi*xi)*eta+3.0*(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi+2.0*(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta+3.0*(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi+2.0*(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta*eta+(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta+(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta+(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-891.0+2916.0*xi-2187.0*xi*xi)*eta+3.0*(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta)*zeta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi+2.0*(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta+3.0*(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi+2.0*(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi+6.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta)*zeta+(-810.0+4455.0*xi-7290.0*xi*xi+3645.0*xi*xi*xi+6.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(486.0-2673.0*xi+4374.0*xi*xi-2187.0*xi*xi*xi+6.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta+3.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-891.0+2916.0*xi-2187.0*xi*xi)*eta*eta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta*eta*eta+2.0*((-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta*eta+(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta+(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta+(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta*eta+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta+3.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta*eta+2.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta+(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta+(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-729.0+2187.0/2.0*xi)*eta+(3645.0/2.0-10935.0/4.0*xi)*eta*eta+(-2187.0/2.0+6561.0/4.0*xi)*eta*eta*eta)*zeta+((2916.0-4374.0*xi)*eta+(-7290.0+10935.0*xi)*eta*eta+(4374.0-6561.0*xi)*eta*eta*eta)*zeta*zeta+((-2187.0+6561.0/2.0*xi)*eta+(10935.0/2.0-32805.0/4.0*xi)*eta*eta+(-6561.0/2.0+19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0+2916.0*xi-2187.0*xi*xi+2.0*(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta+3.0*(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi+2.0*(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((-891.0+2916.0*xi-2187.0*xi*xi)*eta+(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta*eta+(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta+(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta+(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi+2.0*(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta+3.0*(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta)*zeta+(-891.0+2916.0*xi-2187.0*xi*xi+2.0*(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta+3.0*(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi+2.0*(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (405.0/2.0-4455.0/4.0*xi+3645.0/2.0*xi*xi-3645.0/4.0*xi*xi*xi+6.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta)*zeta+(-810.0+4455.0*xi-7290.0*xi*xi+3645.0*xi*xi*xi+6.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(1215.0/2.0-13365.0/4.0*xi+10935.0/2.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta+3.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (891.0/4.0-729.0*xi+2187.0/4.0*xi*xi)*eta+(-4455.0/8.0+3645.0/2.0*xi-10935.0/8.0*xi*xi)*eta*eta+(2673.0/8.0-2187.0/2.0*xi+6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((-891.0+2916.0*xi-2187.0*xi*xi)*eta+(4455.0/2.0-7290.0*xi+10935.0/2.0*xi*xi)*eta*eta+(-2673.0/2.0+4374.0*xi-6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2673.0/4.0-2187.0*xi+6561.0/4.0*xi*xi)*eta+(-13365.0/8.0+10935.0/2.0*xi-32805.0/8.0*xi*xi)*eta*eta+(8019.0/8.0-6561.0/2.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -81.0/2.0+891.0/4.0*xi-729.0/2.0*xi*xi+729.0/4.0*xi*xi*xi+2.0*(405.0/4.0-4455.0/8.0*xi+3645.0/4.0*xi*xi-3645.0/8.0*xi*xi*xi)*eta+3.0*(-243.0/4.0+2673.0/8.0*xi-2187.0/4.0*xi*xi+2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta+3.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(162.0-891.0*xi+1458.0*xi*xi-729.0*xi*xi*xi)*eta+2.0*(-405.0+4455.0/2.0*xi-3645.0*xi*xi+3645.0/2.0*xi*xi*xi)*eta*eta+2.0*(243.0-2673.0/2.0*xi+2187.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((-243.0/2.0+2673.0/4.0*xi-2187.0/2.0*xi*xi+2187.0/4.0*xi*xi*xi)*eta+(1215.0/4.0-13365.0/8.0*xi+10935.0/4.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta*eta+(-729.0/4.0+8019.0/8.0*xi-6561.0/4.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((729.0/2.0-2187.0/4.0*xi)*eta+(-1458.0+2187.0*xi)*eta*eta+(2187.0/2.0-6561.0/4.0*xi)*eta*eta*eta)*zeta+((-1458.0+2187.0*xi)*eta+(5832.0-8748.0*xi)*eta*eta+(-4374.0+6561.0*xi)*eta*eta*eta)*zeta*zeta+((2187.0/2.0-6561.0/4.0*xi)*eta+(-4374.0+6561.0*xi)*eta*eta+(6561.0/2.0-19683.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi+2.0*(-1782.0+5832.0*xi-4374.0*xi*xi)*eta+3.0*(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi+2.0*(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+(-1782.0+5832.0*xi-4374.0*xi*xi)*eta*eta+(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta+(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi+2.0*(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+3.0*(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta)*zeta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi+2.0*(-1782.0+5832.0*xi-4374.0*xi*xi)*eta+3.0*(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi+2.0*(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-162.0+891.0*xi-1458.0*xi*xi+729.0*xi*xi*xi+6.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta)*zeta+(648.0-3564.0*xi+5832.0*xi*xi-2916.0*xi*xi*xi+6.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-486.0+2673.0*xi-4374.0*xi*xi+2187.0*xi*xi*xi+6.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi)*eta+3.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-891.0/8.0+729.0/2.0*xi-2187.0/8.0*xi*xi)*eta+(891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta*eta+(-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta*eta*eta+2.0*((891.0/2.0-1458.0*xi+2187.0/2.0*xi*xi)*eta+(-1782.0+5832.0*xi-4374.0*xi*xi)*eta*eta+(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2673.0/8.0+2187.0/2.0*xi-6561.0/8.0*xi*xi)*eta+(2673.0/2.0-4374.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-8019.0/8.0+6561.0/2.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 81.0/4.0-891.0/8.0*xi+729.0/4.0*xi*xi-729.0/8.0*xi*xi*xi+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta*eta+2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi+2.0*(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi)*eta+3.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-81.0+891.0/2.0*xi-729.0*xi*xi+729.0/2.0*xi*xi*xi)*eta+2.0*(324.0-1782.0*xi+2916.0*xi*xi-1458.0*xi*xi*xi)*eta*eta+2.0*(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((243.0/4.0-2673.0/8.0*xi+2187.0/4.0*xi*xi-2187.0/8.0*xi*xi*xi)*eta+(-243.0+2673.0/2.0*xi-2187.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta*eta+(729.0/4.0-8019.0/8.0*xi+6561.0/4.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-3645.0+6561.0*xi)*eta+(18225.0/2.0-32805.0/2.0*xi)*eta*eta+(-10935.0/2.0+19683.0/2.0*xi)*eta*eta*eta)*zeta+((18225.0/2.0-32805.0/2.0*xi)*eta+(-91125.0/4.0+164025.0/4.0*xi)*eta*eta+(54675.0/4.0-98415.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-10935.0/2.0+19683.0/2.0*xi)*eta+(54675.0/4.0-98415.0/4.0*xi)*eta*eta+(-32805.0/4.0+59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (729.0-3645.0*xi+6561.0/2.0*xi*xi+2.0*(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+3.0*(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi+2.0*(18225.0/4.0-91125.0/4.0*xi+164025.0/8.0*xi*xi)*eta+3.0*(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi+2.0*(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta+3.0*(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+(18225.0/4.0-91125.0/4.0*xi+164025.0/8.0*xi*xi)*eta*eta+(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta+(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta+(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (729.0-3645.0*xi+6561.0/2.0*xi*xi+2.0*(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+3.0*(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi+2.0*(18225.0/4.0-91125.0/4.0*xi+164025.0/8.0*xi*xi)*eta+3.0*(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi+2.0*(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta+3.0*(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi+6.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta)*zeta+(18225.0/2.0*xi-91125.0/4.0*xi*xi+54675.0/4.0*xi*xi*xi+6.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-10935.0/2.0*xi+54675.0/4.0*xi*xi-32805.0/4.0*xi*xi*xi+6.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi+2.0*(18225.0/4.0*xi-91125.0/8.0*xi*xi+54675.0/8.0*xi*xi*xi)*eta+3.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi+2.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta+3.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (729.0-3645.0*xi+6561.0/2.0*xi*xi)*eta+(-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta*eta+(2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((-3645.0/2.0+18225.0/2.0*xi-32805.0/4.0*xi*xi)*eta+(18225.0/4.0-91125.0/4.0*xi+164025.0/8.0*xi*xi)*eta*eta+(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/2.0-10935.0/2.0*xi+19683.0/4.0*xi*xi)*eta+(-10935.0/4.0+54675.0/4.0*xi-98415.0/8.0*xi*xi)*eta*eta+(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 729.0*xi-3645.0/2.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi+2.0*(18225.0/4.0*xi-91125.0/8.0*xi*xi+54675.0/8.0*xi*xi*xi)*eta+3.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi+2.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta+3.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-3645.0/2.0*xi+18225.0/4.0*xi*xi-10935.0/4.0*xi*xi*xi)*eta+2.0*(18225.0/4.0*xi-91125.0/8.0*xi*xi+54675.0/8.0*xi*xi*xi)*eta*eta+2.0*(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((2187.0/2.0*xi-10935.0/4.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+(-10935.0/4.0*xi+54675.0/8.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta+(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((2916.0-6561.0*xi)*eta+(-7290.0+32805.0/2.0*xi)*eta*eta+(4374.0-19683.0/2.0*xi)*eta*eta*eta)*zeta+((-7290.0+32805.0/2.0*xi)*eta+(18225.0-164025.0/4.0*xi)*eta*eta+(-10935.0+98415.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((4374.0-19683.0/2.0*xi)*eta+(-10935.0+98415.0/4.0*xi)*eta*eta+(6561.0-59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi+2.0*(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+3.0*(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi+2.0*(-18225.0/8.0+18225.0*xi-164025.0/8.0*xi*xi)*eta+3.0*(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi+2.0*(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta+3.0*(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+(-18225.0/8.0+18225.0*xi-164025.0/8.0*xi*xi)*eta*eta+(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta+(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta+(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi+2.0*(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+3.0*(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi+2.0*(-18225.0/8.0+18225.0*xi-164025.0/8.0*xi*xi)*eta+3.0*(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi+2.0*(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta+3.0*(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta)*zeta+(-18225.0/4.0*xi+18225.0*xi*xi-54675.0/4.0*xi*xi*xi+6.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(10935.0/4.0*xi-10935.0*xi*xi+32805.0/4.0*xi*xi*xi+6.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi+2.0*(-18225.0/8.0*xi+18225.0/2.0*xi*xi-54675.0/8.0*xi*xi*xi)*eta+3.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi+2.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta+3.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-729.0/2.0+2916.0*xi-6561.0/2.0*xi*xi)*eta+(3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta*eta+(-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((3645.0/4.0-7290.0*xi+32805.0/4.0*xi*xi)*eta+(-18225.0/8.0+18225.0*xi-164025.0/8.0*xi*xi)*eta*eta+(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/4.0+4374.0*xi-19683.0/4.0*xi*xi)*eta+(10935.0/8.0-10935.0*xi+98415.0/8.0*xi*xi)*eta*eta+(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -729.0/2.0*xi+1458.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi+2.0*(-18225.0/8.0*xi+18225.0/2.0*xi*xi-54675.0/8.0*xi*xi*xi)*eta+3.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi+2.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta+3.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(3645.0/4.0*xi-3645.0*xi*xi+10935.0/4.0*xi*xi*xi)*eta+2.0*(-18225.0/8.0*xi+18225.0/2.0*xi*xi-54675.0/8.0*xi*xi*xi)*eta*eta+2.0*(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-2187.0/4.0*xi+2187.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+(10935.0/8.0*xi-10935.0/2.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta+(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((3645.0/2.0-6561.0/2.0*xi)*eta+(-7290.0+13122.0*xi)*eta*eta+(10935.0/2.0-19683.0/2.0*xi)*eta*eta*eta)*zeta+((-18225.0/4.0+32805.0/4.0*xi)*eta+(18225.0-32805.0*xi)*eta*eta+(-54675.0/4.0+98415.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((10935.0/4.0-19683.0/4.0*xi)*eta+(-10935.0+19683.0*xi)*eta*eta+(32805.0/4.0-59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(1458.0-7290.0*xi+6561.0*xi*xi)*eta+3.0*(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi+2.0*(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta+3.0*(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi+2.0*(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta+3.0*(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta*eta+(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta+(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta+(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(1458.0-7290.0*xi+6561.0*xi*xi)*eta+3.0*(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta)*zeta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi+2.0*(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta+3.0*(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi+2.0*(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta+3.0*(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi+6.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta)*zeta+(-7290.0*xi+18225.0*xi*xi-10935.0*xi*xi*xi+6.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(4374.0*xi-10935.0*xi*xi+6561.0*xi*xi*xi+6.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta+3.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi+2.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta+3.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(1458.0-7290.0*xi+6561.0*xi*xi)*eta*eta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta*eta+(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta+(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta+(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta+3.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi+2.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta+3.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta*eta+2.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta+(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-1458.0+6561.0/2.0*xi)*eta+(5832.0-13122.0*xi)*eta*eta+(-4374.0+19683.0/2.0*xi)*eta*eta*eta)*zeta+((3645.0-32805.0/4.0*xi)*eta+(-14580.0+32805.0*xi)*eta*eta+(10935.0-98415.0/4.0*xi)*eta*eta*eta)*zeta*zeta+((-2187.0+19683.0/4.0*xi)*eta+(8748.0-19683.0*xi)*eta*eta+(-6561.0+59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-729.0+5832.0*xi-6561.0*xi*xi)*eta+3.0*(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi+2.0*(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta+3.0*(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi+2.0*(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta+3.0*(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta*eta+(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta+(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta+(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-729.0+5832.0*xi-6561.0*xi*xi)*eta+3.0*(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta)*zeta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi+2.0*(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta+3.0*(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi+2.0*(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta+3.0*(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi+6.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta)*zeta+(3645.0*xi-14580.0*xi*xi+10935.0*xi*xi*xi+6.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta)*zeta*zeta+(-2187.0*xi+8748.0*xi*xi-6561.0*xi*xi*xi+6.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta+3.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi+2.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta+3.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-729.0+5832.0*xi-6561.0*xi*xi)*eta*eta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta*eta*eta+2.0*((-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta*eta+(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta+(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta+(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta*eta+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta+3.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi+2.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta+3.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta*eta+2.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta*eta+6.0*((2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta+(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((3645.0/2.0-6561.0/2.0*xi)*eta+(-18225.0/4.0+32805.0/4.0*xi)*eta*eta+(10935.0/4.0-19683.0/4.0*xi)*eta*eta*eta)*zeta+((-7290.0+13122.0*xi)*eta+(18225.0-32805.0*xi)*eta*eta+(-10935.0+19683.0*xi)*eta*eta*eta)*zeta*zeta+((10935.0/2.0-19683.0/2.0*xi)*eta+(-54675.0/4.0+98415.0/4.0*xi)*eta*eta+(32805.0/4.0-59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta+(1458.0-7290.0*xi+6561.0*xi*xi+2.0*(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta+3.0*(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi+2.0*(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta+3.0*(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((1458.0-7290.0*xi+6561.0*xi*xi)*eta+(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta*eta+(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta+(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta+(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi+2.0*(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta+3.0*(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta+(1458.0-7290.0*xi+6561.0*xi*xi+2.0*(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta+3.0*(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi+2.0*(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta+3.0*(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (3645.0/2.0*xi-18225.0/4.0*xi*xi+10935.0/4.0*xi*xi*xi+6.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta+(-7290.0*xi+18225.0*xi*xi-10935.0*xi*xi*xi+6.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(10935.0/2.0*xi-54675.0/4.0*xi*xi+32805.0/4.0*xi*xi*xi+6.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta+3.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi+2.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta+3.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-729.0/2.0+3645.0/2.0*xi-6561.0/4.0*xi*xi)*eta+(3645.0/4.0-18225.0/4.0*xi+32805.0/8.0*xi*xi)*eta*eta+(-2187.0/4.0+10935.0/4.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((1458.0-7290.0*xi+6561.0*xi*xi)*eta+(-3645.0+18225.0*xi-32805.0/2.0*xi*xi)*eta*eta+(2187.0-10935.0*xi+19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/2.0+10935.0/2.0*xi-19683.0/4.0*xi*xi)*eta+(10935.0/4.0-54675.0/4.0*xi+98415.0/8.0*xi*xi)*eta*eta+(-6561.0/4.0+32805.0/4.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -729.0/2.0*xi+3645.0/4.0*xi*xi-2187.0/4.0*xi*xi*xi+2.0*(3645.0/4.0*xi-18225.0/8.0*xi*xi+10935.0/8.0*xi*xi*xi)*eta+3.0*(-2187.0/4.0*xi+10935.0/8.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta+3.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi+2.0*(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta+3.0*(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(1458.0*xi-3645.0*xi*xi+2187.0*xi*xi*xi)*eta+2.0*(-3645.0*xi+18225.0/2.0*xi*xi-10935.0/2.0*xi*xi*xi)*eta*eta+2.0*(2187.0*xi-10935.0/2.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((-2187.0/2.0*xi+10935.0/4.0*xi*xi-6561.0/4.0*xi*xi*xi)*eta+(10935.0/4.0*xi-54675.0/8.0*xi*xi+32805.0/8.0*xi*xi*xi)*eta*eta+(-6561.0/4.0*xi+32805.0/8.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-1458.0+6561.0/2.0*xi)*eta+(3645.0-32805.0/4.0*xi)*eta*eta+(-2187.0+19683.0/4.0*xi)*eta*eta*eta)*zeta+((5832.0-13122.0*xi)*eta+(-14580.0+32805.0*xi)*eta*eta+(8748.0-19683.0*xi)*eta*eta*eta)*zeta*zeta+((-4374.0+19683.0/2.0*xi)*eta+(10935.0-98415.0/4.0*xi)*eta*eta+(-6561.0+59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0+5832.0*xi-6561.0*xi*xi+2.0*(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta+3.0*(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi+2.0*(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta+3.0*(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0+5832.0*xi-6561.0*xi*xi)*eta+(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta*eta+(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta+(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta+(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi+2.0*(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta+3.0*(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0+5832.0*xi-6561.0*xi*xi+2.0*(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta+3.0*(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi+2.0*(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta+3.0*(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-3645.0/4.0*xi+3645.0*xi*xi-10935.0/4.0*xi*xi*xi+6.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta+(3645.0*xi-14580.0*xi*xi+10935.0*xi*xi*xi+6.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-10935.0/4.0*xi+10935.0*xi*xi-32805.0/4.0*xi*xi*xi+6.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi+2.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta+3.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (729.0/4.0-1458.0*xi+6561.0/4.0*xi*xi)*eta+(-3645.0/8.0+3645.0*xi-32805.0/8.0*xi*xi)*eta*eta+(2187.0/8.0-2187.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0+5832.0*xi-6561.0*xi*xi)*eta+(3645.0/2.0-14580.0*xi+32805.0/2.0*xi*xi)*eta*eta+(-2187.0/2.0+8748.0*xi-19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/4.0-4374.0*xi+19683.0/4.0*xi*xi)*eta+(-10935.0/8.0+10935.0*xi-98415.0/8.0*xi*xi)*eta*eta+(6561.0/8.0-6561.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 729.0/4.0*xi-729.0*xi*xi+2187.0/4.0*xi*xi*xi+2.0*(-3645.0/8.0*xi+3645.0/2.0*xi*xi-10935.0/8.0*xi*xi*xi)*eta+3.0*(2187.0/8.0*xi-2187.0/2.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi+2.0*(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta+3.0*(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-729.0*xi+2916.0*xi*xi-2187.0*xi*xi*xi)*eta+2.0*(3645.0/2.0*xi-7290.0*xi*xi+10935.0/2.0*xi*xi*xi)*eta*eta+2.0*(-2187.0/2.0*xi+4374.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((2187.0/4.0*xi-2187.0*xi*xi+6561.0/4.0*xi*xi*xi)*eta+(-10935.0/8.0*xi+10935.0/2.0*xi*xi-32805.0/8.0*xi*xi*xi)*eta*eta+(6561.0/8.0*xi-6561.0/2.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((-3645.0/4.0+6561.0/4.0*xi)*eta+(3645.0-6561.0*xi)*eta*eta+(-10935.0/4.0+19683.0/4.0*xi)*eta*eta*eta)*zeta+((3645.0-6561.0*xi)*eta+(-14580.0+26244.0*xi)*eta*eta+(10935.0-19683.0*xi)*eta*eta*eta)*zeta*zeta+((-10935.0/4.0+19683.0/4.0*xi)*eta+(10935.0-19683.0*xi)*eta*eta+(-32805.0/4.0+59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi+2.0*(2916.0-14580.0*xi+13122.0*xi*xi)*eta+3.0*(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi+2.0*(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta+3.0*(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+(2916.0-14580.0*xi+13122.0*xi*xi)*eta*eta+(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta+(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta+(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi+2.0*(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+3.0*(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta)*zeta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi+2.0*(2916.0-14580.0*xi+13122.0*xi*xi)*eta+3.0*(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi+2.0*(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta+3.0*(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (-1458.0*xi+3645.0*xi*xi-2187.0*xi*xi*xi+6.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta)*zeta+(5832.0*xi-14580.0*xi*xi+8748.0*xi*xi*xi+6.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(-4374.0*xi+10935.0*xi*xi-6561.0*xi*xi*xi+6.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = 729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi)*eta+3.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi+2.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta+3.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (729.0/4.0-3645.0/4.0*xi+6561.0/8.0*xi*xi)*eta+(-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta*eta+(2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((-729.0+3645.0*xi-6561.0/2.0*xi*xi)*eta+(2916.0-14580.0*xi+13122.0*xi*xi)*eta*eta+(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((2187.0/4.0-10935.0/4.0*xi+19683.0/8.0*xi*xi)*eta+(-2187.0+10935.0*xi-19683.0/2.0*xi*xi)*eta*eta+(6561.0/4.0-32805.0/4.0*xi+59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = 729.0/4.0*xi-3645.0/8.0*xi*xi+2187.0/8.0*xi*xi*xi+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi+2.0*(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi)*eta+3.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi+2.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta+3.0*(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(-729.0*xi+3645.0/2.0*xi*xi-2187.0/2.0*xi*xi*xi)*eta+2.0*(2916.0*xi-7290.0*xi*xi+4374.0*xi*xi*xi)*eta*eta+2.0*(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((2187.0/4.0*xi-10935.0/8.0*xi*xi+6561.0/8.0*xi*xi*xi)*eta+(-2187.0*xi+10935.0/2.0*xi*xi-6561.0/2.0*xi*xi*xi)*eta*eta+(6561.0/4.0*xi-32805.0/8.0*xi*xi+19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-return_value[0][0] = ((729.0-6561.0/4.0*xi)*eta+(-2916.0+6561.0*xi)*eta*eta+(2187.0-19683.0/4.0*xi)*eta*eta*eta)*zeta+((-2916.0+6561.0*xi)*eta+(11664.0-26244.0*xi)*eta*eta+(-8748.0+19683.0*xi)*eta*eta*eta)*zeta*zeta+((2187.0-19683.0/4.0*xi)*eta+(-8748.0+19683.0*xi)*eta*eta+(6561.0-59049.0/4.0*xi)*eta*eta*eta)*zeta*zeta*zeta;
-return_value[0][1] = (-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi+2.0*(-1458.0+11664.0*xi-13122.0*xi*xi)*eta+3.0*(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi+2.0*(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta+3.0*(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[0][2] = (-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+(-1458.0+11664.0*xi-13122.0*xi*xi)*eta*eta+(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta+(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta+(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[1][0] = (-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi+2.0*(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+3.0*(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta)*zeta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi+2.0*(-1458.0+11664.0*xi-13122.0*xi*xi)*eta+3.0*(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta)*zeta*zeta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi+2.0*(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta+3.0*(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta)*zeta*zeta*zeta;
-return_value[1][1] = (729.0*xi-2916.0*xi*xi+2187.0*xi*xi*xi+6.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta)*zeta+(-2916.0*xi+11664.0*xi*xi-8748.0*xi*xi*xi+6.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta)*zeta*zeta+(2187.0*xi-8748.0*xi*xi+6561.0*xi*xi*xi+6.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta)*zeta*zeta*zeta;
-return_value[1][2] = -729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi+2.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta+3.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][0] = (-729.0/8.0+729.0*xi-6561.0/8.0*xi*xi)*eta+(729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta*eta+(-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta*eta*eta+2.0*((729.0/2.0-2916.0*xi+6561.0/2.0*xi*xi)*eta+(-1458.0+11664.0*xi-13122.0*xi*xi)*eta*eta+(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta*eta)*zeta+3.0*((-2187.0/8.0+2187.0*xi-19683.0/8.0*xi*xi)*eta+(2187.0/2.0-8748.0*xi+19683.0/2.0*xi*xi)*eta*eta+(-6561.0/8.0+6561.0*xi-59049.0/8.0*xi*xi)*eta*eta*eta)*zeta*zeta;
-return_value[2][1] = -729.0/8.0*xi+729.0/2.0*xi*xi-2187.0/8.0*xi*xi*xi+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta*eta+2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi+2.0*(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi)*eta+3.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta)*zeta+3.0*(-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi+2.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta+3.0*(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta)*zeta*zeta;
-return_value[2][2] = 2.0*(729.0/2.0*xi-1458.0*xi*xi+2187.0/2.0*xi*xi*xi)*eta+2.0*(-1458.0*xi+5832.0*xi*xi-4374.0*xi*xi*xi)*eta*eta+2.0*(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta*eta+6.0*((-2187.0/8.0*xi+2187.0/2.0*xi*xi-6561.0/8.0*xi*xi*xi)*eta+(2187.0/2.0*xi-4374.0*xi*xi+6561.0/2.0*xi*xi*xi)*eta*eta+(-6561.0/8.0*xi+6561.0/2.0*xi*xi-19683.0/8.0*xi*xi*xi)*eta*eta*eta)*zeta;
-      break;
-    };
-  return return_value;
-};
-
-
-template <>
-void
-FEQ3<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                               FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  throw ExcComputationNotUseful(3);
-};
-
-
-template <>
-void FEQ3<3>::get_unit_support_points (std::vector<Point<3> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(), dofs_per_cell));
-  unit_points[0] = Point<3>(0, 0, 0);
-  unit_points[1] = Point<3>(1, 0, 0);
-  unit_points[2] = Point<3>(1, 0, 1);
-  unit_points[3] = Point<3>(0, 0, 1);
-  unit_points[4] = Point<3>(0, 1, 0);
-  unit_points[5] = Point<3>(1, 1, 0);
-  unit_points[6] = Point<3>(1, 1, 1);
-  unit_points[7] = Point<3>(0, 1, 1);
-  unit_points[8] = Point<3>(1/3, 0, 0);
-  unit_points[9] = Point<3>(2/3, 0, 0);
-  unit_points[10] = Point<3>(1, 0, 1/3);
-  unit_points[11] = Point<3>(1, 0, 2/3);
-  unit_points[12] = Point<3>(1/3, 0, 1);
-  unit_points[13] = Point<3>(2/3, 0, 1);
-  unit_points[14] = Point<3>(0, 0, 1/3);
-  unit_points[15] = Point<3>(0, 0, 2/3);
-  unit_points[16] = Point<3>(1/3, 1, 0);
-  unit_points[17] = Point<3>(2/3, 1, 0);
-  unit_points[18] = Point<3>(1, 1, 1/3);
-  unit_points[19] = Point<3>(1, 1, 2/3);
-  unit_points[20] = Point<3>(1/3, 1, 1);
-  unit_points[21] = Point<3>(2/3, 1, 1);
-  unit_points[22] = Point<3>(0, 1, 1/3);
-  unit_points[23] = Point<3>(0, 1, 2/3);
-  unit_points[24] = Point<3>(0, 1/3, 0);
-  unit_points[25] = Point<3>(0, 2/3, 0);
-  unit_points[26] = Point<3>(1, 1/3, 0);
-  unit_points[27] = Point<3>(1, 2/3, 0);
-  unit_points[28] = Point<3>(1, 1/3, 1);
-  unit_points[29] = Point<3>(1, 2/3, 1);
-  unit_points[30] = Point<3>(0, 1/3, 1);
-  unit_points[31] = Point<3>(0, 2/3, 1);
-  unit_points[32] = Point<3>(1/3, 0, 1/3);
-  unit_points[33] = Point<3>(2/3, 0, 1/3);
-  unit_points[34] = Point<3>(1/3, 0, 2/3);
-  unit_points[35] = Point<3>(2/3, 0, 2/3);
-  unit_points[36] = Point<3>(1/3, 1, 1/3);
-  unit_points[37] = Point<3>(2/3, 1, 1/3);
-  unit_points[38] = Point<3>(1/3, 1, 2/3);
-  unit_points[39] = Point<3>(2/3, 1, 2/3);
-  unit_points[40] = Point<3>(1/3, 1/3, 0);
-  unit_points[41] = Point<3>(2/3, 1/3, 0);
-  unit_points[42] = Point<3>(1/3, 2/3, 0);
-  unit_points[43] = Point<3>(2/3, 2/3, 0);
-  unit_points[44] = Point<3>(1, 1/3, 1/3);
-  unit_points[45] = Point<3>(1, 2/3, 1/3);
-  unit_points[46] = Point<3>(1, 1/3, 2/3);
-  unit_points[47] = Point<3>(1, 2/3, 2/3);
-  unit_points[48] = Point<3>(1/3, 1/3, 1);
-  unit_points[49] = Point<3>(2/3, 1/3, 1);
-  unit_points[50] = Point<3>(1/3, 2/3, 1);
-  unit_points[51] = Point<3>(2/3, 2/3, 1);
-  unit_points[52] = Point<3>(0, 1/3, 1/3);
-  unit_points[53] = Point<3>(0, 2/3, 1/3);
-  unit_points[54] = Point<3>(0, 1/3, 2/3);
-  unit_points[55] = Point<3>(0, 2/3, 2/3);
-  unit_points[56] = Point<3>(1/3, 1/3, 1/3);
-  unit_points[57] = Point<3>(2/3, 1/3, 1/3);
-  unit_points[58] = Point<3>(1/3, 2/3, 1/3);
-  unit_points[59] = Point<3>(2/3, 2/3, 1/3);
-  unit_points[60] = Point<3>(1/3, 1/3, 2/3);
-  unit_points[61] = Point<3>(2/3, 1/3, 2/3);
-  unit_points[62] = Point<3>(1/3, 2/3, 2/3);
-  unit_points[63] = Point<3>(2/3, 2/3, 2/3);
-};
-
-
-template <>
-void FEQ3<3>::get_support_points (const typename DoFHandler<3>::cell_iterator &cell,
-                                 std::vector<Point<3> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (support_points.size(), dofs_per_cell));
-
-  const Point<3> vertices[8] = { cell->vertex(0),
-                                cell->vertex(1),
-                                cell->vertex(2),
-                                cell->vertex(3),
-                                cell->vertex(4),
-                                cell->vertex(5),
-                                cell->vertex(6),
-                                cell->vertex(7)  };
-  const double t1 = 2.0/3.0*vertices[0](0);
-  const double t2 = vertices[1](0)/3.0;
-  const double t4 = 2.0/3.0*vertices[0](1);
-  const double t5 = vertices[1](1)/3.0;
-  const double t7 = 2.0/3.0*vertices[0](2);
-  const double t8 = vertices[1](2)/3.0;
-  const double t10 = vertices[0](0)/3.0;
-  const double t11 = 2.0/3.0*vertices[1](0);
-  const double t13 = vertices[0](1)/3.0;
-  const double t14 = 2.0/3.0*vertices[1](1);
-  const double t16 = vertices[0](2)/3.0;
-  const double t17 = 2.0/3.0*vertices[1](2);
-  const double t19 = vertices[2](0)/3.0;
-  const double t21 = vertices[2](1)/3.0;
-  const double t23 = vertices[2](2)/3.0;
-  const double t25 = 2.0/3.0*vertices[2](0);
-  const double t27 = 2.0/3.0*vertices[2](1);
-  const double t29 = 2.0/3.0*vertices[2](2);
-  const double t31 = 2.0/3.0*vertices[3](0);
-  const double t33 = 2.0/3.0*vertices[3](1);
-  const double t35 = 2.0/3.0*vertices[3](2);
-  const double t37 = vertices[3](0)/3.0;
-  const double t39 = vertices[3](1)/3.0;
-  const double t41 = vertices[3](2)/3.0;
-  const double t49 = 2.0/3.0*vertices[4](0);
-  const double t50 = vertices[5](0)/3.0;
-  const double t52 = 2.0/3.0*vertices[4](1);
-  const double t53 = vertices[5](1)/3.0;
-  const double t55 = 2.0/3.0*vertices[4](2);
-  const double t56 = vertices[5](2)/3.0;
-  const double t58 = vertices[4](0)/3.0;
-  const double t59 = 2.0/3.0*vertices[5](0);
-  const double t61 = vertices[4](1)/3.0;
-  const double t62 = 2.0/3.0*vertices[5](1);
-  const double t64 = vertices[4](2)/3.0;
-  const double t65 = 2.0/3.0*vertices[5](2);
-  const double t67 = vertices[6](0)/3.0;
-  const double t69 = vertices[6](1)/3.0;
-  const double t71 = vertices[6](2)/3.0;
-  const double t73 = 2.0/3.0*vertices[6](0);
-  const double t75 = 2.0/3.0*vertices[6](1);
-  const double t77 = 2.0/3.0*vertices[6](2);
-  const double t79 = 2.0/3.0*vertices[7](0);
-  const double t81 = 2.0/3.0*vertices[7](1);
-  const double t83 = 2.0/3.0*vertices[7](2);
-  const double t85 = vertices[7](0)/3.0;
-  const double t87 = vertices[7](1)/3.0;
-  const double t89 = vertices[7](2)/3.0;
-  const double t121 = 4.0/9.0*vertices[0](0);
-  const double t122 = 2.0/9.0*vertices[1](0);
-  const double t123 = vertices[2](0)/9.0;
-  const double t124 = 2.0/9.0*vertices[3](0);
-  const double t126 = 4.0/9.0*vertices[0](1);
-  const double t127 = 2.0/9.0*vertices[1](1);
-  const double t128 = vertices[2](1)/9.0;
-  const double t129 = 2.0/9.0*vertices[3](1);
-  const double t131 = 4.0/9.0*vertices[0](2);
-  const double t132 = 2.0/9.0*vertices[1](2);
-  const double t133 = vertices[2](2)/9.0;
-  const double t134 = 2.0/9.0*vertices[3](2);
-  const double t136 = 2.0/9.0*vertices[0](0);
-  const double t137 = 4.0/9.0*vertices[1](0);
-  const double t138 = 2.0/9.0*vertices[2](0);
-  const double t139 = vertices[3](0)/9.0;
-  const double t141 = 2.0/9.0*vertices[0](1);
-  const double t142 = 4.0/9.0*vertices[1](1);
-  const double t143 = 2.0/9.0*vertices[2](1);
-  const double t144 = vertices[3](1)/9.0;
-  const double t146 = 2.0/9.0*vertices[0](2);
-  const double t147 = 4.0/9.0*vertices[1](2);
-  const double t148 = 2.0/9.0*vertices[2](2);
-  const double t149 = vertices[3](2)/9.0;
-  const double t151 = vertices[1](0)/9.0;
-  const double t152 = 4.0/9.0*vertices[3](0);
-  const double t154 = vertices[1](1)/9.0;
-  const double t155 = 4.0/9.0*vertices[3](1);
-  const double t157 = vertices[1](2)/9.0;
-  const double t158 = 4.0/9.0*vertices[3](2);
-  const double t160 = vertices[0](0)/9.0;
-  const double t161 = 4.0/9.0*vertices[2](0);
-  const double t163 = vertices[0](1)/9.0;
-  const double t164 = 4.0/9.0*vertices[2](1);
-  const double t166 = vertices[0](2)/9.0;
-  const double t167 = 4.0/9.0*vertices[2](2);
-  const double t169 = 4.0/9.0*vertices[4](0);
-  const double t170 = 2.0/9.0*vertices[5](0);
-  const double t171 = vertices[6](0)/9.0;
-  const double t172 = 2.0/9.0*vertices[7](0);
-  const double t174 = 4.0/9.0*vertices[4](1);
-  const double t175 = 2.0/9.0*vertices[5](1);
-  const double t176 = vertices[6](1)/9.0;
-  const double t177 = 2.0/9.0*vertices[7](1);
-  const double t179 = 4.0/9.0*vertices[4](2);
-  const double t180 = 2.0/9.0*vertices[5](2);
-  const double t181 = vertices[6](2)/9.0;
-  const double t182 = 2.0/9.0*vertices[7](2);
-  const double t184 = 2.0/9.0*vertices[4](0);
-  const double t185 = 4.0/9.0*vertices[5](0);
-  const double t186 = 2.0/9.0*vertices[6](0);
-  const double t187 = vertices[7](0)/9.0;
-  const double t189 = 2.0/9.0*vertices[4](1);
-  const double t190 = 4.0/9.0*vertices[5](1);
-  const double t191 = 2.0/9.0*vertices[6](1);
-  const double t192 = vertices[7](1)/9.0;
-  const double t194 = 2.0/9.0*vertices[4](2);
-  const double t195 = 4.0/9.0*vertices[5](2);
-  const double t196 = 2.0/9.0*vertices[6](2);
-  const double t197 = vertices[7](2)/9.0;
-  const double t199 = vertices[5](0)/9.0;
-  const double t200 = 4.0/9.0*vertices[7](0);
-  const double t202 = vertices[5](1)/9.0;
-  const double t203 = 4.0/9.0*vertices[7](1);
-  const double t205 = vertices[5](2)/9.0;
-  const double t206 = 4.0/9.0*vertices[7](2);
-  const double t208 = vertices[4](0)/9.0;
-  const double t209 = 4.0/9.0*vertices[6](0);
-  const double t211 = vertices[4](1)/9.0;
-  const double t212 = 4.0/9.0*vertices[6](1);
-  const double t214 = vertices[4](2)/9.0;
-  const double t215 = 4.0/9.0*vertices[6](2);
-  const double t266 = 4.0/27.0*vertices[1](0);
-  const double t267 = 2.0/27.0*vertices[2](0);
-  const double t268 = 4.0/27.0*vertices[3](0);
-  const double t269 = 4.0/27.0*vertices[4](0);
-  const double t270 = 2.0/27.0*vertices[5](0);
-  const double t272 = 2.0/27.0*vertices[7](0);
-  const double t275 = 4.0/27.0*vertices[1](1);
-  const double t276 = 2.0/27.0*vertices[2](1);
-  const double t277 = 4.0/27.0*vertices[3](1);
-  const double t278 = 4.0/27.0*vertices[4](1);
-  const double t279 = 2.0/27.0*vertices[5](1);
-  const double t281 = 2.0/27.0*vertices[7](1);
-  const double t284 = 4.0/27.0*vertices[1](2);
-  const double t285 = 2.0/27.0*vertices[2](2);
-  const double t286 = 4.0/27.0*vertices[3](2);
-  const double t287 = 4.0/27.0*vertices[4](2);
-  const double t288 = 2.0/27.0*vertices[5](2);
-  const double t290 = 2.0/27.0*vertices[7](2);
-  const double t292 = 4.0/27.0*vertices[0](0);
-  const double t294 = 4.0/27.0*vertices[2](0);
-  const double t295 = 2.0/27.0*vertices[3](0);
-  const double t296 = 2.0/27.0*vertices[4](0);
-  const double t297 = 4.0/27.0*vertices[5](0);
-  const double t298 = 2.0/27.0*vertices[6](0);
-  const double t301 = 4.0/27.0*vertices[0](1);
-  const double t303 = 4.0/27.0*vertices[2](1);
-  const double t304 = 2.0/27.0*vertices[3](1);
-  const double t305 = 2.0/27.0*vertices[4](1);
-  const double t306 = 4.0/27.0*vertices[5](1);
-  const double t307 = 2.0/27.0*vertices[6](1);
-  const double t310 = 4.0/27.0*vertices[0](2);
-  const double t312 = 4.0/27.0*vertices[2](2);
-  const double t313 = 2.0/27.0*vertices[3](2);
-  const double t314 = 2.0/27.0*vertices[4](2);
-  const double t315 = 4.0/27.0*vertices[5](2);
-  const double t316 = 2.0/27.0*vertices[6](2);
-  const double t319 = 2.0/27.0*vertices[1](0);
-  const double t322 = 4.0/27.0*vertices[7](0);
-  const double t324 = 2.0/27.0*vertices[1](1);
-  const double t327 = 4.0/27.0*vertices[7](1);
-  const double t329 = 2.0/27.0*vertices[1](2);
-  const double t332 = 4.0/27.0*vertices[7](2);
-  const double t334 = 2.0/27.0*vertices[0](0);
-  const double t337 = 4.0/27.0*vertices[6](0);
-  const double t339 = 2.0/27.0*vertices[0](1);
-  const double t342 = 4.0/27.0*vertices[6](1);
-  const double t344 = 2.0/27.0*vertices[0](2);
-  const double t347 = 4.0/27.0*vertices[6](2);
-  support_points[0](0) = vertices[0](0);
-  support_points[0](1) = vertices[0](1);
-  support_points[0](2) = vertices[0](2);
-  support_points[1](0) = vertices[1](0);
-  support_points[1](1) = vertices[1](1);
-  support_points[1](2) = vertices[1](2);
-  support_points[2](0) = vertices[2](0);
-  support_points[2](1) = vertices[2](1);
-  support_points[2](2) = vertices[2](2);
-  support_points[3](0) = vertices[3](0);
-  support_points[3](1) = vertices[3](1);
-  support_points[3](2) = vertices[3](2);
-  support_points[4](0) = vertices[4](0);
-  support_points[4](1) = vertices[4](1);
-  support_points[4](2) = vertices[4](2);
-  support_points[5](0) = vertices[5](0);
-  support_points[5](1) = vertices[5](1);
-  support_points[5](2) = vertices[5](2);
-  support_points[6](0) = vertices[6](0);
-  support_points[6](1) = vertices[6](1);
-  support_points[6](2) = vertices[6](2);
-  support_points[7](0) = vertices[7](0);
-  support_points[7](1) = vertices[7](1);
-  support_points[7](2) = vertices[7](2);
-  support_points[8](0) = t1+t2;
-  support_points[8](1) = t4+t5;
-  support_points[8](2) = t7+t8;
-  support_points[9](0) = t10+t11;
-  support_points[9](1) = t13+t14;
-  support_points[9](2) = t16+t17;
-  support_points[10](0) = t11+t19;
-  support_points[10](1) = t14+t21;
-  support_points[10](2) = t17+t23;
-  support_points[11](0) = t2+t25;
-  support_points[11](1) = t5+t27;
-  support_points[11](2) = t8+t29;
-  support_points[12](0) = t19+t31;
-  support_points[12](1) = t21+t33;
-  support_points[12](2) = t23+t35;
-  support_points[13](0) = t25+t37;
-  support_points[13](1) = t27+t39;
-  support_points[13](2) = t29+t41;
-  support_points[14](0) = t1+t37;
-  support_points[14](1) = t4+t39;
-  support_points[14](2) = t7+t41;
-  support_points[15](0) = t10+t31;
-  support_points[15](1) = t13+t33;
-  support_points[15](2) = t16+t35;
-  support_points[16](0) = t49+t50;
-  support_points[16](1) = t52+t53;
-  support_points[16](2) = t55+t56;
-  support_points[17](0) = t58+t59;
-  support_points[17](1) = t61+t62;
-  support_points[17](2) = t64+t65;
-  support_points[18](0) = t59+t67;
-  support_points[18](1) = t62+t69;
-  support_points[18](2) = t65+t71;
-  support_points[19](0) = t50+t73;
-  support_points[19](1) = t53+t75;
-  support_points[19](2) = t56+t77;
-  support_points[20](0) = t67+t79;
-  support_points[20](1) = t69+t81;
-  support_points[20](2) = t71+t83;
-  support_points[21](0) = t73+t85;
-  support_points[21](1) = t75+t87;
-  support_points[21](2) = t77+t89;
-  support_points[22](0) = t49+t85;
-  support_points[22](1) = t52+t87;
-  support_points[22](2) = t55+t89;
-  support_points[23](0) = t58+t79;
-  support_points[23](1) = t61+t81;
-  support_points[23](2) = t64+t83;
-  support_points[24](0) = t1+t58;
-  support_points[24](1) = t4+t61;
-  support_points[24](2) = t7+t64;
-  support_points[25](0) = t10+t49;
-  support_points[25](1) = t13+t52;
-  support_points[25](2) = t16+t55;
-  support_points[26](0) = t11+t50;
-  support_points[26](1) = t14+t53;
-  support_points[26](2) = t17+t56;
-  support_points[27](0) = t2+t59;
-  support_points[27](1) = t5+t62;
-  support_points[27](2) = t8+t65;
-  support_points[28](0) = t25+t67;
-  support_points[28](1) = t27+t69;
-  support_points[28](2) = t29+t71;
-  support_points[29](0) = t19+t73;
-  support_points[29](1) = t21+t75;
-  support_points[29](2) = t23+t77;
-  support_points[30](0) = t31+t85;
-  support_points[30](1) = t33+t87;
-  support_points[30](2) = t35+t89;
-  support_points[31](0) = t37+t79;
-  support_points[31](1) = t39+t81;
-  support_points[31](2) = t41+t83;
-  support_points[32](0) = t121+t122+t123+t124;
-  support_points[32](1) = t126+t127+t128+t129;
-  support_points[32](2) = t131+t132+t133+t134;
-  support_points[33](0) = t136+t137+t138+t139;
-  support_points[33](1) = t141+t142+t143+t144;
-  support_points[33](2) = t146+t147+t148+t149;
-  support_points[34](0) = t136+t151+t138+t152;
-  support_points[34](1) = t141+t154+t143+t155;
-  support_points[34](2) = t146+t157+t148+t158;
-  support_points[35](0) = t160+t122+t161+t124;
-  support_points[35](1) = t163+t127+t164+t129;
-  support_points[35](2) = t166+t132+t167+t134;
-  support_points[36](0) = t169+t170+t171+t172;
-  support_points[36](1) = t174+t175+t176+t177;
-  support_points[36](2) = t179+t180+t181+t182;
-  support_points[37](0) = t184+t185+t186+t187;
-  support_points[37](1) = t189+t190+t191+t192;
-  support_points[37](2) = t194+t195+t196+t197;
-  support_points[38](0) = t184+t199+t186+t200;
-  support_points[38](1) = t189+t202+t191+t203;
-  support_points[38](2) = t194+t205+t196+t206;
-  support_points[39](0) = t208+t170+t209+t172;
-  support_points[39](1) = t211+t175+t212+t177;
-  support_points[39](2) = t214+t180+t215+t182;
-  support_points[40](0) = t121+t122+t184+t199;
-  support_points[40](1) = t126+t127+t189+t202;
-  support_points[40](2) = t131+t132+t194+t205;
-  support_points[41](0) = t136+t137+t208+t170;
-  support_points[41](1) = t141+t142+t211+t175;
-  support_points[41](2) = t146+t147+t214+t180;
-  support_points[42](0) = t136+t151+t169+t170;
-  support_points[42](1) = t141+t154+t174+t175;
-  support_points[42](2) = t146+t157+t179+t180;
-  support_points[43](0) = t160+t122+t184+t185;
-  support_points[43](1) = t163+t127+t189+t190;
-  support_points[43](2) = t166+t132+t194+t195;
-  support_points[44](0) = t137+t138+t170+t171;
-  support_points[44](1) = t142+t143+t175+t176;
-  support_points[44](2) = t147+t148+t180+t181;
-  support_points[45](0) = t122+t123+t185+t186;
-  support_points[45](1) = t127+t128+t190+t191;
-  support_points[45](2) = t132+t133+t195+t196;
-  support_points[46](0) = t122+t161+t199+t186;
-  support_points[46](1) = t127+t164+t202+t191;
-  support_points[46](2) = t132+t167+t205+t196;
-  support_points[47](0) = t151+t138+t170+t209;
-  support_points[47](1) = t154+t143+t175+t212;
-  support_points[47](2) = t157+t148+t180+t215;
-  support_points[48](0) = t138+t152+t171+t172;
-  support_points[48](1) = t143+t155+t176+t177;
-  support_points[48](2) = t148+t158+t181+t182;
-  support_points[49](0) = t161+t124+t186+t187;
-  support_points[49](1) = t164+t129+t191+t192;
-  support_points[49](2) = t167+t134+t196+t197;
-  support_points[50](0) = t123+t124+t186+t200;
-  support_points[50](1) = t128+t129+t191+t203;
-  support_points[50](2) = t133+t134+t196+t206;
-  support_points[51](0) = t138+t139+t209+t172;
-  support_points[51](1) = t143+t144+t212+t177;
-  support_points[51](2) = t148+t149+t215+t182;
-  support_points[52](0) = t121+t124+t184+t187;
-  support_points[52](1) = t126+t129+t189+t192;
-  support_points[52](2) = t131+t134+t194+t197;
-  support_points[53](0) = t136+t139+t169+t172;
-  support_points[53](1) = t141+t144+t174+t177;
-  support_points[53](2) = t146+t149+t179+t182;
-  support_points[54](0) = t136+t152+t208+t172;
-  support_points[54](1) = t141+t155+t211+t177;
-  support_points[54](2) = t146+t158+t214+t182;
-  support_points[55](0) = t160+t124+t184+t200;
-  support_points[55](1) = t163+t129+t189+t203;
-  support_points[55](2) = t166+t134+t194+t206;
-  support_points[56](0) = 8.0/27.0*vertices[0](0)+t266+t267+t268+t269+t270+vertices[6](0)/27.0+t272;
-  support_points[56](1) = 8.0/27.0*vertices[0](1)+t275+t276+t277+t278+t279+vertices[6](1)/27.0+t281;
-  support_points[56](2) = 8.0/27.0*vertices[0](2)+t284+t285+t286+t287+t288+vertices[6](2)/27.0+t290;
-  support_points[57](0) = t292+8.0/27.0*vertices[1](0)+t294+t295+t296+t297+t298+vertices[7](0)/27.0;
-  support_points[57](1) = t301+8.0/27.0*vertices[1](1)+t303+t304+t305+t306+t307+vertices[7](1)/27.0;
-  support_points[57](2) = t310+8.0/27.0*vertices[1](2)+t312+t313+t314+t315+t316+vertices[7](2)/27.0;
-  support_points[58](0) = t292+t319+vertices[2](0)/27.0+t295+8.0/27.0*vertices[4](0)+t297+t298+t322;
-  support_points[58](1) = t301+t324+vertices[2](1)/27.0+t304+8.0/27.0*vertices[4](1)+t306+t307+t327;
-  support_points[58](2) = t310+t329+vertices[2](2)/27.0+t313+8.0/27.0*vertices[4](2)+t315+t316+t332;
-  support_points[59](0) = t334+t266+t267+vertices[3](0)/27.0+t269+8.0/27.0*vertices[5](0)+t337+t272;
-  support_points[59](1) = t339+t275+t276+vertices[3](1)/27.0+t278+8.0/27.0*vertices[5](1)+t342+t281;
-  support_points[59](2) = t344+t284+t285+vertices[3](2)/27.0+t287+8.0/27.0*vertices[5](2)+t347+t290;
-  support_points[60](0) = t292+t319+t294+8.0/27.0*vertices[3](0)+t296+vertices[5](0)/27.0+t298+t322;
-  support_points[60](1) = t301+t324+t303+8.0/27.0*vertices[3](1)+t305+vertices[5](1)/27.0+t307+t327;
-  support_points[60](2) = t310+t329+t312+8.0/27.0*vertices[3](2)+t314+vertices[5](2)/27.0+t316+t332;
-  support_points[61](0) = t334+t266+8.0/27.0*vertices[2](0)+t268+vertices[4](0)/27.0+t270+t337+t272;
-  support_points[61](1) = t339+t275+8.0/27.0*vertices[2](1)+t277+vertices[4](1)/27.0+t279+t342+t281;
-  support_points[61](2) = t344+t284+8.0/27.0*vertices[2](2)+t286+vertices[4](2)/27.0+t288+t347+t290;
-  support_points[62](0) = t334+vertices[1](0)/27.0+t267+t268+t269+t270+t337+8.0/27.0*vertices[7](0);
-  support_points[62](1) = t339+vertices[1](1)/27.0+t276+t277+t278+t279+t342+8.0/27.0*vertices[7](1);
-  support_points[62](2) = t344+vertices[1](2)/27.0+t285+t286+t287+t288+t347+8.0/27.0*vertices[7](2);
-  support_points[63](0) = vertices[0](0)/27.0+t319+t294+t295+t296+t297+8.0/27.0*vertices[6](0)+t322;
-  support_points[63](1) = vertices[0](1)/27.0+t324+t303+t304+t305+t306+8.0/27.0*vertices[6](1)+t327;
-  support_points[63](2) = vertices[0](2)/27.0+t329+t312+t313+t314+t315+8.0/27.0*vertices[6](2)+t332;
-};
-
-
-template <>
-void FEQ3<3>::get_face_support_points (const typename DoFHandler<3>::face_iterator &face,
-                                      std::vector<Point<3> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_face,
-         FiniteElementBase<3>::ExcWrongFieldDimension (support_points.size(), dofs_per_face));
-
-  for (unsigned int vertex=0; vertex<2; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-
-  support_points[4]  = (2*support_points[0] + support_points[1]) / 3;
-  support_points[5]  = (support_points[0] + 2*support_points[1]) / 3;
-  support_points[6]  = (2*support_points[1] + support_points[2]) / 3;
-  support_points[7]  = (support_points[1] + 2*support_points[2]) / 3;
-  support_points[8]  = (2*support_points[3] + support_points[2]) / 3;
-  support_points[9]  = (support_points[3] + 2*support_points[2]) / 3;
-  support_points[10] = (2*support_points[0] + support_points[3]) / 3;
-  support_points[11] = (support_points[0] + 2*support_points[3]) / 3;
-
-  support_points[12] = (4*support_points[0] +
-                       2*support_points[1] +
-                       1*support_points[2] +
-                       2*support_points[3]  ) /9;
-  support_points[13] = (2*support_points[0] +
-                       4*support_points[1] +
-                       2*support_points[2] +
-                       1*support_points[3]  ) /9;
-  support_points[12] = (2*support_points[0] +
-                       1*support_points[1] +
-                       2*support_points[2] +
-                       4*support_points[3]  ) /9;
-  support_points[13] = (1*support_points[0] +
-                       2*support_points[1] +
-                       4*support_points[2] +
-                       2*support_points[3]  ) /9;
-};
-
-
-#else  // 0
-
-// provide dummy implementations of the functions above. for the
-// reason, see the beginning of the `if 0' conditional
-
-template <>
-FEQ3<3>::FEQ3 () :
-               FEQ1Mapping<3> (1, 2, 4, 8, 1,
-                               std::vector<bool> (1, false))
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-FEQ3<3>::FEQ3 (const int) :
-               FEQ1Mapping<3> (0, 0, 0, 64, 1,
-                               std::vector<bool> (1, true))
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ3<3>::initialize_matrices ()
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-double
-FEQ3<3>::shape_value (const unsigned int,
-                     const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return 0;
-};
-
-
-template <>
-Tensor<1,3>
-FEQ3<3>::shape_grad (const unsigned int,
-                    const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Tensor<1,3>();
-};
-
-
-template <>
-Tensor<2,3>
-FEQ3<3>::shape_grad_grad (const unsigned int,
-                         const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Tensor<2,3>();
-};
-
-
-template <>
-void
-FEQ3<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                               FullMatrix<double> &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ3<3>::get_unit_support_points (std::vector<Point<3> > &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ3<3>::get_support_points (const DoFHandler<3>::cell_iterator &,
-                                 std::vector<Point<3> >  &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ3<3>::get_face_support_points (const DoFHandler<3>::face_iterator &,
-                                      std::vector<Point<3> >  &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-#endif // 0
-#endif // deal_II_dimension == 3
-
-
-// explicit instantiations
-
-template class FEQ3<deal_II_dimension>;
-
diff --git a/deal.II/deal.II/source/fe/fe_lib.dg.cc b/deal.II/deal.II/source/fe/fe_lib.dg.cc
deleted file mode 100644 (file)
index eb99cbe..0000000
+++ /dev/null
@@ -1,4483 +0,0 @@
-//----------------------------  fe_lib.dg.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.dg.cc  ---------------------------
-
-
-#include <fe/fe_lib.dg.h>
-#include <grid/tria.h>
-
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-#if deal_II_dimension == 1
-
-
-template<>
-FEDG_Q1<1>::FEDG_Q1():
-               FEQ1<1>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<1>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 3.0/4.0;
-  restriction[0](0,1) = 1.0/2.0;
-  restriction[0](1,0) = -1.0/4.0;
-  restriction[1](0,1) = -1.0/4.0;
-  restriction[1](1,0) = 1.0/2.0;
-  restriction[1](1,1) = 3.0/4.0;
-};
-
-
-
-template<>
-FEDG_Q2<1>::FEDG_Q2():
-               FEQ2<1>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<1>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 11.0/16.0;
-  restriction[0](0,1) = -3.0/16.0;
-  restriction[0](0,2) = 3.0/4.0;
-  restriction[0](1,0) = 3.0/16.0;
-  restriction[0](1,1) = -3.0/16.0;
-  restriction[0](1,2) = -1.0/4.0;
-  restriction[0](2,0) = -3.0/32.0;
-  restriction[0](2,1) = 7.0/32.0;
-  restriction[0](2,2) = 3.0/8.0;
-  restriction[1](0,0) = -3.0/16.0;
-  restriction[1](0,1) = 3.0/16.0;
-  restriction[1](0,2) = -1.0/4.0;
-  restriction[1](1,0) = -3.0/16.0;
-  restriction[1](1,1) = 11.0/16.0;
-  restriction[1](1,2) = 3.0/4.0;
-  restriction[1](2,0) = 7.0/32.0;
-  restriction[1](2,1) = -3.0/32.0;
-  restriction[1](2,2) = 3.0/8.0;  
-};
-
-
-
-template<>
-FEDG_Q3<1>::FEDG_Q3():
-               FEQ3<1>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<1>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 11.0/16.0;
-  restriction[0](0,1) = -1.0/16.0;
-  restriction[0](0,2) = 15.0/16.0;
-  restriction[0](0,3) = -3.0/4.0;
-  restriction[0](1,0) = -1.0/8.0;
-  restriction[0](1,1) = -1.0/16.0;
-  restriction[0](1,2) = 3.0/16.0;
-  restriction[0](1,3) = 3.0/16.0;
-  restriction[0](2,0) = -1.0/18.0;
-  restriction[0](2,1) = 53.0/432.0;
-  restriction[0](2,2) = 35.0/144.0;
-  restriction[0](2,3) = 89.0/144.0;
-  restriction[0](3,0) = 5.0/144.0;
-  restriction[0](3,1) = 37.0/432.0;
-  restriction[0](3,2) = -17.0/144.0;
-  restriction[0](3,3) = 5.0/72.0;
-  restriction[1](0,0) = -1.0/16.0;
-  restriction[1](0,1) = -1.0/8.0;
-  restriction[1](0,2) = 3.0/16.0;
-  restriction[1](0,3) = 3.0/16.0;
-  restriction[1](1,0) = -1.0/16.0;
-  restriction[1](1,1) = 11.0/16.0;
-  restriction[1](1,2) = -3.0/4.0;
-  restriction[1](1,3) = 15.0/16.0;
-  restriction[1](2,0) = 37.0/432.0;
-  restriction[1](2,1) = 5.0/144.0;
-  restriction[1](2,2) = 5.0/72.0;
-  restriction[1](2,3) = -17.0/144.0;
-  restriction[1](3,0) = 53.0/432.0;
-  restriction[1](3,1) = -1.0/18.0;
-  restriction[1](3,2) = 89.0/144.0;
-  restriction[1](3,3) = 35.0/144.0;
-};
-
-
-
-template<>
-FEDG_Q4<1>::FEDG_Q4():
-               FEQ4<1>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<1>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 209.0/288.0;
-  restriction[0](0,1) = 5.0/288.0;
-  restriction[0](0,2) = 35.0/36.0;
-  restriction[0](0,3) = -25.0/24.0;
-  restriction[0](0,4) = 5.0/36.0;
-  restriction[0](1,0) = 25.0/288.0;
-  restriction[0](1,1) = 25.0/288.0;
-  restriction[0](1,2) = -5.0/36.0;
-  restriction[0](1,3) = -5.0/24.0;
-  restriction[0](1,4) = 13.0/36.0;
-  restriction[0](2,0) = -2515.0/36864.0;
-  restriction[0](2,1) = 1175.0/36864.0;
-  restriction[0](2,2) = 1385.0/4608.0;
-  restriction[0](2,3) = 1601.0/3072.0;
-  restriction[0](2,4) = 1295.0/4608.0;
-  restriction[0](3,0) = 5.0/256.0;
-  restriction[0](3,1) = 109.0/768.0;
-  restriction[0](3,2) = -5.0/96.0;
-  restriction[0](3,3) = -5.0/64.0;
-  restriction[0](3,4) = 15.0/32.0;
-  restriction[0](4,0) = -275.0/36864.0;
-  restriction[0](4,1) = 55.0/36864.0;
-  restriction[0](4,2) = 169.0/4608.0;
-  restriction[0](4,3) = -95.0/3072.0;
-  restriction[0](4,4) = -305.0/4608.0;
-  restriction[1](0,0) = 25.0/288.0;
-  restriction[1](0,1) = 25.0/288.0;
-  restriction[1](0,2) = 13.0/36.0;
-  restriction[1](0,3) = -5.0/24.0;
-  restriction[1](0,4) = -5.0/36.0;
-  restriction[1](1,0) = 5.0/288.0;
-  restriction[1](1,1) = 209.0/288.0;
-  restriction[1](1,2) = 5.0/36.0;
-  restriction[1](1,3) = -25.0/24.0;
-  restriction[1](1,4) = 35.0/36.0;
-  restriction[1](2,0) = 55.0/36864.0;
-  restriction[1](2,1) = -275.0/36864.0;
-  restriction[1](2,2) = -305.0/4608.0;
-  restriction[1](2,3) = -95.0/3072.0;
-  restriction[1](2,4) = 169.0/4608.0;
-  restriction[1](3,0) = 109.0/768.0;
-  restriction[1](3,1) = 5.0/256.0;
-  restriction[1](3,2) = 15.0/32.0;
-  restriction[1](3,3) = -5.0/64.0;
-  restriction[1](3,4) = -5.0/96.0;
-  restriction[1](4,0) = 1175.0/36864.0;
-  restriction[1](4,1) = -2515.0/36864.0;
-  restriction[1](4,2) = 1295.0/4608.0;
-  restriction[1](4,3) = 1601.0/3072.0;
-  restriction[1](4,4) = 1385.0/4608.0;
-};
-
-
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-
-template<>
-FEDG_Q1<2>::FEDG_Q1():
-               FEQ1<2>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<2>::children_per_cell; ++ child)
-    restriction[child].clear();
-
-  restriction[0](0,0) = 9.0/16.0;
-  restriction[0](0,1) = 3.0/8.0;
-  restriction[0](0,2) = 1.0/4.0;
-  restriction[0](0,3) = 3.0/8.0;
-  restriction[0](1,0) = -3.0/16.0;
-  restriction[0](1,3) = -1.0/8.0;
-  restriction[0](2,0) = 1.0/16.0;
-  restriction[0](3,0) = -3.0/16.0;
-  restriction[0](3,1) = -1.0/8.0;
-  restriction[1](0,1) = -3.0/16.0;
-  restriction[1](0,2) = -1.0/8.0;
-  restriction[1](1,0) = 3.0/8.0;
-  restriction[1](1,1) = 9.0/16.0;
-  restriction[1](1,2) = 3.0/8.0;
-  restriction[1](1,3) = 1.0/4.0;
-  restriction[1](2,0) = -1.0/8.0;
-  restriction[1](2,1) = -3.0/16.0;
-  restriction[1](3,1) = 1.0/16.0;
-  restriction[2](0,2) = 1.0/16.0;
-  restriction[2](1,2) = -3.0/16.0;
-  restriction[2](1,3) = -1.0/8.0;
-  restriction[2](2,0) = 1.0/4.0;
-  restriction[2](2,1) = 3.0/8.0;
-  restriction[2](2,2) = 9.0/16.0;
-  restriction[2](2,3) = 3.0/8.0;
-  restriction[2](3,1) = -1.0/8.0;
-  restriction[2](3,2) = -3.0/16.0;
-  restriction[3](0,2) = -1.0/8.0;
-  restriction[3](0,3) = -3.0/16.0;
-  restriction[3](1,3) = 1.0/16.0;
-  restriction[3](2,0) = -1.0/8.0;
-  restriction[3](2,3) = -3.0/16.0;
-  restriction[3](3,0) = 3.0/8.0;
-  restriction[3](3,1) = 1.0/4.0;
-  restriction[3](3,2) = 3.0/8.0;
-  restriction[3](3,3) = 9.0/16.0;
-};
-
-
-
-template<>
-FEDG_Q2<2>::FEDG_Q2():
-               FEQ2<2>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<2>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 121.0/256.0;
-  restriction[0](0,1) = -33.0/256.0;
-  restriction[0](0,2) = 9.0/256.0;
-  restriction[0](0,3) = -33.0/256.0;
-  restriction[0](0,4) = 33.0/64.0;
-  restriction[0](0,5) = -9.0/64.0;
-  restriction[0](0,6) = -9.0/64.0;
-  restriction[0](0,7) = 33.0/64.0;
-  restriction[0](0,8) = 9.0/16.0;
-  restriction[0](1,0) = 33.0/256.0;
-  restriction[0](1,1) = -33.0/256.0;
-  restriction[0](1,2) = 9.0/256.0;
-  restriction[0](1,3) = -9.0/256.0;
-  restriction[0](1,4) = -11.0/64.0;
-  restriction[0](1,5) = -9.0/64.0;
-  restriction[0](1,6) = 3.0/64.0;
-  restriction[0](1,7) = 9.0/64.0;
-  restriction[0](1,8) = -3.0/16.0;
-  restriction[0](2,0) = 9.0/256.0;
-  restriction[0](2,1) = -9.0/256.0;
-  restriction[0](2,2) = 9.0/256.0;
-  restriction[0](2,3) = -9.0/256.0;
-  restriction[0](2,4) = -3.0/64.0;
-  restriction[0](2,5) = 3.0/64.0;
-  restriction[0](2,6) = 3.0/64.0;
-  restriction[0](2,7) = -3.0/64.0;
-  restriction[0](2,8) = 1.0/16.0;
-  restriction[0](3,0) = 33.0/256.0;
-  restriction[0](3,1) = -9.0/256.0;
-  restriction[0](3,2) = 9.0/256.0;
-  restriction[0](3,3) = -33.0/256.0;
-  restriction[0](3,4) = 9.0/64.0;
-  restriction[0](3,5) = 3.0/64.0;
-  restriction[0](3,6) = -9.0/64.0;
-  restriction[0](3,7) = -11.0/64.0;
-  restriction[0](3,8) = -3.0/16.0;
-  restriction[0](4,0) = -33.0/512.0;
-  restriction[0](4,1) = 77.0/512.0;
-  restriction[0](4,2) = -21.0/512.0;
-  restriction[0](4,3) = 9.0/512.0;
-  restriction[0](4,4) = 33.0/128.0;
-  restriction[0](4,5) = 21.0/128.0;
-  restriction[0](4,6) = -9.0/128.0;
-  restriction[0](4,7) = -9.0/128.0;
-  restriction[0](4,8) = 9.0/32.0;
-  restriction[0](5,0) = -9.0/512.0;
-  restriction[0](5,1) = 9.0/512.0;
-  restriction[0](5,2) = -21.0/512.0;
-  restriction[0](5,3) = 21.0/512.0;
-  restriction[0](5,4) = 3.0/128.0;
-  restriction[0](5,5) = -9.0/128.0;
-  restriction[0](5,6) = -7.0/128.0;
-  restriction[0](5,7) = 9.0/128.0;
-  restriction[0](5,8) = -3.0/32.0;
-  restriction[0](6,0) = -9.0/512.0;
-  restriction[0](6,1) = 21.0/512.0;
-  restriction[0](6,2) = -21.0/512.0;
-  restriction[0](6,3) = 9.0/512.0;
-  restriction[0](6,4) = 9.0/128.0;
-  restriction[0](6,5) = -7.0/128.0;
-  restriction[0](6,6) = -9.0/128.0;
-  restriction[0](6,7) = 3.0/128.0;
-  restriction[0](6,8) = -3.0/32.0;
-  restriction[0](7,0) = -33.0/512.0;
-  restriction[0](7,1) = 9.0/512.0;
-  restriction[0](7,2) = -21.0/512.0;
-  restriction[0](7,3) = 77.0/512.0;
-  restriction[0](7,4) = -9.0/128.0;
-  restriction[0](7,5) = -9.0/128.0;
-  restriction[0](7,6) = 21.0/128.0;
-  restriction[0](7,7) = 33.0/128.0;
-  restriction[0](7,8) = 9.0/32.0;
-  restriction[0](8,0) = 9.0/1024.0;
-  restriction[0](8,1) = -21.0/1024.0;
-  restriction[0](8,2) = 49.0/1024.0;
-  restriction[0](8,3) = -21.0/1024.0;
-  restriction[0](8,4) = -9.0/256.0;
-  restriction[0](8,5) = 21.0/256.0;
-  restriction[0](8,6) = 21.0/256.0;
-  restriction[0](8,7) = -9.0/256.0;
-  restriction[0](8,8) = 9.0/64.0;
-  restriction[1](0,0) = -33.0/256.0;
-  restriction[1](0,1) = 33.0/256.0;
-  restriction[1](0,2) = -9.0/256.0;
-  restriction[1](0,3) = 9.0/256.0;
-  restriction[1](0,4) = -11.0/64.0;
-  restriction[1](0,5) = 9.0/64.0;
-  restriction[1](0,6) = 3.0/64.0;
-  restriction[1](0,7) = -9.0/64.0;
-  restriction[1](0,8) = -3.0/16.0;
-  restriction[1](1,0) = -33.0/256.0;
-  restriction[1](1,1) = 121.0/256.0;
-  restriction[1](1,2) = -33.0/256.0;
-  restriction[1](1,3) = 9.0/256.0;
-  restriction[1](1,4) = 33.0/64.0;
-  restriction[1](1,5) = 33.0/64.0;
-  restriction[1](1,6) = -9.0/64.0;
-  restriction[1](1,7) = -9.0/64.0;
-  restriction[1](1,8) = 9.0/16.0;
-  restriction[1](2,0) = -9.0/256.0;
-  restriction[1](2,1) = 33.0/256.0;
-  restriction[1](2,2) = -33.0/256.0;
-  restriction[1](2,3) = 9.0/256.0;
-  restriction[1](2,4) = 9.0/64.0;
-  restriction[1](2,5) = -11.0/64.0;
-  restriction[1](2,6) = -9.0/64.0;
-  restriction[1](2,7) = 3.0/64.0;
-  restriction[1](2,8) = -3.0/16.0;
-  restriction[1](3,0) = -9.0/256.0;
-  restriction[1](3,1) = 9.0/256.0;
-  restriction[1](3,2) = -9.0/256.0;
-  restriction[1](3,3) = 9.0/256.0;
-  restriction[1](3,4) = -3.0/64.0;
-  restriction[1](3,5) = -3.0/64.0;
-  restriction[1](3,6) = 3.0/64.0;
-  restriction[1](3,7) = 3.0/64.0;
-  restriction[1](3,8) = 1.0/16.0;
-  restriction[1](4,0) = 77.0/512.0;
-  restriction[1](4,1) = -33.0/512.0;
-  restriction[1](4,2) = 9.0/512.0;
-  restriction[1](4,3) = -21.0/512.0;
-  restriction[1](4,4) = 33.0/128.0;
-  restriction[1](4,5) = -9.0/128.0;
-  restriction[1](4,6) = -9.0/128.0;
-  restriction[1](4,7) = 21.0/128.0;
-  restriction[1](4,8) = 9.0/32.0;
-  restriction[1](5,0) = 9.0/512.0;
-  restriction[1](5,1) = -33.0/512.0;
-  restriction[1](5,2) = 77.0/512.0;
-  restriction[1](5,3) = -21.0/512.0;
-  restriction[1](5,4) = -9.0/128.0;
-  restriction[1](5,5) = 33.0/128.0;
-  restriction[1](5,6) = 21.0/128.0;
-  restriction[1](5,7) = -9.0/128.0;
-  restriction[1](5,8) = 9.0/32.0;
-  restriction[1](6,0) = 21.0/512.0;
-  restriction[1](6,1) = -9.0/512.0;
-  restriction[1](6,2) = 9.0/512.0;
-  restriction[1](6,3) = -21.0/512.0;
-  restriction[1](6,4) = 9.0/128.0;
-  restriction[1](6,5) = 3.0/128.0;
-  restriction[1](6,6) = -9.0/128.0;
-  restriction[1](6,7) = -7.0/128.0;
-  restriction[1](6,8) = -3.0/32.0;
-  restriction[1](7,0) = 9.0/512.0;
-  restriction[1](7,1) = -9.0/512.0;
-  restriction[1](7,2) = 21.0/512.0;
-  restriction[1](7,3) = -21.0/512.0;
-  restriction[1](7,4) = 3.0/128.0;
-  restriction[1](7,5) = 9.0/128.0;
-  restriction[1](7,6) = -7.0/128.0;
-  restriction[1](7,7) = -9.0/128.0;
-  restriction[1](7,8) = -3.0/32.0;
-  restriction[1](8,0) = -21.0/1024.0;
-  restriction[1](8,1) = 9.0/1024.0;
-  restriction[1](8,2) = -21.0/1024.0;
-  restriction[1](8,3) = 49.0/1024.0;
-  restriction[1](8,4) = -9.0/256.0;
-  restriction[1](8,5) = -9.0/256.0;
-  restriction[1](8,6) = 21.0/256.0;
-  restriction[1](8,7) = 21.0/256.0;
-  restriction[1](8,8) = 9.0/64.0;
-  restriction[2](0,0) = 9.0/256.0;
-  restriction[2](0,1) = -9.0/256.0;
-  restriction[2](0,2) = 9.0/256.0;
-  restriction[2](0,3) = -9.0/256.0;
-  restriction[2](0,4) = 3.0/64.0;
-  restriction[2](0,5) = -3.0/64.0;
-  restriction[2](0,6) = -3.0/64.0;
-  restriction[2](0,7) = 3.0/64.0;
-  restriction[2](0,8) = 1.0/16.0;
-  restriction[2](1,0) = 9.0/256.0;
-  restriction[2](1,1) = -33.0/256.0;
-  restriction[2](1,2) = 33.0/256.0;
-  restriction[2](1,3) = -9.0/256.0;
-  restriction[2](1,4) = -9.0/64.0;
-  restriction[2](1,5) = -11.0/64.0;
-  restriction[2](1,6) = 9.0/64.0;
-  restriction[2](1,7) = 3.0/64.0;
-  restriction[2](1,8) = -3.0/16.0;
-  restriction[2](2,0) = 9.0/256.0;
-  restriction[2](2,1) = -33.0/256.0;
-  restriction[2](2,2) = 121.0/256.0;
-  restriction[2](2,3) = -33.0/256.0;
-  restriction[2](2,4) = -9.0/64.0;
-  restriction[2](2,5) = 33.0/64.0;
-  restriction[2](2,6) = 33.0/64.0;
-  restriction[2](2,7) = -9.0/64.0;
-  restriction[2](2,8) = 9.0/16.0;
-  restriction[2](3,0) = 9.0/256.0;
-  restriction[2](3,1) = -9.0/256.0;
-  restriction[2](3,2) = 33.0/256.0;
-  restriction[2](3,3) = -33.0/256.0;
-  restriction[2](3,4) = 3.0/64.0;
-  restriction[2](3,5) = 9.0/64.0;
-  restriction[2](3,6) = -11.0/64.0;
-  restriction[2](3,7) = -9.0/64.0;
-  restriction[2](3,8) = -3.0/16.0;
-  restriction[2](4,0) = -21.0/512.0;
-  restriction[2](4,1) = 9.0/512.0;
-  restriction[2](4,2) = -9.0/512.0;
-  restriction[2](4,3) = 21.0/512.0;
-  restriction[2](4,4) = -9.0/128.0;
-  restriction[2](4,5) = 3.0/128.0;
-  restriction[2](4,6) = 9.0/128.0;
-  restriction[2](4,7) = -7.0/128.0;
-  restriction[2](4,8) = -3.0/32.0;
-  restriction[2](5,0) = -21.0/512.0;
-  restriction[2](5,1) = 77.0/512.0;
-  restriction[2](5,2) = -33.0/512.0;
-  restriction[2](5,3) = 9.0/512.0;
-  restriction[2](5,4) = 21.0/128.0;
-  restriction[2](5,5) = 33.0/128.0;
-  restriction[2](5,6) = -9.0/128.0;
-  restriction[2](5,7) = -9.0/128.0;
-  restriction[2](5,8) = 9.0/32.0;
-  restriction[2](6,0) = -21.0/512.0;
-  restriction[2](6,1) = 9.0/512.0;
-  restriction[2](6,2) = -33.0/512.0;
-  restriction[2](6,3) = 77.0/512.0;
-  restriction[2](6,4) = -9.0/128.0;
-  restriction[2](6,5) = -9.0/128.0;
-  restriction[2](6,6) = 33.0/128.0;
-  restriction[2](6,7) = 21.0/128.0;
-  restriction[2](6,8) = 9.0/32.0;
-  restriction[2](7,0) = -21.0/512.0;
-  restriction[2](7,1) = 21.0/512.0;
-  restriction[2](7,2) = -9.0/512.0;
-  restriction[2](7,3) = 9.0/512.0;
-  restriction[2](7,4) = -7.0/128.0;
-  restriction[2](7,5) = 9.0/128.0;
-  restriction[2](7,6) = 3.0/128.0;
-  restriction[2](7,7) = -9.0/128.0;
-  restriction[2](7,8) = -3.0/32.0;
-  restriction[2](8,0) = 49.0/1024.0;
-  restriction[2](8,1) = -21.0/1024.0;
-  restriction[2](8,2) = 9.0/1024.0;
-  restriction[2](8,3) = -21.0/1024.0;
-  restriction[2](8,4) = 21.0/256.0;
-  restriction[2](8,5) = -9.0/256.0;
-  restriction[2](8,6) = -9.0/256.0;
-  restriction[2](8,7) = 21.0/256.0;
-  restriction[2](8,8) = 9.0/64.0;
-  restriction[3](0,0) = -33.0/256.0;
-  restriction[3](0,1) = 9.0/256.0;
-  restriction[3](0,2) = -9.0/256.0;
-  restriction[3](0,3) = 33.0/256.0;
-  restriction[3](0,4) = -9.0/64.0;
-  restriction[3](0,5) = 3.0/64.0;
-  restriction[3](0,6) = 9.0/64.0;
-  restriction[3](0,7) = -11.0/64.0;
-  restriction[3](0,8) = -3.0/16.0;
-  restriction[3](1,0) = -9.0/256.0;
-  restriction[3](1,1) = 9.0/256.0;
-  restriction[3](1,2) = -9.0/256.0;
-  restriction[3](1,3) = 9.0/256.0;
-  restriction[3](1,4) = 3.0/64.0;
-  restriction[3](1,5) = 3.0/64.0;
-  restriction[3](1,6) = -3.0/64.0;
-  restriction[3](1,7) = -3.0/64.0;
-  restriction[3](1,8) = 1.0/16.0;
-  restriction[3](2,0) = -9.0/256.0;
-  restriction[3](2,1) = 9.0/256.0;
-  restriction[3](2,2) = -33.0/256.0;
-  restriction[3](2,3) = 33.0/256.0;
-  restriction[3](2,4) = 3.0/64.0;
-  restriction[3](2,5) = -9.0/64.0;
-  restriction[3](2,6) = -11.0/64.0;
-  restriction[3](2,7) = 9.0/64.0;
-  restriction[3](2,8) = -3.0/16.0;
-  restriction[3](3,0) = -33.0/256.0;
-  restriction[3](3,1) = 9.0/256.0;
-  restriction[3](3,2) = -33.0/256.0;
-  restriction[3](3,3) = 121.0/256.0;
-  restriction[3](3,4) = -9.0/64.0;
-  restriction[3](3,5) = -9.0/64.0;
-  restriction[3](3,6) = 33.0/64.0;
-  restriction[3](3,7) = 33.0/64.0;
-  restriction[3](3,8) = 9.0/16.0;
-  restriction[3](4,0) = 9.0/512.0;
-  restriction[3](4,1) = -21.0/512.0;
-  restriction[3](4,2) = 21.0/512.0;
-  restriction[3](4,3) = -9.0/512.0;
-  restriction[3](4,4) = -9.0/128.0;
-  restriction[3](4,5) = -7.0/128.0;
-  restriction[3](4,6) = 9.0/128.0;
-  restriction[3](4,7) = 3.0/128.0;
-  restriction[3](4,8) = -3.0/32.0;
-  restriction[3](5,0) = 21.0/512.0;
-  restriction[3](5,1) = -21.0/512.0;
-  restriction[3](5,2) = 9.0/512.0;
-  restriction[3](5,3) = -9.0/512.0;
-  restriction[3](5,4) = -7.0/128.0;
-  restriction[3](5,5) = -9.0/128.0;
-  restriction[3](5,6) = 3.0/128.0;
-  restriction[3](5,7) = 9.0/128.0;
-  restriction[3](5,8) = -3.0/32.0;
-  restriction[3](6,0) = 9.0/512.0;
-  restriction[3](6,1) = -21.0/512.0;
-  restriction[3](6,2) = 77.0/512.0;
-  restriction[3](6,3) = -33.0/512.0;
-  restriction[3](6,4) = -9.0/128.0;
-  restriction[3](6,5) = 21.0/128.0;
-  restriction[3](6,6) = 33.0/128.0;
-  restriction[3](6,7) = -9.0/128.0;
-  restriction[3](6,8) = 9.0/32.0;
-  restriction[3](7,0) = 77.0/512.0;
-  restriction[3](7,1) = -21.0/512.0;
-  restriction[3](7,2) = 9.0/512.0;
-  restriction[3](7,3) = -33.0/512.0;
-  restriction[3](7,4) = 21.0/128.0;
-  restriction[3](7,5) = -9.0/128.0;
-  restriction[3](7,6) = -9.0/128.0;
-  restriction[3](7,7) = 33.0/128.0;
-  restriction[3](7,8) = 9.0/32.0;
-  restriction[3](8,0) = -21.0/1024.0;
-  restriction[3](8,1) = 49.0/1024.0;
-  restriction[3](8,2) = -21.0/1024.0;
-  restriction[3](8,3) = 9.0/1024.0;
-  restriction[3](8,4) = 21.0/256.0;
-  restriction[3](8,5) = 21.0/256.0;
-  restriction[3](8,6) = -9.0/256.0;
-  restriction[3](8,7) = -9.0/256.0;
-  restriction[3](8,8) = 9.0/64.0; 
-};
-
-
-
-template<>
-FEDG_Q3<2>::FEDG_Q3():
-               FEQ3<2>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<2>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 121.0/256.0;
-  restriction[0](0,1) = -11.0/256.0;
-  restriction[0](0,2) = 1.0/256.0;
-  restriction[0](0,3) = -11.0/256.0;
-  restriction[0](0,4) = 165.0/256.0;
-  restriction[0](0,5) = -33.0/64.0;
-  restriction[0](0,6) = -15.0/256.0;
-  restriction[0](0,7) = 3.0/64.0;
-  restriction[0](0,8) = -15.0/256.0;
-  restriction[0](0,9) = 3.0/64.0;
-  restriction[0](0,10) = 165.0/256.0;
-  restriction[0](0,11) = -33.0/64.0;
-  restriction[0](0,12) = 225.0/256.0;
-  restriction[0](0,13) = -45.0/64.0;
-  restriction[0](0,14) = 9.0/16.0;
-  restriction[0](0,15) = -45.0/64.0;
-  restriction[0](1,0) = -11.0/128.0;
-  restriction[0](1,1) = -11.0/256.0;
-  restriction[0](1,2) = 1.0/256.0;
-  restriction[0](1,3) = 1.0/128.0;
-  restriction[0](1,4) = 33.0/256.0;
-  restriction[0](1,5) = 33.0/256.0;
-  restriction[0](1,6) = -15.0/256.0;
-  restriction[0](1,7) = 3.0/64.0;
-  restriction[0](1,8) = -3.0/256.0;
-  restriction[0](1,9) = -3.0/256.0;
-  restriction[0](1,10) = -15.0/128.0;
-  restriction[0](1,11) = 3.0/32.0;
-  restriction[0](1,12) = 45.0/256.0;
-  restriction[0](1,13) = 45.0/256.0;
-  restriction[0](1,14) = -9.0/64.0;
-  restriction[0](1,15) = -9.0/64.0;
-  restriction[0](2,0) = 1.0/64.0;
-  restriction[0](2,1) = 1.0/128.0;
-  restriction[0](2,2) = 1.0/256.0;
-  restriction[0](2,3) = 1.0/128.0;
-  restriction[0](2,4) = -3.0/128.0;
-  restriction[0](2,5) = -3.0/128.0;
-  restriction[0](2,6) = -3.0/256.0;
-  restriction[0](2,7) = -3.0/256.0;
-  restriction[0](2,8) = -3.0/256.0;
-  restriction[0](2,9) = -3.0/256.0;
-  restriction[0](2,10) = -3.0/128.0;
-  restriction[0](2,11) = -3.0/128.0;
-  restriction[0](2,12) = 9.0/256.0;
-  restriction[0](2,13) = 9.0/256.0;
-  restriction[0](2,14) = 9.0/256.0;
-  restriction[0](2,15) = 9.0/256.0;
-  restriction[0](3,0) = -11.0/128.0;
-  restriction[0](3,1) = 1.0/128.0;
-  restriction[0](3,2) = 1.0/256.0;
-  restriction[0](3,3) = -11.0/256.0;
-  restriction[0](3,4) = -15.0/128.0;
-  restriction[0](3,5) = 3.0/32.0;
-  restriction[0](3,6) = -3.0/256.0;
-  restriction[0](3,7) = -3.0/256.0;
-  restriction[0](3,8) = -15.0/256.0;
-  restriction[0](3,9) = 3.0/64.0;
-  restriction[0](3,10) = 33.0/256.0;
-  restriction[0](3,11) = 33.0/256.0;
-  restriction[0](3,12) = 45.0/256.0;
-  restriction[0](3,13) = -9.0/64.0;
-  restriction[0](3,14) = -9.0/64.0;
-  restriction[0](3,15) = 45.0/256.0;
-  restriction[0](4,0) = -11.0/288.0;
-  restriction[0](4,1) = 583.0/6912.0;
-  restriction[0](4,2) = -53.0/6912.0;
-  restriction[0](4,3) = 1.0/288.0;
-  restriction[0](4,4) = 385.0/2304.0;
-  restriction[0](4,5) = 979.0/2304.0;
-  restriction[0](4,6) = 265.0/2304.0;
-  restriction[0](4,7) = -53.0/576.0;
-  restriction[0](4,8) = -35.0/2304.0;
-  restriction[0](4,9) = -89.0/2304.0;
-  restriction[0](4,10) = -5.0/96.0;
-  restriction[0](4,11) = 1.0/24.0;
-  restriction[0](4,12) = 175.0/768.0;
-  restriction[0](4,13) = 445.0/768.0;
-  restriction[0](4,14) = -89.0/192.0;
-  restriction[0](4,15) = -35.0/192.0;
-  restriction[0](5,0) = 55.0/2304.0;
-  restriction[0](5,1) = 407.0/6912.0;
-  restriction[0](5,2) = -37.0/6912.0;
-  restriction[0](5,3) = -5.0/2304.0;
-  restriction[0](5,4) = -187.0/2304.0;
-  restriction[0](5,5) = 55.0/1152.0;
-  restriction[0](5,6) = 185.0/2304.0;
-  restriction[0](5,7) = -37.0/576.0;
-  restriction[0](5,8) = 17.0/2304.0;
-  restriction[0](5,9) = -5.0/1152.0;
-  restriction[0](5,10) = 25.0/768.0;
-  restriction[0](5,11) = -5.0/192.0;
-  restriction[0](5,12) = -85.0/768.0;
-  restriction[0](5,13) = 25.0/384.0;
-  restriction[0](5,14) = -5.0/96.0;
-  restriction[0](5,15) = 17.0/192.0;
-  restriction[0](6,0) = 1.0/144.0;
-  restriction[0](6,1) = 1.0/288.0;
-  restriction[0](6,2) = -53.0/6912.0;
-  restriction[0](6,3) = -53.0/3456.0;
-  restriction[0](6,4) = -1.0/96.0;
-  restriction[0](6,5) = -1.0/96.0;
-  restriction[0](6,6) = -35.0/2304.0;
-  restriction[0](6,7) = -89.0/2304.0;
-  restriction[0](6,8) = 53.0/2304.0;
-  restriction[0](6,9) = 53.0/2304.0;
-  restriction[0](6,10) = -35.0/1152.0;
-  restriction[0](6,11) = -89.0/1152.0;
-  restriction[0](6,12) = 35.0/768.0;
-  restriction[0](6,13) = 35.0/768.0;
-  restriction[0](6,14) = 89.0/768.0;
-  restriction[0](6,15) = 89.0/768.0;
-  restriction[0](7,0) = -5.0/1152.0;
-  restriction[0](7,1) = -5.0/2304.0;
-  restriction[0](7,2) = -37.0/6912.0;
-  restriction[0](7,3) = -37.0/3456.0;
-  restriction[0](7,4) = 5.0/768.0;
-  restriction[0](7,5) = 5.0/768.0;
-  restriction[0](7,6) = 17.0/2304.0;
-  restriction[0](7,7) = -5.0/1152.0;
-  restriction[0](7,8) = 37.0/2304.0;
-  restriction[0](7,9) = 37.0/2304.0;
-  restriction[0](7,10) = 17.0/1152.0;
-  restriction[0](7,11) = -5.0/576.0;
-  restriction[0](7,12) = -17.0/768.0;
-  restriction[0](7,13) = -17.0/768.0;
-  restriction[0](7,14) = 5.0/384.0;
-  restriction[0](7,15) = 5.0/384.0;
-  restriction[0](8,0) = 1.0/144.0;
-  restriction[0](8,1) = -53.0/3456.0;
-  restriction[0](8,2) = -53.0/6912.0;
-  restriction[0](8,3) = 1.0/288.0;
-  restriction[0](8,4) = -35.0/1152.0;
-  restriction[0](8,5) = -89.0/1152.0;
-  restriction[0](8,6) = 53.0/2304.0;
-  restriction[0](8,7) = 53.0/2304.0;
-  restriction[0](8,8) = -35.0/2304.0;
-  restriction[0](8,9) = -89.0/2304.0;
-  restriction[0](8,10) = -1.0/96.0;
-  restriction[0](8,11) = -1.0/96.0;
-  restriction[0](8,12) = 35.0/768.0;
-  restriction[0](8,13) = 89.0/768.0;
-  restriction[0](8,14) = 89.0/768.0;
-  restriction[0](8,15) = 35.0/768.0;
-  restriction[0](9,0) = -5.0/1152.0;
-  restriction[0](9,1) = -37.0/3456.0;
-  restriction[0](9,2) = -37.0/6912.0;
-  restriction[0](9,3) = -5.0/2304.0;
-  restriction[0](9,4) = 17.0/1152.0;
-  restriction[0](9,5) = -5.0/576.0;
-  restriction[0](9,6) = 37.0/2304.0;
-  restriction[0](9,7) = 37.0/2304.0;
-  restriction[0](9,8) = 17.0/2304.0;
-  restriction[0](9,9) = -5.0/1152.0;
-  restriction[0](9,10) = 5.0/768.0;
-  restriction[0](9,11) = 5.0/768.0;
-  restriction[0](9,12) = -17.0/768.0;
-  restriction[0](9,13) = 5.0/384.0;
-  restriction[0](9,14) = 5.0/384.0;
-  restriction[0](9,15) = -17.0/768.0;
-  restriction[0](10,0) = -11.0/288.0;
-  restriction[0](10,1) = 1.0/288.0;
-  restriction[0](10,2) = -53.0/6912.0;
-  restriction[0](10,3) = 583.0/6912.0;
-  restriction[0](10,4) = -5.0/96.0;
-  restriction[0](10,5) = 1.0/24.0;
-  restriction[0](10,6) = -35.0/2304.0;
-  restriction[0](10,7) = -89.0/2304.0;
-  restriction[0](10,8) = 265.0/2304.0;
-  restriction[0](10,9) = -53.0/576.0;
-  restriction[0](10,10) = 385.0/2304.0;
-  restriction[0](10,11) = 979.0/2304.0;
-  restriction[0](10,12) = 175.0/768.0;
-  restriction[0](10,13) = -35.0/192.0;
-  restriction[0](10,14) = -89.0/192.0;
-  restriction[0](10,15) = 445.0/768.0;
-  restriction[0](11,0) = 55.0/2304.0;
-  restriction[0](11,1) = -5.0/2304.0;
-  restriction[0](11,2) = -37.0/6912.0;
-  restriction[0](11,3) = 407.0/6912.0;
-  restriction[0](11,4) = 25.0/768.0;
-  restriction[0](11,5) = -5.0/192.0;
-  restriction[0](11,6) = 17.0/2304.0;
-  restriction[0](11,7) = -5.0/1152.0;
-  restriction[0](11,8) = 185.0/2304.0;
-  restriction[0](11,9) = -37.0/576.0;
-  restriction[0](11,10) = -187.0/2304.0;
-  restriction[0](11,11) = 55.0/1152.0;
-  restriction[0](11,12) = -85.0/768.0;
-  restriction[0](11,13) = 17.0/192.0;
-  restriction[0](11,14) = -5.0/96.0;
-  restriction[0](11,15) = 25.0/384.0;
-  restriction[0](12,0) = 1.0/324.0;
-  restriction[0](12,1) = -53.0/7776.0;
-  restriction[0](12,2) = 2809.0/186624.0;
-  restriction[0](12,3) = -53.0/7776.0;
-  restriction[0](12,4) = -35.0/2592.0;
-  restriction[0](12,5) = -89.0/2592.0;
-  restriction[0](12,6) = 1855.0/62208.0;
-  restriction[0](12,7) = 4717.0/62208.0;
-  restriction[0](12,8) = 1855.0/62208.0;
-  restriction[0](12,9) = 4717.0/62208.0;
-  restriction[0](12,10) = -35.0/2592.0;
-  restriction[0](12,11) = -89.0/2592.0;
-  restriction[0](12,12) = 1225.0/20736.0;
-  restriction[0](12,13) = 3115.0/20736.0;
-  restriction[0](12,14) = 7921.0/20736.0;
-  restriction[0](12,15) = 3115.0/20736.0;
-  restriction[0](13,0) = -5.0/2592.0;
-  restriction[0](13,1) = -37.0/7776.0;
-  restriction[0](13,2) = 1961.0/186624.0;
-  restriction[0](13,3) = 265.0/62208.0;
-  restriction[0](13,4) = 17.0/2592.0;
-  restriction[0](13,5) = -5.0/1296.0;
-  restriction[0](13,6) = 1295.0/62208.0;
-  restriction[0](13,7) = 3293.0/62208.0;
-  restriction[0](13,8) = -901.0/62208.0;
-  restriction[0](13,9) = 265.0/31104.0;
-  restriction[0](13,10) = 175.0/20736.0;
-  restriction[0](13,11) = 445.0/20736.0;
-  restriction[0](13,12) = -595.0/20736.0;
-  restriction[0](13,13) = 175.0/10368.0;
-  restriction[0](13,14) = 445.0/10368.0;
-  restriction[0](13,15) = -1513.0/20736.0;
-  restriction[0](14,0) = 25.0/20736.0;
-  restriction[0](14,1) = 185.0/62208.0;
-  restriction[0](14,2) = 1369.0/186624.0;
-  restriction[0](14,3) = 185.0/62208.0;
-  restriction[0](14,4) = -85.0/20736.0;
-  restriction[0](14,5) = 25.0/10368.0;
-  restriction[0](14,6) = -629.0/62208.0;
-  restriction[0](14,7) = 185.0/31104.0;
-  restriction[0](14,8) = -629.0/62208.0;
-  restriction[0](14,9) = 185.0/31104.0;
-  restriction[0](14,10) = -85.0/20736.0;
-  restriction[0](14,11) = 25.0/10368.0;
-  restriction[0](14,12) = 289.0/20736.0;
-  restriction[0](14,13) = -85.0/10368.0;
-  restriction[0](14,14) = 25.0/5184.0;
-  restriction[0](14,15) = -85.0/10368.0;
-  restriction[0](15,0) = -5.0/2592.0;
-  restriction[0](15,1) = 265.0/62208.0;
-  restriction[0](15,2) = 1961.0/186624.0;
-  restriction[0](15,3) = -37.0/7776.0;
-  restriction[0](15,4) = 175.0/20736.0;
-  restriction[0](15,5) = 445.0/20736.0;
-  restriction[0](15,6) = -901.0/62208.0;
-  restriction[0](15,7) = 265.0/31104.0;
-  restriction[0](15,8) = 1295.0/62208.0;
-  restriction[0](15,9) = 3293.0/62208.0;
-  restriction[0](15,10) = 17.0/2592.0;
-  restriction[0](15,11) = -5.0/1296.0;
-  restriction[0](15,12) = -595.0/20736.0;
-  restriction[0](15,13) = -1513.0/20736.0;
-  restriction[0](15,14) = 445.0/10368.0;
-  restriction[0](15,15) = 175.0/10368.0;
-  restriction[1](0,0) = -11.0/256.0;
-  restriction[1](0,1) = -11.0/128.0;
-  restriction[1](0,2) = 1.0/128.0;
-  restriction[1](0,3) = 1.0/256.0;
-  restriction[1](0,4) = 33.0/256.0;
-  restriction[1](0,5) = 33.0/256.0;
-  restriction[1](0,6) = -15.0/128.0;
-  restriction[1](0,7) = 3.0/32.0;
-  restriction[1](0,8) = -3.0/256.0;
-  restriction[1](0,9) = -3.0/256.0;
-  restriction[1](0,10) = -15.0/256.0;
-  restriction[1](0,11) = 3.0/64.0;
-  restriction[1](0,12) = 45.0/256.0;
-  restriction[1](0,13) = 45.0/256.0;
-  restriction[1](0,14) = -9.0/64.0;
-  restriction[1](0,15) = -9.0/64.0;
-  restriction[1](1,0) = -11.0/256.0;
-  restriction[1](1,1) = 121.0/256.0;
-  restriction[1](1,2) = -11.0/256.0;
-  restriction[1](1,3) = 1.0/256.0;
-  restriction[1](1,4) = -33.0/64.0;
-  restriction[1](1,5) = 165.0/256.0;
-  restriction[1](1,6) = 165.0/256.0;
-  restriction[1](1,7) = -33.0/64.0;
-  restriction[1](1,8) = 3.0/64.0;
-  restriction[1](1,9) = -15.0/256.0;
-  restriction[1](1,10) = -15.0/256.0;
-  restriction[1](1,11) = 3.0/64.0;
-  restriction[1](1,12) = -45.0/64.0;
-  restriction[1](1,13) = 225.0/256.0;
-  restriction[1](1,14) = -45.0/64.0;
-  restriction[1](1,15) = 9.0/16.0;
-  restriction[1](2,0) = 1.0/128.0;
-  restriction[1](2,1) = -11.0/128.0;
-  restriction[1](2,2) = -11.0/256.0;
-  restriction[1](2,3) = 1.0/256.0;
-  restriction[1](2,4) = 3.0/32.0;
-  restriction[1](2,5) = -15.0/128.0;
-  restriction[1](2,6) = 33.0/256.0;
-  restriction[1](2,7) = 33.0/256.0;
-  restriction[1](2,8) = 3.0/64.0;
-  restriction[1](2,9) = -15.0/256.0;
-  restriction[1](2,10) = -3.0/256.0;
-  restriction[1](2,11) = -3.0/256.0;
-  restriction[1](2,12) = -9.0/64.0;
-  restriction[1](2,13) = 45.0/256.0;
-  restriction[1](2,14) = 45.0/256.0;
-  restriction[1](2,15) = -9.0/64.0;
-  restriction[1](3,0) = 1.0/128.0;
-  restriction[1](3,1) = 1.0/64.0;
-  restriction[1](3,2) = 1.0/128.0;
-  restriction[1](3,3) = 1.0/256.0;
-  restriction[1](3,4) = -3.0/128.0;
-  restriction[1](3,5) = -3.0/128.0;
-  restriction[1](3,6) = -3.0/128.0;
-  restriction[1](3,7) = -3.0/128.0;
-  restriction[1](3,8) = -3.0/256.0;
-  restriction[1](3,9) = -3.0/256.0;
-  restriction[1](3,10) = -3.0/256.0;
-  restriction[1](3,11) = -3.0/256.0;
-  restriction[1](3,12) = 9.0/256.0;
-  restriction[1](3,13) = 9.0/256.0;
-  restriction[1](3,14) = 9.0/256.0;
-  restriction[1](3,15) = 9.0/256.0;
-  restriction[1](4,0) = 407.0/6912.0;
-  restriction[1](4,1) = 55.0/2304.0;
-  restriction[1](4,2) = -5.0/2304.0;
-  restriction[1](4,3) = -37.0/6912.0;
-  restriction[1](4,4) = 55.0/1152.0;
-  restriction[1](4,5) = -187.0/2304.0;
-  restriction[1](4,6) = 25.0/768.0;
-  restriction[1](4,7) = -5.0/192.0;
-  restriction[1](4,8) = -5.0/1152.0;
-  restriction[1](4,9) = 17.0/2304.0;
-  restriction[1](4,10) = 185.0/2304.0;
-  restriction[1](4,11) = -37.0/576.0;
-  restriction[1](4,12) = 25.0/384.0;
-  restriction[1](4,13) = -85.0/768.0;
-  restriction[1](4,14) = 17.0/192.0;
-  restriction[1](4,15) = -5.0/96.0;
-  restriction[1](5,0) = 583.0/6912.0;
-  restriction[1](5,1) = -11.0/288.0;
-  restriction[1](5,2) = 1.0/288.0;
-  restriction[1](5,3) = -53.0/6912.0;
-  restriction[1](5,4) = 979.0/2304.0;
-  restriction[1](5,5) = 385.0/2304.0;
-  restriction[1](5,6) = -5.0/96.0;
-  restriction[1](5,7) = 1.0/24.0;
-  restriction[1](5,8) = -89.0/2304.0;
-  restriction[1](5,9) = -35.0/2304.0;
-  restriction[1](5,10) = 265.0/2304.0;
-  restriction[1](5,11) = -53.0/576.0;
-  restriction[1](5,12) = 445.0/768.0;
-  restriction[1](5,13) = 175.0/768.0;
-  restriction[1](5,14) = -35.0/192.0;
-  restriction[1](5,15) = -89.0/192.0;
-  restriction[1](6,0) = 1.0/288.0;
-  restriction[1](6,1) = -11.0/288.0;
-  restriction[1](6,2) = 583.0/6912.0;
-  restriction[1](6,3) = -53.0/6912.0;
-  restriction[1](6,4) = 1.0/24.0;
-  restriction[1](6,5) = -5.0/96.0;
-  restriction[1](6,6) = 385.0/2304.0;
-  restriction[1](6,7) = 979.0/2304.0;
-  restriction[1](6,8) = -53.0/576.0;
-  restriction[1](6,9) = 265.0/2304.0;
-  restriction[1](6,10) = -35.0/2304.0;
-  restriction[1](6,11) = -89.0/2304.0;
-  restriction[1](6,12) = -35.0/192.0;
-  restriction[1](6,13) = 175.0/768.0;
-  restriction[1](6,14) = 445.0/768.0;
-  restriction[1](6,15) = -89.0/192.0;
-  restriction[1](7,0) = -5.0/2304.0;
-  restriction[1](7,1) = 55.0/2304.0;
-  restriction[1](7,2) = 407.0/6912.0;
-  restriction[1](7,3) = -37.0/6912.0;
-  restriction[1](7,4) = -5.0/192.0;
-  restriction[1](7,5) = 25.0/768.0;
-  restriction[1](7,6) = -187.0/2304.0;
-  restriction[1](7,7) = 55.0/1152.0;
-  restriction[1](7,8) = -37.0/576.0;
-  restriction[1](7,9) = 185.0/2304.0;
-  restriction[1](7,10) = 17.0/2304.0;
-  restriction[1](7,11) = -5.0/1152.0;
-  restriction[1](7,12) = 17.0/192.0;
-  restriction[1](7,13) = -85.0/768.0;
-  restriction[1](7,14) = 25.0/384.0;
-  restriction[1](7,15) = -5.0/96.0;
-  restriction[1](8,0) = -37.0/3456.0;
-  restriction[1](8,1) = -5.0/1152.0;
-  restriction[1](8,2) = -5.0/2304.0;
-  restriction[1](8,3) = -37.0/6912.0;
-  restriction[1](8,4) = -5.0/576.0;
-  restriction[1](8,5) = 17.0/1152.0;
-  restriction[1](8,6) = 5.0/768.0;
-  restriction[1](8,7) = 5.0/768.0;
-  restriction[1](8,8) = -5.0/1152.0;
-  restriction[1](8,9) = 17.0/2304.0;
-  restriction[1](8,10) = 37.0/2304.0;
-  restriction[1](8,11) = 37.0/2304.0;
-  restriction[1](8,12) = 5.0/384.0;
-  restriction[1](8,13) = -17.0/768.0;
-  restriction[1](8,14) = -17.0/768.0;
-  restriction[1](8,15) = 5.0/384.0;
-  restriction[1](9,0) = -53.0/3456.0;
-  restriction[1](9,1) = 1.0/144.0;
-  restriction[1](9,2) = 1.0/288.0;
-  restriction[1](9,3) = -53.0/6912.0;
-  restriction[1](9,4) = -89.0/1152.0;
-  restriction[1](9,5) = -35.0/1152.0;
-  restriction[1](9,6) = -1.0/96.0;
-  restriction[1](9,7) = -1.0/96.0;
-  restriction[1](9,8) = -89.0/2304.0;
-  restriction[1](9,9) = -35.0/2304.0;
-  restriction[1](9,10) = 53.0/2304.0;
-  restriction[1](9,11) = 53.0/2304.0;
-  restriction[1](9,12) = 89.0/768.0;
-  restriction[1](9,13) = 35.0/768.0;
-  restriction[1](9,14) = 35.0/768.0;
-  restriction[1](9,15) = 89.0/768.0;
-  restriction[1](10,0) = 1.0/288.0;
-  restriction[1](10,1) = 1.0/144.0;
-  restriction[1](10,2) = -53.0/3456.0;
-  restriction[1](10,3) = -53.0/6912.0;
-  restriction[1](10,4) = -1.0/96.0;
-  restriction[1](10,5) = -1.0/96.0;
-  restriction[1](10,6) = -35.0/1152.0;
-  restriction[1](10,7) = -89.0/1152.0;
-  restriction[1](10,8) = 53.0/2304.0;
-  restriction[1](10,9) = 53.0/2304.0;
-  restriction[1](10,10) = -35.0/2304.0;
-  restriction[1](10,11) = -89.0/2304.0;
-  restriction[1](10,12) = 35.0/768.0;
-  restriction[1](10,13) = 35.0/768.0;
-  restriction[1](10,14) = 89.0/768.0;
-  restriction[1](10,15) = 89.0/768.0;
-  restriction[1](11,0) = -5.0/2304.0;
-  restriction[1](11,1) = -5.0/1152.0;
-  restriction[1](11,2) = -37.0/3456.0;
-  restriction[1](11,3) = -37.0/6912.0;
-  restriction[1](11,4) = 5.0/768.0;
-  restriction[1](11,5) = 5.0/768.0;
-  restriction[1](11,6) = 17.0/1152.0;
-  restriction[1](11,7) = -5.0/576.0;
-  restriction[1](11,8) = 37.0/2304.0;
-  restriction[1](11,9) = 37.0/2304.0;
-  restriction[1](11,10) = 17.0/2304.0;
-  restriction[1](11,11) = -5.0/1152.0;
-  restriction[1](11,12) = -17.0/768.0;
-  restriction[1](11,13) = -17.0/768.0;
-  restriction[1](11,14) = 5.0/384.0;
-  restriction[1](11,15) = 5.0/384.0;
-  restriction[1](12,0) = -37.0/7776.0;
-  restriction[1](12,1) = -5.0/2592.0;
-  restriction[1](12,2) = 265.0/62208.0;
-  restriction[1](12,3) = 1961.0/186624.0;
-  restriction[1](12,4) = -5.0/1296.0;
-  restriction[1](12,5) = 17.0/2592.0;
-  restriction[1](12,6) = 175.0/20736.0;
-  restriction[1](12,7) = 445.0/20736.0;
-  restriction[1](12,8) = 265.0/31104.0;
-  restriction[1](12,9) = -901.0/62208.0;
-  restriction[1](12,10) = 1295.0/62208.0;
-  restriction[1](12,11) = 3293.0/62208.0;
-  restriction[1](12,12) = 175.0/10368.0;
-  restriction[1](12,13) = -595.0/20736.0;
-  restriction[1](12,14) = -1513.0/20736.0;
-  restriction[1](12,15) = 445.0/10368.0;
-  restriction[1](13,0) = -53.0/7776.0;
-  restriction[1](13,1) = 1.0/324.0;
-  restriction[1](13,2) = -53.0/7776.0;
-  restriction[1](13,3) = 2809.0/186624.0;
-  restriction[1](13,4) = -89.0/2592.0;
-  restriction[1](13,5) = -35.0/2592.0;
-  restriction[1](13,6) = -35.0/2592.0;
-  restriction[1](13,7) = -89.0/2592.0;
-  restriction[1](13,8) = 4717.0/62208.0;
-  restriction[1](13,9) = 1855.0/62208.0;
-  restriction[1](13,10) = 1855.0/62208.0;
-  restriction[1](13,11) = 4717.0/62208.0;
-  restriction[1](13,12) = 3115.0/20736.0;
-  restriction[1](13,13) = 1225.0/20736.0;
-  restriction[1](13,14) = 3115.0/20736.0;
-  restriction[1](13,15) = 7921.0/20736.0;
-  restriction[1](14,0) = 265.0/62208.0;
-  restriction[1](14,1) = -5.0/2592.0;
-  restriction[1](14,2) = -37.0/7776.0;
-  restriction[1](14,3) = 1961.0/186624.0;
-  restriction[1](14,4) = 445.0/20736.0;
-  restriction[1](14,5) = 175.0/20736.0;
-  restriction[1](14,6) = 17.0/2592.0;
-  restriction[1](14,7) = -5.0/1296.0;
-  restriction[1](14,8) = 3293.0/62208.0;
-  restriction[1](14,9) = 1295.0/62208.0;
-  restriction[1](14,10) = -901.0/62208.0;
-  restriction[1](14,11) = 265.0/31104.0;
-  restriction[1](14,12) = -1513.0/20736.0;
-  restriction[1](14,13) = -595.0/20736.0;
-  restriction[1](14,14) = 175.0/10368.0;
-  restriction[1](14,15) = 445.0/10368.0;
-  restriction[1](15,0) = 185.0/62208.0;
-  restriction[1](15,1) = 25.0/20736.0;
-  restriction[1](15,2) = 185.0/62208.0;
-  restriction[1](15,3) = 1369.0/186624.0;
-  restriction[1](15,4) = 25.0/10368.0;
-  restriction[1](15,5) = -85.0/20736.0;
-  restriction[1](15,6) = -85.0/20736.0;
-  restriction[1](15,7) = 25.0/10368.0;
-  restriction[1](15,8) = 185.0/31104.0;
-  restriction[1](15,9) = -629.0/62208.0;
-  restriction[1](15,10) = -629.0/62208.0;
-  restriction[1](15,11) = 185.0/31104.0;
-  restriction[1](15,12) = -85.0/10368.0;
-  restriction[1](15,13) = 289.0/20736.0;
-  restriction[1](15,14) = -85.0/10368.0;
-  restriction[1](15,15) = 25.0/5184.0;
-  restriction[2](0,0) = 1.0/256.0;
-  restriction[2](0,1) = 1.0/128.0;
-  restriction[2](0,2) = 1.0/64.0;
-  restriction[2](0,3) = 1.0/128.0;
-  restriction[2](0,4) = -3.0/256.0;
-  restriction[2](0,5) = -3.0/256.0;
-  restriction[2](0,6) = -3.0/128.0;
-  restriction[2](0,7) = -3.0/128.0;
-  restriction[2](0,8) = -3.0/128.0;
-  restriction[2](0,9) = -3.0/128.0;
-  restriction[2](0,10) = -3.0/256.0;
-  restriction[2](0,11) = -3.0/256.0;
-  restriction[2](0,12) = 9.0/256.0;
-  restriction[2](0,13) = 9.0/256.0;
-  restriction[2](0,14) = 9.0/256.0;
-  restriction[2](0,15) = 9.0/256.0;
-  restriction[2](1,0) = 1.0/256.0;
-  restriction[2](1,1) = -11.0/256.0;
-  restriction[2](1,2) = -11.0/128.0;
-  restriction[2](1,3) = 1.0/128.0;
-  restriction[2](1,4) = 3.0/64.0;
-  restriction[2](1,5) = -15.0/256.0;
-  restriction[2](1,6) = 33.0/256.0;
-  restriction[2](1,7) = 33.0/256.0;
-  restriction[2](1,8) = 3.0/32.0;
-  restriction[2](1,9) = -15.0/128.0;
-  restriction[2](1,10) = -3.0/256.0;
-  restriction[2](1,11) = -3.0/256.0;
-  restriction[2](1,12) = -9.0/64.0;
-  restriction[2](1,13) = 45.0/256.0;
-  restriction[2](1,14) = 45.0/256.0;
-  restriction[2](1,15) = -9.0/64.0;
-  restriction[2](2,0) = 1.0/256.0;
-  restriction[2](2,1) = -11.0/256.0;
-  restriction[2](2,2) = 121.0/256.0;
-  restriction[2](2,3) = -11.0/256.0;
-  restriction[2](2,4) = 3.0/64.0;
-  restriction[2](2,5) = -15.0/256.0;
-  restriction[2](2,6) = -33.0/64.0;
-  restriction[2](2,7) = 165.0/256.0;
-  restriction[2](2,8) = -33.0/64.0;
-  restriction[2](2,9) = 165.0/256.0;
-  restriction[2](2,10) = 3.0/64.0;
-  restriction[2](2,11) = -15.0/256.0;
-  restriction[2](2,12) = 9.0/16.0;
-  restriction[2](2,13) = -45.0/64.0;
-  restriction[2](2,14) = 225.0/256.0;
-  restriction[2](2,15) = -45.0/64.0;
-  restriction[2](3,0) = 1.0/256.0;
-  restriction[2](3,1) = 1.0/128.0;
-  restriction[2](3,2) = -11.0/128.0;
-  restriction[2](3,3) = -11.0/256.0;
-  restriction[2](3,4) = -3.0/256.0;
-  restriction[2](3,5) = -3.0/256.0;
-  restriction[2](3,6) = 3.0/32.0;
-  restriction[2](3,7) = -15.0/128.0;
-  restriction[2](3,8) = 33.0/256.0;
-  restriction[2](3,9) = 33.0/256.0;
-  restriction[2](3,10) = 3.0/64.0;
-  restriction[2](3,11) = -15.0/256.0;
-  restriction[2](3,12) = -9.0/64.0;
-  restriction[2](3,13) = -9.0/64.0;
-  restriction[2](3,14) = 45.0/256.0;
-  restriction[2](3,15) = 45.0/256.0;
-  restriction[2](4,0) = -37.0/6912.0;
-  restriction[2](4,1) = -5.0/2304.0;
-  restriction[2](4,2) = -5.0/1152.0;
-  restriction[2](4,3) = -37.0/3456.0;
-  restriction[2](4,4) = -5.0/1152.0;
-  restriction[2](4,5) = 17.0/2304.0;
-  restriction[2](4,6) = 5.0/768.0;
-  restriction[2](4,7) = 5.0/768.0;
-  restriction[2](4,8) = -5.0/576.0;
-  restriction[2](4,9) = 17.0/1152.0;
-  restriction[2](4,10) = 37.0/2304.0;
-  restriction[2](4,11) = 37.0/2304.0;
-  restriction[2](4,12) = 5.0/384.0;
-  restriction[2](4,13) = -17.0/768.0;
-  restriction[2](4,14) = -17.0/768.0;
-  restriction[2](4,15) = 5.0/384.0;
-  restriction[2](5,0) = -53.0/6912.0;
-  restriction[2](5,1) = 1.0/288.0;
-  restriction[2](5,2) = 1.0/144.0;
-  restriction[2](5,3) = -53.0/3456.0;
-  restriction[2](5,4) = -89.0/2304.0;
-  restriction[2](5,5) = -35.0/2304.0;
-  restriction[2](5,6) = -1.0/96.0;
-  restriction[2](5,7) = -1.0/96.0;
-  restriction[2](5,8) = -89.0/1152.0;
-  restriction[2](5,9) = -35.0/1152.0;
-  restriction[2](5,10) = 53.0/2304.0;
-  restriction[2](5,11) = 53.0/2304.0;
-  restriction[2](5,12) = 89.0/768.0;
-  restriction[2](5,13) = 35.0/768.0;
-  restriction[2](5,14) = 35.0/768.0;
-  restriction[2](5,15) = 89.0/768.0;
-  restriction[2](6,0) = -37.0/6912.0;
-  restriction[2](6,1) = 407.0/6912.0;
-  restriction[2](6,2) = 55.0/2304.0;
-  restriction[2](6,3) = -5.0/2304.0;
-  restriction[2](6,4) = -37.0/576.0;
-  restriction[2](6,5) = 185.0/2304.0;
-  restriction[2](6,6) = 55.0/1152.0;
-  restriction[2](6,7) = -187.0/2304.0;
-  restriction[2](6,8) = -5.0/192.0;
-  restriction[2](6,9) = 25.0/768.0;
-  restriction[2](6,10) = -5.0/1152.0;
-  restriction[2](6,11) = 17.0/2304.0;
-  restriction[2](6,12) = -5.0/96.0;
-  restriction[2](6,13) = 25.0/384.0;
-  restriction[2](6,14) = -85.0/768.0;
-  restriction[2](6,15) = 17.0/192.0;
-  restriction[2](7,0) = -53.0/6912.0;
-  restriction[2](7,1) = 583.0/6912.0;
-  restriction[2](7,2) = -11.0/288.0;
-  restriction[2](7,3) = 1.0/288.0;
-  restriction[2](7,4) = -53.0/576.0;
-  restriction[2](7,5) = 265.0/2304.0;
-  restriction[2](7,6) = 979.0/2304.0;
-  restriction[2](7,7) = 385.0/2304.0;
-  restriction[2](7,8) = 1.0/24.0;
-  restriction[2](7,9) = -5.0/96.0;
-  restriction[2](7,10) = -89.0/2304.0;
-  restriction[2](7,11) = -35.0/2304.0;
-  restriction[2](7,12) = -89.0/192.0;
-  restriction[2](7,13) = 445.0/768.0;
-  restriction[2](7,14) = 175.0/768.0;
-  restriction[2](7,15) = -35.0/192.0;
-  restriction[2](8,0) = -37.0/6912.0;
-  restriction[2](8,1) = -5.0/2304.0;
-  restriction[2](8,2) = 55.0/2304.0;
-  restriction[2](8,3) = 407.0/6912.0;
-  restriction[2](8,4) = -5.0/1152.0;
-  restriction[2](8,5) = 17.0/2304.0;
-  restriction[2](8,6) = -5.0/192.0;
-  restriction[2](8,7) = 25.0/768.0;
-  restriction[2](8,8) = 55.0/1152.0;
-  restriction[2](8,9) = -187.0/2304.0;
-  restriction[2](8,10) = -37.0/576.0;
-  restriction[2](8,11) = 185.0/2304.0;
-  restriction[2](8,12) = -5.0/96.0;
-  restriction[2](8,13) = 17.0/192.0;
-  restriction[2](8,14) = -85.0/768.0;
-  restriction[2](8,15) = 25.0/384.0;
-  restriction[2](9,0) = -53.0/6912.0;
-  restriction[2](9,1) = 1.0/288.0;
-  restriction[2](9,2) = -11.0/288.0;
-  restriction[2](9,3) = 583.0/6912.0;
-  restriction[2](9,4) = -89.0/2304.0;
-  restriction[2](9,5) = -35.0/2304.0;
-  restriction[2](9,6) = 1.0/24.0;
-  restriction[2](9,7) = -5.0/96.0;
-  restriction[2](9,8) = 979.0/2304.0;
-  restriction[2](9,9) = 385.0/2304.0;
-  restriction[2](9,10) = -53.0/576.0;
-  restriction[2](9,11) = 265.0/2304.0;
-  restriction[2](9,12) = -89.0/192.0;
-  restriction[2](9,13) = -35.0/192.0;
-  restriction[2](9,14) = 175.0/768.0;
-  restriction[2](9,15) = 445.0/768.0;
-  restriction[2](10,0) = -37.0/6912.0;
-  restriction[2](10,1) = -37.0/3456.0;
-  restriction[2](10,2) = -5.0/1152.0;
-  restriction[2](10,3) = -5.0/2304.0;
-  restriction[2](10,4) = 37.0/2304.0;
-  restriction[2](10,5) = 37.0/2304.0;
-  restriction[2](10,6) = -5.0/576.0;
-  restriction[2](10,7) = 17.0/1152.0;
-  restriction[2](10,8) = 5.0/768.0;
-  restriction[2](10,9) = 5.0/768.0;
-  restriction[2](10,10) = -5.0/1152.0;
-  restriction[2](10,11) = 17.0/2304.0;
-  restriction[2](10,12) = 5.0/384.0;
-  restriction[2](10,13) = 5.0/384.0;
-  restriction[2](10,14) = -17.0/768.0;
-  restriction[2](10,15) = -17.0/768.0;
-  restriction[2](11,0) = -53.0/6912.0;
-  restriction[2](11,1) = -53.0/3456.0;
-  restriction[2](11,2) = 1.0/144.0;
-  restriction[2](11,3) = 1.0/288.0;
-  restriction[2](11,4) = 53.0/2304.0;
-  restriction[2](11,5) = 53.0/2304.0;
-  restriction[2](11,6) = -89.0/1152.0;
-  restriction[2](11,7) = -35.0/1152.0;
-  restriction[2](11,8) = -1.0/96.0;
-  restriction[2](11,9) = -1.0/96.0;
-  restriction[2](11,10) = -89.0/2304.0;
-  restriction[2](11,11) = -35.0/2304.0;
-  restriction[2](11,12) = 89.0/768.0;
-  restriction[2](11,13) = 89.0/768.0;
-  restriction[2](11,14) = 35.0/768.0;
-  restriction[2](11,15) = 35.0/768.0;
-  restriction[2](12,0) = 1369.0/186624.0;
-  restriction[2](12,1) = 185.0/62208.0;
-  restriction[2](12,2) = 25.0/20736.0;
-  restriction[2](12,3) = 185.0/62208.0;
-  restriction[2](12,4) = 185.0/31104.0;
-  restriction[2](12,5) = -629.0/62208.0;
-  restriction[2](12,6) = 25.0/10368.0;
-  restriction[2](12,7) = -85.0/20736.0;
-  restriction[2](12,8) = 25.0/10368.0;
-  restriction[2](12,9) = -85.0/20736.0;
-  restriction[2](12,10) = 185.0/31104.0;
-  restriction[2](12,11) = -629.0/62208.0;
-  restriction[2](12,12) = 25.0/5184.0;
-  restriction[2](12,13) = -85.0/10368.0;
-  restriction[2](12,14) = 289.0/20736.0;
-  restriction[2](12,15) = -85.0/10368.0;
-  restriction[2](13,0) = 1961.0/186624.0;
-  restriction[2](13,1) = -37.0/7776.0;
-  restriction[2](13,2) = -5.0/2592.0;
-  restriction[2](13,3) = 265.0/62208.0;
-  restriction[2](13,4) = 3293.0/62208.0;
-  restriction[2](13,5) = 1295.0/62208.0;
-  restriction[2](13,6) = -5.0/1296.0;
-  restriction[2](13,7) = 17.0/2592.0;
-  restriction[2](13,8) = 445.0/20736.0;
-  restriction[2](13,9) = 175.0/20736.0;
-  restriction[2](13,10) = 265.0/31104.0;
-  restriction[2](13,11) = -901.0/62208.0;
-  restriction[2](13,12) = 445.0/10368.0;
-  restriction[2](13,13) = 175.0/10368.0;
-  restriction[2](13,14) = -595.0/20736.0;
-  restriction[2](13,15) = -1513.0/20736.0;
-  restriction[2](14,0) = 2809.0/186624.0;
-  restriction[2](14,1) = -53.0/7776.0;
-  restriction[2](14,2) = 1.0/324.0;
-  restriction[2](14,3) = -53.0/7776.0;
-  restriction[2](14,4) = 4717.0/62208.0;
-  restriction[2](14,5) = 1855.0/62208.0;
-  restriction[2](14,6) = -89.0/2592.0;
-  restriction[2](14,7) = -35.0/2592.0;
-  restriction[2](14,8) = -89.0/2592.0;
-  restriction[2](14,9) = -35.0/2592.0;
-  restriction[2](14,10) = 4717.0/62208.0;
-  restriction[2](14,11) = 1855.0/62208.0;
-  restriction[2](14,12) = 7921.0/20736.0;
-  restriction[2](14,13) = 3115.0/20736.0;
-  restriction[2](14,14) = 1225.0/20736.0;
-  restriction[2](14,15) = 3115.0/20736.0;
-  restriction[2](15,0) = 1961.0/186624.0;
-  restriction[2](15,1) = 265.0/62208.0;
-  restriction[2](15,2) = -5.0/2592.0;
-  restriction[2](15,3) = -37.0/7776.0;
-  restriction[2](15,4) = 265.0/31104.0;
-  restriction[2](15,5) = -901.0/62208.0;
-  restriction[2](15,6) = 445.0/20736.0;
-  restriction[2](15,7) = 175.0/20736.0;
-  restriction[2](15,8) = -5.0/1296.0;
-  restriction[2](15,9) = 17.0/2592.0;
-  restriction[2](15,10) = 3293.0/62208.0;
-  restriction[2](15,11) = 1295.0/62208.0;
-  restriction[2](15,12) = 445.0/10368.0;
-  restriction[2](15,13) = -1513.0/20736.0;
-  restriction[2](15,14) = -595.0/20736.0;
-  restriction[2](15,15) = 175.0/10368.0;
-  restriction[3](0,0) = -11.0/256.0;
-  restriction[3](0,1) = 1.0/256.0;
-  restriction[3](0,2) = 1.0/128.0;
-  restriction[3](0,3) = -11.0/128.0;
-  restriction[3](0,4) = -15.0/256.0;
-  restriction[3](0,5) = 3.0/64.0;
-  restriction[3](0,6) = -3.0/256.0;
-  restriction[3](0,7) = -3.0/256.0;
-  restriction[3](0,8) = -15.0/128.0;
-  restriction[3](0,9) = 3.0/32.0;
-  restriction[3](0,10) = 33.0/256.0;
-  restriction[3](0,11) = 33.0/256.0;
-  restriction[3](0,12) = 45.0/256.0;
-  restriction[3](0,13) = -9.0/64.0;
-  restriction[3](0,14) = -9.0/64.0;
-  restriction[3](0,15) = 45.0/256.0;
-  restriction[3](1,0) = 1.0/128.0;
-  restriction[3](1,1) = 1.0/256.0;
-  restriction[3](1,2) = 1.0/128.0;
-  restriction[3](1,3) = 1.0/64.0;
-  restriction[3](1,4) = -3.0/256.0;
-  restriction[3](1,5) = -3.0/256.0;
-  restriction[3](1,6) = -3.0/256.0;
-  restriction[3](1,7) = -3.0/256.0;
-  restriction[3](1,8) = -3.0/128.0;
-  restriction[3](1,9) = -3.0/128.0;
-  restriction[3](1,10) = -3.0/128.0;
-  restriction[3](1,11) = -3.0/128.0;
-  restriction[3](1,12) = 9.0/256.0;
-  restriction[3](1,13) = 9.0/256.0;
-  restriction[3](1,14) = 9.0/256.0;
-  restriction[3](1,15) = 9.0/256.0;
-  restriction[3](2,0) = 1.0/128.0;
-  restriction[3](2,1) = 1.0/256.0;
-  restriction[3](2,2) = -11.0/256.0;
-  restriction[3](2,3) = -11.0/128.0;
-  restriction[3](2,4) = -3.0/256.0;
-  restriction[3](2,5) = -3.0/256.0;
-  restriction[3](2,6) = 3.0/64.0;
-  restriction[3](2,7) = -15.0/256.0;
-  restriction[3](2,8) = 33.0/256.0;
-  restriction[3](2,9) = 33.0/256.0;
-  restriction[3](2,10) = 3.0/32.0;
-  restriction[3](2,11) = -15.0/128.0;
-  restriction[3](2,12) = -9.0/64.0;
-  restriction[3](2,13) = -9.0/64.0;
-  restriction[3](2,14) = 45.0/256.0;
-  restriction[3](2,15) = 45.0/256.0;
-  restriction[3](3,0) = -11.0/256.0;
-  restriction[3](3,1) = 1.0/256.0;
-  restriction[3](3,2) = -11.0/256.0;
-  restriction[3](3,3) = 121.0/256.0;
-  restriction[3](3,4) = -15.0/256.0;
-  restriction[3](3,5) = 3.0/64.0;
-  restriction[3](3,6) = 3.0/64.0;
-  restriction[3](3,7) = -15.0/256.0;
-  restriction[3](3,8) = 165.0/256.0;
-  restriction[3](3,9) = -33.0/64.0;
-  restriction[3](3,10) = -33.0/64.0;
-  restriction[3](3,11) = 165.0/256.0;
-  restriction[3](3,12) = -45.0/64.0;
-  restriction[3](3,13) = 9.0/16.0;
-  restriction[3](3,14) = -45.0/64.0;
-  restriction[3](3,15) = 225.0/256.0;
-  restriction[3](4,0) = 1.0/288.0;
-  restriction[3](4,1) = -53.0/6912.0;
-  restriction[3](4,2) = -53.0/3456.0;
-  restriction[3](4,3) = 1.0/144.0;
-  restriction[3](4,4) = -35.0/2304.0;
-  restriction[3](4,5) = -89.0/2304.0;
-  restriction[3](4,6) = 53.0/2304.0;
-  restriction[3](4,7) = 53.0/2304.0;
-  restriction[3](4,8) = -35.0/1152.0;
-  restriction[3](4,9) = -89.0/1152.0;
-  restriction[3](4,10) = -1.0/96.0;
-  restriction[3](4,11) = -1.0/96.0;
-  restriction[3](4,12) = 35.0/768.0;
-  restriction[3](4,13) = 89.0/768.0;
-  restriction[3](4,14) = 89.0/768.0;
-  restriction[3](4,15) = 35.0/768.0;
-  restriction[3](5,0) = -5.0/2304.0;
-  restriction[3](5,1) = -37.0/6912.0;
-  restriction[3](5,2) = -37.0/3456.0;
-  restriction[3](5,3) = -5.0/1152.0;
-  restriction[3](5,4) = 17.0/2304.0;
-  restriction[3](5,5) = -5.0/1152.0;
-  restriction[3](5,6) = 37.0/2304.0;
-  restriction[3](5,7) = 37.0/2304.0;
-  restriction[3](5,8) = 17.0/1152.0;
-  restriction[3](5,9) = -5.0/576.0;
-  restriction[3](5,10) = 5.0/768.0;
-  restriction[3](5,11) = 5.0/768.0;
-  restriction[3](5,12) = -17.0/768.0;
-  restriction[3](5,13) = 5.0/384.0;
-  restriction[3](5,14) = 5.0/384.0;
-  restriction[3](5,15) = -17.0/768.0;
-  restriction[3](6,0) = -37.0/3456.0;
-  restriction[3](6,1) = -37.0/6912.0;
-  restriction[3](6,2) = -5.0/2304.0;
-  restriction[3](6,3) = -5.0/1152.0;
-  restriction[3](6,4) = 37.0/2304.0;
-  restriction[3](6,5) = 37.0/2304.0;
-  restriction[3](6,6) = -5.0/1152.0;
-  restriction[3](6,7) = 17.0/2304.0;
-  restriction[3](6,8) = 5.0/768.0;
-  restriction[3](6,9) = 5.0/768.0;
-  restriction[3](6,10) = -5.0/576.0;
-  restriction[3](6,11) = 17.0/1152.0;
-  restriction[3](6,12) = 5.0/384.0;
-  restriction[3](6,13) = 5.0/384.0;
-  restriction[3](6,14) = -17.0/768.0;
-  restriction[3](6,15) = -17.0/768.0;
-  restriction[3](7,0) = -53.0/3456.0;
-  restriction[3](7,1) = -53.0/6912.0;
-  restriction[3](7,2) = 1.0/288.0;
-  restriction[3](7,3) = 1.0/144.0;
-  restriction[3](7,4) = 53.0/2304.0;
-  restriction[3](7,5) = 53.0/2304.0;
-  restriction[3](7,6) = -89.0/2304.0;
-  restriction[3](7,7) = -35.0/2304.0;
-  restriction[3](7,8) = -1.0/96.0;
-  restriction[3](7,9) = -1.0/96.0;
-  restriction[3](7,10) = -89.0/1152.0;
-  restriction[3](7,11) = -35.0/1152.0;
-  restriction[3](7,12) = 89.0/768.0;
-  restriction[3](7,13) = 89.0/768.0;
-  restriction[3](7,14) = 35.0/768.0;
-  restriction[3](7,15) = 35.0/768.0;
-  restriction[3](8,0) = 1.0/288.0;
-  restriction[3](8,1) = -53.0/6912.0;
-  restriction[3](8,2) = 583.0/6912.0;
-  restriction[3](8,3) = -11.0/288.0;
-  restriction[3](8,4) = -35.0/2304.0;
-  restriction[3](8,5) = -89.0/2304.0;
-  restriction[3](8,6) = -53.0/576.0;
-  restriction[3](8,7) = 265.0/2304.0;
-  restriction[3](8,8) = 385.0/2304.0;
-  restriction[3](8,9) = 979.0/2304.0;
-  restriction[3](8,10) = 1.0/24.0;
-  restriction[3](8,11) = -5.0/96.0;
-  restriction[3](8,12) = -35.0/192.0;
-  restriction[3](8,13) = -89.0/192.0;
-  restriction[3](8,14) = 445.0/768.0;
-  restriction[3](8,15) = 175.0/768.0;
-  restriction[3](9,0) = -5.0/2304.0;
-  restriction[3](9,1) = -37.0/6912.0;
-  restriction[3](9,2) = 407.0/6912.0;
-  restriction[3](9,3) = 55.0/2304.0;
-  restriction[3](9,4) = 17.0/2304.0;
-  restriction[3](9,5) = -5.0/1152.0;
-  restriction[3](9,6) = -37.0/576.0;
-  restriction[3](9,7) = 185.0/2304.0;
-  restriction[3](9,8) = -187.0/2304.0;
-  restriction[3](9,9) = 55.0/1152.0;
-  restriction[3](9,10) = -5.0/192.0;
-  restriction[3](9,11) = 25.0/768.0;
-  restriction[3](9,12) = 17.0/192.0;
-  restriction[3](9,13) = -5.0/96.0;
-  restriction[3](9,14) = 25.0/384.0;
-  restriction[3](9,15) = -85.0/768.0;
-  restriction[3](10,0) = 407.0/6912.0;
-  restriction[3](10,1) = -37.0/6912.0;
-  restriction[3](10,2) = -5.0/2304.0;
-  restriction[3](10,3) = 55.0/2304.0;
-  restriction[3](10,4) = 185.0/2304.0;
-  restriction[3](10,5) = -37.0/576.0;
-  restriction[3](10,6) = -5.0/1152.0;
-  restriction[3](10,7) = 17.0/2304.0;
-  restriction[3](10,8) = 25.0/768.0;
-  restriction[3](10,9) = -5.0/192.0;
-  restriction[3](10,10) = 55.0/1152.0;
-  restriction[3](10,11) = -187.0/2304.0;
-  restriction[3](10,12) = 25.0/384.0;
-  restriction[3](10,13) = -5.0/96.0;
-  restriction[3](10,14) = 17.0/192.0;
-  restriction[3](10,15) = -85.0/768.0;
-  restriction[3](11,0) = 583.0/6912.0;
-  restriction[3](11,1) = -53.0/6912.0;
-  restriction[3](11,2) = 1.0/288.0;
-  restriction[3](11,3) = -11.0/288.0;
-  restriction[3](11,4) = 265.0/2304.0;
-  restriction[3](11,5) = -53.0/576.0;
-  restriction[3](11,6) = -89.0/2304.0;
-  restriction[3](11,7) = -35.0/2304.0;
-  restriction[3](11,8) = -5.0/96.0;
-  restriction[3](11,9) = 1.0/24.0;
-  restriction[3](11,10) = 979.0/2304.0;
-  restriction[3](11,11) = 385.0/2304.0;
-  restriction[3](11,12) = 445.0/768.0;
-  restriction[3](11,13) = -89.0/192.0;
-  restriction[3](11,14) = -35.0/192.0;
-  restriction[3](11,15) = 175.0/768.0;
-  restriction[3](12,0) = -37.0/7776.0;
-  restriction[3](12,1) = 1961.0/186624.0;
-  restriction[3](12,2) = 265.0/62208.0;
-  restriction[3](12,3) = -5.0/2592.0;
-  restriction[3](12,4) = 1295.0/62208.0;
-  restriction[3](12,5) = 3293.0/62208.0;
-  restriction[3](12,6) = 265.0/31104.0;
-  restriction[3](12,7) = -901.0/62208.0;
-  restriction[3](12,8) = 175.0/20736.0;
-  restriction[3](12,9) = 445.0/20736.0;
-  restriction[3](12,10) = -5.0/1296.0;
-  restriction[3](12,11) = 17.0/2592.0;
-  restriction[3](12,12) = 175.0/10368.0;
-  restriction[3](12,13) = 445.0/10368.0;
-  restriction[3](12,14) = -1513.0/20736.0;
-  restriction[3](12,15) = -595.0/20736.0;
-  restriction[3](13,0) = 185.0/62208.0;
-  restriction[3](13,1) = 1369.0/186624.0;
-  restriction[3](13,2) = 185.0/62208.0;
-  restriction[3](13,3) = 25.0/20736.0;
-  restriction[3](13,4) = -629.0/62208.0;
-  restriction[3](13,5) = 185.0/31104.0;
-  restriction[3](13,6) = 185.0/31104.0;
-  restriction[3](13,7) = -629.0/62208.0;
-  restriction[3](13,8) = -85.0/20736.0;
-  restriction[3](13,9) = 25.0/10368.0;
-  restriction[3](13,10) = 25.0/10368.0;
-  restriction[3](13,11) = -85.0/20736.0;
-  restriction[3](13,12) = -85.0/10368.0;
-  restriction[3](13,13) = 25.0/5184.0;
-  restriction[3](13,14) = -85.0/10368.0;
-  restriction[3](13,15) = 289.0/20736.0;
-  restriction[3](14,0) = 265.0/62208.0;
-  restriction[3](14,1) = 1961.0/186624.0;
-  restriction[3](14,2) = -37.0/7776.0;
-  restriction[3](14,3) = -5.0/2592.0;
-  restriction[3](14,4) = -901.0/62208.0;
-  restriction[3](14,5) = 265.0/31104.0;
-  restriction[3](14,6) = 3293.0/62208.0;
-  restriction[3](14,7) = 1295.0/62208.0;
-  restriction[3](14,8) = 17.0/2592.0;
-  restriction[3](14,9) = -5.0/1296.0;
-  restriction[3](14,10) = 445.0/20736.0;
-  restriction[3](14,11) = 175.0/20736.0;
-  restriction[3](14,12) = -1513.0/20736.0;
-  restriction[3](14,13) = 445.0/10368.0;
-  restriction[3](14,14) = 175.0/10368.0;
-  restriction[3](14,15) = -595.0/20736.0;
-  restriction[3](15,0) = -53.0/7776.0;
-  restriction[3](15,1) = 2809.0/186624.0;
-  restriction[3](15,2) = -53.0/7776.0;
-  restriction[3](15,3) = 1.0/324.0;
-  restriction[3](15,4) = 1855.0/62208.0;
-  restriction[3](15,5) = 4717.0/62208.0;
-  restriction[3](15,6) = 4717.0/62208.0;
-  restriction[3](15,7) = 1855.0/62208.0;
-  restriction[3](15,8) = -35.0/2592.0;
-  restriction[3](15,9) = -89.0/2592.0;
-  restriction[3](15,10) = -89.0/2592.0;
-  restriction[3](15,11) = -35.0/2592.0;
-  restriction[3](15,12) = 3115.0/20736.0;
-  restriction[3](15,13) = 7921.0/20736.0;
-  restriction[3](15,14) = 3115.0/20736.0;
-  restriction[3](15,15) = 1225.0/20736.0;
-};
-
-
-
-template<>
-FEDG_Q4<2>::FEDG_Q4():
-               FEQ4<2>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<2>::children_per_cell; ++ child)
-    restriction[child].clear();
-
-#if 1
-                                  // compiling the following function
-                                  // takes way too long. if you
-                                  // really need it, then change the
-                                  // preprocessor constant to let the
-                                  // following be compiled.
-  Assert (false, ExcNotImplemented());
-#else
-  restriction[0](0,0) = 43681.0/82944.0;
-  restriction[0](0,1) = 1045.0/82944.0;
-  restriction[0](0,2) = 25.0/82944.0;
-  restriction[0](0,3) = 1045.0/82944.0;
-  restriction[0](0,4) = 7315.0/10368.0;
-  restriction[0](0,5) = -5225.0/6912.0;
-  restriction[0](0,6) = 1045.0/10368.0;
-  restriction[0](0,7) = 175.0/10368.0;
-  restriction[0](0,8) = -125.0/6912.0;
-  restriction[0](0,9) = 25.0/10368.0;
-  restriction[0](0,10) = 175.0/10368.0;
-  restriction[0](0,11) = -125.0/6912.0;
-  restriction[0](0,12) = 25.0/10368.0;
-  restriction[0](0,13) = 7315.0/10368.0;
-  restriction[0](0,14) = -5225.0/6912.0;
-  restriction[0](0,15) = 1045.0/10368.0;
-  restriction[0](0,16) = 1225.0/1296.0;
-  restriction[0](0,17) = 175.0/1296.0;
-  restriction[0](0,18) = 25.0/1296.0;
-  restriction[0](0,19) = 175.0/1296.0;
-  restriction[0](0,20) = -875.0/864.0;
-  restriction[0](0,21) = -125.0/864.0;
-  restriction[0](0,22) = -125.0/864.0;
-  restriction[0](0,23) = -875.0/864.0;
-  restriction[0](0,24) = 625.0/576.0;
-  restriction[0](1,0) = 5225.0/82944.0;
-  restriction[0](1,1) = 5225.0/82944.0;
-  restriction[0](1,2) = 125.0/82944.0;
-  restriction[0](1,3) = 125.0/82944.0;
-  restriction[0](1,4) = -1045.0/10368.0;
-  restriction[0](1,5) = -1045.0/6912.0;
-  restriction[0](1,6) = 2717.0/10368.0;
-  restriction[0](1,7) = 875.0/10368.0;
-  restriction[0](1,8) = -625.0/6912.0;
-  restriction[0](1,9) = 125.0/10368.0;
-  restriction[0](1,10) = -25.0/10368.0;
-  restriction[0](1,11) = -25.0/6912.0;
-  restriction[0](1,12) = 65.0/10368.0;
-  restriction[0](1,13) = 875.0/10368.0;
-  restriction[0](1,14) = -625.0/6912.0;
-  restriction[0](1,15) = 125.0/10368.0;
-  restriction[0](1,16) = -175.0/1296.0;
-  restriction[0](1,17) = 455.0/1296.0;
-  restriction[0](1,18) = 65.0/1296.0;
-  restriction[0](1,19) = -25.0/1296.0;
-  restriction[0](1,20) = -175.0/864.0;
-  restriction[0](1,21) = -325.0/864.0;
-  restriction[0](1,22) = -25.0/864.0;
-  restriction[0](1,23) = 125.0/864.0;
-  restriction[0](1,24) = 125.0/576.0;
-  restriction[0](2,0) = 625.0/82944.0;
-  restriction[0](2,1) = 625.0/82944.0;
-  restriction[0](2,2) = 625.0/82944.0;
-  restriction[0](2,3) = 625.0/82944.0;
-  restriction[0](2,4) = -125.0/10368.0;
-  restriction[0](2,5) = -125.0/6912.0;
-  restriction[0](2,6) = 325.0/10368.0;
-  restriction[0](2,7) = -125.0/10368.0;
-  restriction[0](2,8) = -125.0/6912.0;
-  restriction[0](2,9) = 325.0/10368.0;
-  restriction[0](2,10) = -125.0/10368.0;
-  restriction[0](2,11) = -125.0/6912.0;
-  restriction[0](2,12) = 325.0/10368.0;
-  restriction[0](2,13) = -125.0/10368.0;
-  restriction[0](2,14) = -125.0/6912.0;
-  restriction[0](2,15) = 325.0/10368.0;
-  restriction[0](2,16) = 25.0/1296.0;
-  restriction[0](2,17) = -65.0/1296.0;
-  restriction[0](2,18) = 169.0/1296.0;
-  restriction[0](2,19) = -65.0/1296.0;
-  restriction[0](2,20) = 25.0/864.0;
-  restriction[0](2,21) = -65.0/864.0;
-  restriction[0](2,22) = -65.0/864.0;
-  restriction[0](2,23) = 25.0/864.0;
-  restriction[0](2,24) = 25.0/576.0;
-  restriction[0](3,0) = 5225.0/82944.0;
-  restriction[0](3,1) = 125.0/82944.0;
-  restriction[0](3,2) = 125.0/82944.0;
-  restriction[0](3,3) = 5225.0/82944.0;
-  restriction[0](3,4) = 875.0/10368.0;
-  restriction[0](3,5) = -625.0/6912.0;
-  restriction[0](3,6) = 125.0/10368.0;
-  restriction[0](3,7) = -25.0/10368.0;
-  restriction[0](3,8) = -25.0/6912.0;
-  restriction[0](3,9) = 65.0/10368.0;
-  restriction[0](3,10) = 875.0/10368.0;
-  restriction[0](3,11) = -625.0/6912.0;
-  restriction[0](3,12) = 125.0/10368.0;
-  restriction[0](3,13) = -1045.0/10368.0;
-  restriction[0](3,14) = -1045.0/6912.0;
-  restriction[0](3,15) = 2717.0/10368.0;
-  restriction[0](3,16) = -175.0/1296.0;
-  restriction[0](3,17) = -25.0/1296.0;
-  restriction[0](3,18) = 65.0/1296.0;
-  restriction[0](3,19) = 455.0/1296.0;
-  restriction[0](3,20) = 125.0/864.0;
-  restriction[0](3,21) = -25.0/864.0;
-  restriction[0](3,22) = -325.0/864.0;
-  restriction[0](3,23) = -175.0/864.0;
-  restriction[0](3,24) = 125.0/576.0;
-  restriction[0](4,0) = -525635.0/10616832.0;
-  restriction[0](4,1) = 245575.0/10616832.0;
-  restriction[0](4,2) = 5875.0/10616832.0;
-  restriction[0](4,3) = -12575.0/10616832.0;
-  restriction[0](4,4) = 289465.0/1327104.0;
-  restriction[0](4,5) = 334609.0/884736.0;
-  restriction[0](4,6) = 270655.0/1327104.0;
-  restriction[0](4,7) = 41125.0/1327104.0;
-  restriction[0](4,8) = -29375.0/884736.0;
-  restriction[0](4,9) = 5875.0/1327104.0;
-  restriction[0](4,10) = 6925.0/1327104.0;
-  restriction[0](4,11) = 8005.0/884736.0;
-  restriction[0](4,12) = 6475.0/1327104.0;
-  restriction[0](4,13) = -88025.0/1327104.0;
-  restriction[0](4,14) = 62875.0/884736.0;
-  restriction[0](4,15) = -12575.0/1327104.0;
-  restriction[0](4,16) = 48475.0/165888.0;
-  restriction[0](4,17) = 45325.0/165888.0;
-  restriction[0](4,18) = 6475.0/165888.0;
-  restriction[0](4,19) = 6925.0/165888.0;
-  restriction[0](4,20) = 56035.0/110592.0;
-  restriction[0](4,21) = -32375.0/110592.0;
-  restriction[0](4,22) = 8005.0/110592.0;
-  restriction[0](4,23) = -34625.0/110592.0;
-  restriction[0](4,24) = -40025.0/73728.0;
-  restriction[0](5,0) = 1045.0/73728.0;
-  restriction[0](5,1) = 22781.0/221184.0;
-  restriction[0](5,2) = 545.0/221184.0;
-  restriction[0](5,3) = 25.0/73728.0;
-  restriction[0](5,4) = -1045.0/27648.0;
-  restriction[0](5,5) = -1045.0/18432.0;
-  restriction[0](5,6) = 1045.0/3072.0;
-  restriction[0](5,7) = 3815.0/27648.0;
-  restriction[0](5,8) = -2725.0/18432.0;
-  restriction[0](5,9) = 545.0/27648.0;
-  restriction[0](5,10) = -25.0/27648.0;
-  restriction[0](5,11) = -25.0/18432.0;
-  restriction[0](5,12) = 25.0/3072.0;
-  restriction[0](5,13) = 175.0/9216.0;
-  restriction[0](5,14) = -125.0/6144.0;
-  restriction[0](5,15) = 25.0/9216.0;
-  restriction[0](5,16) = -175.0/3456.0;
-  restriction[0](5,17) = 175.0/384.0;
-  restriction[0](5,18) = 25.0/384.0;
-  restriction[0](5,19) = -25.0/3456.0;
-  restriction[0](5,20) = -175.0/2304.0;
-  restriction[0](5,21) = -125.0/256.0;
-  restriction[0](5,22) = -25.0/2304.0;
-  restriction[0](5,23) = 125.0/2304.0;
-  restriction[0](5,24) = 125.0/1536.0;
-  restriction[0](6,0) = -57475.0/10616832.0;
-  restriction[0](6,1) = 11495.0/10616832.0;
-  restriction[0](6,2) = 275.0/10616832.0;
-  restriction[0](6,3) = -1375.0/10616832.0;
-  restriction[0](6,4) = 35321.0/1327104.0;
-  restriction[0](6,5) = -19855.0/884736.0;
-  restriction[0](6,6) = -63745.0/1327104.0;
-  restriction[0](6,7) = 1925.0/1327104.0;
-  restriction[0](6,8) = -1375.0/884736.0;
-  restriction[0](6,9) = 275.0/1327104.0;
-  restriction[0](6,10) = 845.0/1327104.0;
-  restriction[0](6,11) = -475.0/884736.0;
-  restriction[0](6,12) = -1525.0/1327104.0;
-  restriction[0](6,13) = -9625.0/1327104.0;
-  restriction[0](6,14) = 6875.0/884736.0;
-  restriction[0](6,15) = -1375.0/1327104.0;
-  restriction[0](6,16) = 5915.0/165888.0;
-  restriction[0](6,17) = -10675.0/165888.0;
-  restriction[0](6,18) = -1525.0/165888.0;
-  restriction[0](6,19) = 845.0/165888.0;
-  restriction[0](6,20) = -3325.0/110592.0;
-  restriction[0](6,21) = 7625.0/110592.0;
-  restriction[0](6,22) = -475.0/110592.0;
-  restriction[0](6,23) = -4225.0/110592.0;
-  restriction[0](6,24) = 2375.0/73728.0;
-  restriction[0](7,0) = -62875.0/10616832.0;
-  restriction[0](7,1) = -62875.0/10616832.0;
-  restriction[0](7,2) = 29375.0/10616832.0;
-  restriction[0](7,3) = 29375.0/10616832.0;
-  restriction[0](7,4) = 12575.0/1327104.0;
-  restriction[0](7,5) = 12575.0/884736.0;
-  restriction[0](7,6) = -32695.0/1327104.0;
-  restriction[0](7,7) = 34625.0/1327104.0;
-  restriction[0](7,8) = 40025.0/884736.0;
-  restriction[0](7,9) = 32375.0/1327104.0;
-  restriction[0](7,10) = -5875.0/1327104.0;
-  restriction[0](7,11) = -5875.0/884736.0;
-  restriction[0](7,12) = 15275.0/1327104.0;
-  restriction[0](7,13) = 34625.0/1327104.0;
-  restriction[0](7,14) = 40025.0/884736.0;
-  restriction[0](7,15) = 32375.0/1327104.0;
-  restriction[0](7,16) = -6925.0/165888.0;
-  restriction[0](7,17) = 18005.0/165888.0;
-  restriction[0](7,18) = 16835.0/165888.0;
-  restriction[0](7,19) = -6475.0/165888.0;
-  restriction[0](7,20) = -6925.0/110592.0;
-  restriction[0](7,21) = 20813.0/110592.0;
-  restriction[0](7,22) = -6475.0/110592.0;
-  restriction[0](7,23) = -8005.0/110592.0;
-  restriction[0](7,24) = -8005.0/73728.0;
-  restriction[0](8,0) = 125.0/73728.0;
-  restriction[0](8,1) = 125.0/73728.0;
-  restriction[0](8,2) = 2725.0/221184.0;
-  restriction[0](8,3) = 2725.0/221184.0;
-  restriction[0](8,4) = -25.0/9216.0;
-  restriction[0](8,5) = -25.0/6144.0;
-  restriction[0](8,6) = 65.0/9216.0;
-  restriction[0](8,7) = -125.0/27648.0;
-  restriction[0](8,8) = -125.0/18432.0;
-  restriction[0](8,9) = 125.0/3072.0;
-  restriction[0](8,10) = -545.0/27648.0;
-  restriction[0](8,11) = -545.0/18432.0;
-  restriction[0](8,12) = 1417.0/27648.0;
-  restriction[0](8,13) = -125.0/27648.0;
-  restriction[0](8,14) = -125.0/18432.0;
-  restriction[0](8,15) = 125.0/3072.0;
-  restriction[0](8,16) = 25.0/3456.0;
-  restriction[0](8,17) = -65.0/3456.0;
-  restriction[0](8,18) = 65.0/384.0;
-  restriction[0](8,19) = -25.0/384.0;
-  restriction[0](8,20) = 25.0/2304.0;
-  restriction[0](8,21) = -65.0/2304.0;
-  restriction[0](8,22) = -25.0/256.0;
-  restriction[0](8,23) = 25.0/2304.0;
-  restriction[0](8,24) = 25.0/1536.0;
-  restriction[0](9,0) = -6875.0/10616832.0;
-  restriction[0](9,1) = -6875.0/10616832.0;
-  restriction[0](9,2) = 1375.0/10616832.0;
-  restriction[0](9,3) = 1375.0/10616832.0;
-  restriction[0](9,4) = 1375.0/1327104.0;
-  restriction[0](9,5) = 1375.0/884736.0;
-  restriction[0](9,6) = -3575.0/1327104.0;
-  restriction[0](9,7) = 4225.0/1327104.0;
-  restriction[0](9,8) = -2375.0/884736.0;
-  restriction[0](9,9) = -7625.0/1327104.0;
-  restriction[0](9,10) = -275.0/1327104.0;
-  restriction[0](9,11) = -275.0/884736.0;
-  restriction[0](9,12) = 715.0/1327104.0;
-  restriction[0](9,13) = 4225.0/1327104.0;
-  restriction[0](9,14) = -2375.0/884736.0;
-  restriction[0](9,15) = -7625.0/1327104.0;
-  restriction[0](9,16) = -845.0/165888.0;
-  restriction[0](9,17) = 2197.0/165888.0;
-  restriction[0](9,18) = -3965.0/165888.0;
-  restriction[0](9,19) = 1525.0/165888.0;
-  restriction[0](9,20) = -845.0/110592.0;
-  restriction[0](9,21) = -1235.0/110592.0;
-  restriction[0](9,22) = 1525.0/110592.0;
-  restriction[0](9,23) = 475.0/110592.0;
-  restriction[0](9,24) = 475.0/73728.0;
-  restriction[0](10,0) = -62875.0/10616832.0;
-  restriction[0](10,1) = 29375.0/10616832.0;
-  restriction[0](10,2) = 29375.0/10616832.0;
-  restriction[0](10,3) = -62875.0/10616832.0;
-  restriction[0](10,4) = 34625.0/1327104.0;
-  restriction[0](10,5) = 40025.0/884736.0;
-  restriction[0](10,6) = 32375.0/1327104.0;
-  restriction[0](10,7) = -5875.0/1327104.0;
-  restriction[0](10,8) = -5875.0/884736.0;
-  restriction[0](10,9) = 15275.0/1327104.0;
-  restriction[0](10,10) = 34625.0/1327104.0;
-  restriction[0](10,11) = 40025.0/884736.0;
-  restriction[0](10,12) = 32375.0/1327104.0;
-  restriction[0](10,13) = 12575.0/1327104.0;
-  restriction[0](10,14) = 12575.0/884736.0;
-  restriction[0](10,15) = -32695.0/1327104.0;
-  restriction[0](10,16) = -6925.0/165888.0;
-  restriction[0](10,17) = -6475.0/165888.0;
-  restriction[0](10,18) = 16835.0/165888.0;
-  restriction[0](10,19) = 18005.0/165888.0;
-  restriction[0](10,20) = -8005.0/110592.0;
-  restriction[0](10,21) = -6475.0/110592.0;
-  restriction[0](10,22) = 20813.0/110592.0;
-  restriction[0](10,23) = -6925.0/110592.0;
-  restriction[0](10,24) = -8005.0/73728.0;
-  restriction[0](11,0) = 125.0/73728.0;
-  restriction[0](11,1) = 2725.0/221184.0;
-  restriction[0](11,2) = 2725.0/221184.0;
-  restriction[0](11,3) = 125.0/73728.0;
-  restriction[0](11,4) = -125.0/27648.0;
-  restriction[0](11,5) = -125.0/18432.0;
-  restriction[0](11,6) = 125.0/3072.0;
-  restriction[0](11,7) = -545.0/27648.0;
-  restriction[0](11,8) = -545.0/18432.0;
-  restriction[0](11,9) = 1417.0/27648.0;
-  restriction[0](11,10) = -125.0/27648.0;
-  restriction[0](11,11) = -125.0/18432.0;
-  restriction[0](11,12) = 125.0/3072.0;
-  restriction[0](11,13) = -25.0/9216.0;
-  restriction[0](11,14) = -25.0/6144.0;
-  restriction[0](11,15) = 65.0/9216.0;
-  restriction[0](11,16) = 25.0/3456.0;
-  restriction[0](11,17) = -25.0/384.0;
-  restriction[0](11,18) = 65.0/384.0;
-  restriction[0](11,19) = -65.0/3456.0;
-  restriction[0](11,20) = 25.0/2304.0;
-  restriction[0](11,21) = -25.0/256.0;
-  restriction[0](11,22) = -65.0/2304.0;
-  restriction[0](11,23) = 25.0/2304.0;
-  restriction[0](11,24) = 25.0/1536.0;
-  restriction[0](12,0) = -6875.0/10616832.0;
-  restriction[0](12,1) = 1375.0/10616832.0;
-  restriction[0](12,2) = 1375.0/10616832.0;
-  restriction[0](12,3) = -6875.0/10616832.0;
-  restriction[0](12,4) = 4225.0/1327104.0;
-  restriction[0](12,5) = -2375.0/884736.0;
-  restriction[0](12,6) = -7625.0/1327104.0;
-  restriction[0](12,7) = -275.0/1327104.0;
-  restriction[0](12,8) = -275.0/884736.0;
-  restriction[0](12,9) = 715.0/1327104.0;
-  restriction[0](12,10) = 4225.0/1327104.0;
-  restriction[0](12,11) = -2375.0/884736.0;
-  restriction[0](12,12) = -7625.0/1327104.0;
-  restriction[0](12,13) = 1375.0/1327104.0;
-  restriction[0](12,14) = 1375.0/884736.0;
-  restriction[0](12,15) = -3575.0/1327104.0;
-  restriction[0](12,16) = -845.0/165888.0;
-  restriction[0](12,17) = 1525.0/165888.0;
-  restriction[0](12,18) = -3965.0/165888.0;
-  restriction[0](12,19) = 2197.0/165888.0;
-  restriction[0](12,20) = 475.0/110592.0;
-  restriction[0](12,21) = 1525.0/110592.0;
-  restriction[0](12,22) = -1235.0/110592.0;
-  restriction[0](12,23) = -845.0/110592.0;
-  restriction[0](12,24) = 475.0/73728.0;
-  restriction[0](13,0) = -525635.0/10616832.0;
-  restriction[0](13,1) = -12575.0/10616832.0;
-  restriction[0](13,2) = 5875.0/10616832.0;
-  restriction[0](13,3) = 245575.0/10616832.0;
-  restriction[0](13,4) = -88025.0/1327104.0;
-  restriction[0](13,5) = 62875.0/884736.0;
-  restriction[0](13,6) = -12575.0/1327104.0;
-  restriction[0](13,7) = 6925.0/1327104.0;
-  restriction[0](13,8) = 8005.0/884736.0;
-  restriction[0](13,9) = 6475.0/1327104.0;
-  restriction[0](13,10) = 41125.0/1327104.0;
-  restriction[0](13,11) = -29375.0/884736.0;
-  restriction[0](13,12) = 5875.0/1327104.0;
-  restriction[0](13,13) = 289465.0/1327104.0;
-  restriction[0](13,14) = 334609.0/884736.0;
-  restriction[0](13,15) = 270655.0/1327104.0;
-  restriction[0](13,16) = 48475.0/165888.0;
-  restriction[0](13,17) = 6925.0/165888.0;
-  restriction[0](13,18) = 6475.0/165888.0;
-  restriction[0](13,19) = 45325.0/165888.0;
-  restriction[0](13,20) = -34625.0/110592.0;
-  restriction[0](13,21) = 8005.0/110592.0;
-  restriction[0](13,22) = -32375.0/110592.0;
-  restriction[0](13,23) = 56035.0/110592.0;
-  restriction[0](13,24) = -40025.0/73728.0;
-  restriction[0](14,0) = 1045.0/73728.0;
-  restriction[0](14,1) = 25.0/73728.0;
-  restriction[0](14,2) = 545.0/221184.0;
-  restriction[0](14,3) = 22781.0/221184.0;
-  restriction[0](14,4) = 175.0/9216.0;
-  restriction[0](14,5) = -125.0/6144.0;
-  restriction[0](14,6) = 25.0/9216.0;
-  restriction[0](14,7) = -25.0/27648.0;
-  restriction[0](14,8) = -25.0/18432.0;
-  restriction[0](14,9) = 25.0/3072.0;
-  restriction[0](14,10) = 3815.0/27648.0;
-  restriction[0](14,11) = -2725.0/18432.0;
-  restriction[0](14,12) = 545.0/27648.0;
-  restriction[0](14,13) = -1045.0/27648.0;
-  restriction[0](14,14) = -1045.0/18432.0;
-  restriction[0](14,15) = 1045.0/3072.0;
-  restriction[0](14,16) = -175.0/3456.0;
-  restriction[0](14,17) = -25.0/3456.0;
-  restriction[0](14,18) = 25.0/384.0;
-  restriction[0](14,19) = 175.0/384.0;
-  restriction[0](14,20) = 125.0/2304.0;
-  restriction[0](14,21) = -25.0/2304.0;
-  restriction[0](14,22) = -125.0/256.0;
-  restriction[0](14,23) = -175.0/2304.0;
-  restriction[0](14,24) = 125.0/1536.0;
-  restriction[0](15,0) = -57475.0/10616832.0;
-  restriction[0](15,1) = -1375.0/10616832.0;
-  restriction[0](15,2) = 275.0/10616832.0;
-  restriction[0](15,3) = 11495.0/10616832.0;
-  restriction[0](15,4) = -9625.0/1327104.0;
-  restriction[0](15,5) = 6875.0/884736.0;
-  restriction[0](15,6) = -1375.0/1327104.0;
-  restriction[0](15,7) = 845.0/1327104.0;
-  restriction[0](15,8) = -475.0/884736.0;
-  restriction[0](15,9) = -1525.0/1327104.0;
-  restriction[0](15,10) = 1925.0/1327104.0;
-  restriction[0](15,11) = -1375.0/884736.0;
-  restriction[0](15,12) = 275.0/1327104.0;
-  restriction[0](15,13) = 35321.0/1327104.0;
-  restriction[0](15,14) = -19855.0/884736.0;
-  restriction[0](15,15) = -63745.0/1327104.0;
-  restriction[0](15,16) = 5915.0/165888.0;
-  restriction[0](15,17) = 845.0/165888.0;
-  restriction[0](15,18) = -1525.0/165888.0;
-  restriction[0](15,19) = -10675.0/165888.0;
-  restriction[0](15,20) = -4225.0/110592.0;
-  restriction[0](15,21) = -475.0/110592.0;
-  restriction[0](15,22) = 7625.0/110592.0;
-  restriction[0](15,23) = -3325.0/110592.0;
-  restriction[0](15,24) = 2375.0/73728.0;
-  restriction[0](16,0) = 6325225.0/1358954496.0;
-  restriction[0](16,1) = -2955125.0/1358954496.0;
-  restriction[0](16,2) = 1380625.0/1358954496.0;
-  restriction[0](16,3) = -2955125.0/1358954496.0;
-  restriction[0](16,4) = -3483275.0/169869312.0;
-  restriction[0](16,5) = -4026515.0/113246208.0;
-  restriction[0](16,6) = -3256925.0/169869312.0;
-  restriction[0](16,7) = 1627375.0/169869312.0;
-  restriction[0](16,8) = 1881175.0/113246208.0;
-  restriction[0](16,9) = 1521625.0/169869312.0;
-  restriction[0](16,10) = 1627375.0/169869312.0;
-  restriction[0](16,11) = 1881175.0/113246208.0;
-  restriction[0](16,12) = 1521625.0/169869312.0;
-  restriction[0](16,13) = -3483275.0/169869312.0;
-  restriction[0](16,14) = -4026515.0/113246208.0;
-  restriction[0](16,15) = -3256925.0/169869312.0;
-  restriction[0](16,16) = 1918225.0/21233664.0;
-  restriction[0](16,17) = 1793575.0/21233664.0;
-  restriction[0](16,18) = 1677025.0/21233664.0;
-  restriction[0](16,19) = 1793575.0/21233664.0;
-  restriction[0](16,20) = 2217385.0/14155776.0;
-  restriction[0](16,21) = 2073295.0/14155776.0;
-  restriction[0](16,22) = 2073295.0/14155776.0;
-  restriction[0](16,23) = 2217385.0/14155776.0;
-  restriction[0](16,24) = 2563201.0/9437184.0;
-  restriction[0](17,0) = 691625.0/1358954496.0;
-  restriction[0](17,1) = -138325.0/1358954496.0;
-  restriction[0](17,2) = 64625.0/1358954496.0;
-  restriction[0](17,3) = -323125.0/1358954496.0;
-  restriction[0](17,4) = -425035.0/169869312.0;
-  restriction[0](17,5) = 238925.0/113246208.0;
-  restriction[0](17,6) = 767075.0/169869312.0;
-  restriction[0](17,7) = 76175.0/169869312.0;
-  restriction[0](17,8) = 88055.0/113246208.0;
-  restriction[0](17,9) = 71225.0/169869312.0;
-  restriction[0](17,10) = 198575.0/169869312.0;
-  restriction[0](17,11) = -111625.0/113246208.0;
-  restriction[0](17,12) = -358375.0/169869312.0;
-  restriction[0](17,13) = -380875.0/169869312.0;
-  restriction[0](17,14) = -440275.0/113246208.0;
-  restriction[0](17,15) = -356125.0/169869312.0;
-  restriction[0](17,16) = 234065.0/21233664.0;
-  restriction[0](17,17) = -422425.0/21233664.0;
-  restriction[0](17,18) = -394975.0/21233664.0;
-  restriction[0](17,19) = 218855.0/21233664.0;
-  restriction[0](17,20) = -131575.0/14155776.0;
-  restriction[0](17,21) = -488305.0/14155776.0;
-  restriction[0](17,22) = -123025.0/14155776.0;
-  restriction[0](17,23) = 270569.0/14155776.0;
-  restriction[0](17,24) = -152095.0/9437184.0;
-  restriction[0](18,0) = 75625.0/1358954496.0;
-  restriction[0](18,1) = -15125.0/1358954496.0;
-  restriction[0](18,2) = 3025.0/1358954496.0;
-  restriction[0](18,3) = -15125.0/1358954496.0;
-  restriction[0](18,4) = -46475.0/169869312.0;
-  restriction[0](18,5) = 26125.0/113246208.0;
-  restriction[0](18,6) = 83875.0/169869312.0;
-  restriction[0](18,7) = 9295.0/169869312.0;
-  restriction[0](18,8) = -5225.0/113246208.0;
-  restriction[0](18,9) = -16775.0/169869312.0;
-  restriction[0](18,10) = 9295.0/169869312.0;
-  restriction[0](18,11) = -5225.0/113246208.0;
-  restriction[0](18,12) = -16775.0/169869312.0;
-  restriction[0](18,13) = -46475.0/169869312.0;
-  restriction[0](18,14) = 26125.0/113246208.0;
-  restriction[0](18,15) = 83875.0/169869312.0;
-  restriction[0](18,16) = 28561.0/21233664.0;
-  restriction[0](18,17) = -51545.0/21233664.0;
-  restriction[0](18,18) = 93025.0/21233664.0;
-  restriction[0](18,19) = -51545.0/21233664.0;
-  restriction[0](18,20) = -16055.0/14155776.0;
-  restriction[0](18,21) = 28975.0/14155776.0;
-  restriction[0](18,22) = 28975.0/14155776.0;
-  restriction[0](18,23) = -16055.0/14155776.0;
-  restriction[0](18,24) = 9025.0/9437184.0;
-  restriction[0](19,0) = 691625.0/1358954496.0;
-  restriction[0](19,1) = -323125.0/1358954496.0;
-  restriction[0](19,2) = 64625.0/1358954496.0;
-  restriction[0](19,3) = -138325.0/1358954496.0;
-  restriction[0](19,4) = -380875.0/169869312.0;
-  restriction[0](19,5) = -440275.0/113246208.0;
-  restriction[0](19,6) = -356125.0/169869312.0;
-  restriction[0](19,7) = 198575.0/169869312.0;
-  restriction[0](19,8) = -111625.0/113246208.0;
-  restriction[0](19,9) = -358375.0/169869312.0;
-  restriction[0](19,10) = 76175.0/169869312.0;
-  restriction[0](19,11) = 88055.0/113246208.0;
-  restriction[0](19,12) = 71225.0/169869312.0;
-  restriction[0](19,13) = -425035.0/169869312.0;
-  restriction[0](19,14) = 238925.0/113246208.0;
-  restriction[0](19,15) = 767075.0/169869312.0;
-  restriction[0](19,16) = 234065.0/21233664.0;
-  restriction[0](19,17) = 218855.0/21233664.0;
-  restriction[0](19,18) = -394975.0/21233664.0;
-  restriction[0](19,19) = -422425.0/21233664.0;
-  restriction[0](19,20) = 270569.0/14155776.0;
-  restriction[0](19,21) = -123025.0/14155776.0;
-  restriction[0](19,22) = -488305.0/14155776.0;
-  restriction[0](19,23) = -131575.0/14155776.0;
-  restriction[0](19,24) = -152095.0/9437184.0;
-  restriction[0](20,0) = -12575.0/9437184.0;
-  restriction[0](20,1) = -274135.0/28311552.0;
-  restriction[0](20,2) = 128075.0/28311552.0;
-  restriction[0](20,3) = 5875.0/9437184.0;
-  restriction[0](20,4) = 12575.0/3538944.0;
-  restriction[0](20,5) = 12575.0/2359296.0;
-  restriction[0](20,6) = -12575.0/393216.0;
-  restriction[0](20,7) = 150965.0/3538944.0;
-  restriction[0](20,8) = 174509.0/2359296.0;
-  restriction[0](20,9) = 141155.0/3538944.0;
-  restriction[0](20,10) = -5875.0/3538944.0;
-  restriction[0](20,11) = -5875.0/2359296.0;
-  restriction[0](20,12) = 5875.0/393216.0;
-  restriction[0](20,13) = 6925.0/1179648.0;
-  restriction[0](20,14) = 8005.0/786432.0;
-  restriction[0](20,15) = 6475.0/1179648.0;
-  restriction[0](20,16) = -6925.0/442368.0;
-  restriction[0](20,17) = 6925.0/49152.0;
-  restriction[0](20,18) = 6475.0/49152.0;
-  restriction[0](20,19) = -6475.0/442368.0;
-  restriction[0](20,20) = -6925.0/294912.0;
-  restriction[0](20,21) = 8005.0/32768.0;
-  restriction[0](20,22) = -6475.0/294912.0;
-  restriction[0](20,23) = -8005.0/294912.0;
-  restriction[0](20,24) = -8005.0/196608.0;
-  restriction[0](21,0) = -1375.0/9437184.0;
-  restriction[0](21,1) = 275.0/9437184.0;
-  restriction[0](21,2) = 5995.0/28311552.0;
-  restriction[0](21,3) = -29975.0/28311552.0;
-  restriction[0](21,4) = 845.0/1179648.0;
-  restriction[0](21,5) = -475.0/786432.0;
-  restriction[0](21,6) = -1525.0/1179648.0;
-  restriction[0](21,7) = -275.0/3538944.0;
-  restriction[0](21,8) = -275.0/2359296.0;
-  restriction[0](21,9) = 275.0/393216.0;
-  restriction[0](21,10) = 18421.0/3538944.0;
-  restriction[0](21,11) = -10355.0/2359296.0;
-  restriction[0](21,12) = -33245.0/3538944.0;
-  restriction[0](21,13) = 1375.0/3538944.0;
-  restriction[0](21,14) = 1375.0/2359296.0;
-  restriction[0](21,15) = -1375.0/393216.0;
-  restriction[0](21,16) = -845.0/442368.0;
-  restriction[0](21,17) = 1525.0/442368.0;
-  restriction[0](21,18) = -1525.0/49152.0;
-  restriction[0](21,19) = 845.0/49152.0;
-  restriction[0](21,20) = 475.0/294912.0;
-  restriction[0](21,21) = 1525.0/294912.0;
-  restriction[0](21,22) = -475.0/32768.0;
-  restriction[0](21,23) = -845.0/294912.0;
-  restriction[0](21,24) = 475.0/196608.0;
-  restriction[0](22,0) = -1375.0/9437184.0;
-  restriction[0](22,1) = -29975.0/28311552.0;
-  restriction[0](22,2) = 5995.0/28311552.0;
-  restriction[0](22,3) = 275.0/9437184.0;
-  restriction[0](22,4) = 1375.0/3538944.0;
-  restriction[0](22,5) = 1375.0/2359296.0;
-  restriction[0](22,6) = -1375.0/393216.0;
-  restriction[0](22,7) = 18421.0/3538944.0;
-  restriction[0](22,8) = -10355.0/2359296.0;
-  restriction[0](22,9) = -33245.0/3538944.0;
-  restriction[0](22,10) = -275.0/3538944.0;
-  restriction[0](22,11) = -275.0/2359296.0;
-  restriction[0](22,12) = 275.0/393216.0;
-  restriction[0](22,13) = 845.0/1179648.0;
-  restriction[0](22,14) = -475.0/786432.0;
-  restriction[0](22,15) = -1525.0/1179648.0;
-  restriction[0](22,16) = -845.0/442368.0;
-  restriction[0](22,17) = 845.0/49152.0;
-  restriction[0](22,18) = -1525.0/49152.0;
-  restriction[0](22,19) = 1525.0/442368.0;
-  restriction[0](22,20) = -845.0/294912.0;
-  restriction[0](22,21) = -475.0/32768.0;
-  restriction[0](22,22) = 1525.0/294912.0;
-  restriction[0](22,23) = 475.0/294912.0;
-  restriction[0](22,24) = 475.0/196608.0;
-  restriction[0](23,0) = -12575.0/9437184.0;
-  restriction[0](23,1) = 5875.0/9437184.0;
-  restriction[0](23,2) = 128075.0/28311552.0;
-  restriction[0](23,3) = -274135.0/28311552.0;
-  restriction[0](23,4) = 6925.0/1179648.0;
-  restriction[0](23,5) = 8005.0/786432.0;
-  restriction[0](23,6) = 6475.0/1179648.0;
-  restriction[0](23,7) = -5875.0/3538944.0;
-  restriction[0](23,8) = -5875.0/2359296.0;
-  restriction[0](23,9) = 5875.0/393216.0;
-  restriction[0](23,10) = 150965.0/3538944.0;
-  restriction[0](23,11) = 174509.0/2359296.0;
-  restriction[0](23,12) = 141155.0/3538944.0;
-  restriction[0](23,13) = 12575.0/3538944.0;
-  restriction[0](23,14) = 12575.0/2359296.0;
-  restriction[0](23,15) = -12575.0/393216.0;
-  restriction[0](23,16) = -6925.0/442368.0;
-  restriction[0](23,17) = -6475.0/442368.0;
-  restriction[0](23,18) = 6475.0/49152.0;
-  restriction[0](23,19) = 6925.0/49152.0;
-  restriction[0](23,20) = -8005.0/294912.0;
-  restriction[0](23,21) = -6475.0/294912.0;
-  restriction[0](23,22) = 8005.0/32768.0;
-  restriction[0](23,23) = -6925.0/294912.0;
-  restriction[0](23,24) = -8005.0/196608.0;
-  restriction[0](24,0) = 25.0/65536.0;
-  restriction[0](24,1) = 545.0/196608.0;
-  restriction[0](24,2) = 11881.0/589824.0;
-  restriction[0](24,3) = 545.0/196608.0;
-  restriction[0](24,4) = -25.0/24576.0;
-  restriction[0](24,5) = -25.0/16384.0;
-  restriction[0](24,6) = 75.0/8192.0;
-  restriction[0](24,7) = -545.0/73728.0;
-  restriction[0](24,8) = -545.0/49152.0;
-  restriction[0](24,9) = 545.0/8192.0;
-  restriction[0](24,10) = -545.0/73728.0;
-  restriction[0](24,11) = -545.0/49152.0;
-  restriction[0](24,12) = 545.0/8192.0;
-  restriction[0](24,13) = -25.0/24576.0;
-  restriction[0](24,14) = -25.0/16384.0;
-  restriction[0](24,15) = 75.0/8192.0;
-  restriction[0](24,16) = 25.0/9216.0;
-  restriction[0](24,17) = -25.0/1024.0;
-  restriction[0](24,18) = 225.0/1024.0;
-  restriction[0](24,19) = -25.0/1024.0;
-  restriction[0](24,20) = 25.0/6144.0;
-  restriction[0](24,21) = -75.0/2048.0;
-  restriction[0](24,22) = -75.0/2048.0;
-  restriction[0](24,23) = 25.0/6144.0;
-  restriction[0](24,24) = 25.0/4096.0;
-  restriction[1](0,0) = 5225.0/82944.0;
-  restriction[1](0,1) = 5225.0/82944.0;
-  restriction[1](0,2) = 125.0/82944.0;
-  restriction[1](0,3) = 125.0/82944.0;
-  restriction[1](0,4) = 2717.0/10368.0;
-  restriction[1](0,5) = -1045.0/6912.0;
-  restriction[1](0,6) = -1045.0/10368.0;
-  restriction[1](0,7) = 875.0/10368.0;
-  restriction[1](0,8) = -625.0/6912.0;
-  restriction[1](0,9) = 125.0/10368.0;
-  restriction[1](0,10) = 65.0/10368.0;
-  restriction[1](0,11) = -25.0/6912.0;
-  restriction[1](0,12) = -25.0/10368.0;
-  restriction[1](0,13) = 875.0/10368.0;
-  restriction[1](0,14) = -625.0/6912.0;
-  restriction[1](0,15) = 125.0/10368.0;
-  restriction[1](0,16) = 455.0/1296.0;
-  restriction[1](0,17) = -175.0/1296.0;
-  restriction[1](0,18) = -25.0/1296.0;
-  restriction[1](0,19) = 65.0/1296.0;
-  restriction[1](0,20) = -175.0/864.0;
-  restriction[1](0,21) = 125.0/864.0;
-  restriction[1](0,22) = -25.0/864.0;
-  restriction[1](0,23) = -325.0/864.0;
-  restriction[1](0,24) = 125.0/576.0;
-  restriction[1](1,0) = 1045.0/82944.0;
-  restriction[1](1,1) = 43681.0/82944.0;
-  restriction[1](1,2) = 1045.0/82944.0;
-  restriction[1](1,3) = 25.0/82944.0;
-  restriction[1](1,4) = 1045.0/10368.0;
-  restriction[1](1,5) = -5225.0/6912.0;
-  restriction[1](1,6) = 7315.0/10368.0;
-  restriction[1](1,7) = 7315.0/10368.0;
-  restriction[1](1,8) = -5225.0/6912.0;
-  restriction[1](1,9) = 1045.0/10368.0;
-  restriction[1](1,10) = 25.0/10368.0;
-  restriction[1](1,11) = -125.0/6912.0;
-  restriction[1](1,12) = 175.0/10368.0;
-  restriction[1](1,13) = 175.0/10368.0;
-  restriction[1](1,14) = -125.0/6912.0;
-  restriction[1](1,15) = 25.0/10368.0;
-  restriction[1](1,16) = 175.0/1296.0;
-  restriction[1](1,17) = 1225.0/1296.0;
-  restriction[1](1,18) = 175.0/1296.0;
-  restriction[1](1,19) = 25.0/1296.0;
-  restriction[1](1,20) = -875.0/864.0;
-  restriction[1](1,21) = -875.0/864.0;
-  restriction[1](1,22) = -125.0/864.0;
-  restriction[1](1,23) = -125.0/864.0;
-  restriction[1](1,24) = 625.0/576.0;
-  restriction[1](2,0) = 125.0/82944.0;
-  restriction[1](2,1) = 5225.0/82944.0;
-  restriction[1](2,2) = 5225.0/82944.0;
-  restriction[1](2,3) = 125.0/82944.0;
-  restriction[1](2,4) = 125.0/10368.0;
-  restriction[1](2,5) = -625.0/6912.0;
-  restriction[1](2,6) = 875.0/10368.0;
-  restriction[1](2,7) = -1045.0/10368.0;
-  restriction[1](2,8) = -1045.0/6912.0;
-  restriction[1](2,9) = 2717.0/10368.0;
-  restriction[1](2,10) = 125.0/10368.0;
-  restriction[1](2,11) = -625.0/6912.0;
-  restriction[1](2,12) = 875.0/10368.0;
-  restriction[1](2,13) = -25.0/10368.0;
-  restriction[1](2,14) = -25.0/6912.0;
-  restriction[1](2,15) = 65.0/10368.0;
-  restriction[1](2,16) = -25.0/1296.0;
-  restriction[1](2,17) = -175.0/1296.0;
-  restriction[1](2,18) = 455.0/1296.0;
-  restriction[1](2,19) = 65.0/1296.0;
-  restriction[1](2,20) = 125.0/864.0;
-  restriction[1](2,21) = -175.0/864.0;
-  restriction[1](2,22) = -325.0/864.0;
-  restriction[1](2,23) = -25.0/864.0;
-  restriction[1](2,24) = 125.0/576.0;
-  restriction[1](3,0) = 625.0/82944.0;
-  restriction[1](3,1) = 625.0/82944.0;
-  restriction[1](3,2) = 625.0/82944.0;
-  restriction[1](3,3) = 625.0/82944.0;
-  restriction[1](3,4) = 325.0/10368.0;
-  restriction[1](3,5) = -125.0/6912.0;
-  restriction[1](3,6) = -125.0/10368.0;
-  restriction[1](3,7) = -125.0/10368.0;
-  restriction[1](3,8) = -125.0/6912.0;
-  restriction[1](3,9) = 325.0/10368.0;
-  restriction[1](3,10) = 325.0/10368.0;
-  restriction[1](3,11) = -125.0/6912.0;
-  restriction[1](3,12) = -125.0/10368.0;
-  restriction[1](3,13) = -125.0/10368.0;
-  restriction[1](3,14) = -125.0/6912.0;
-  restriction[1](3,15) = 325.0/10368.0;
-  restriction[1](3,16) = -65.0/1296.0;
-  restriction[1](3,17) = 25.0/1296.0;
-  restriction[1](3,18) = -65.0/1296.0;
-  restriction[1](3,19) = 169.0/1296.0;
-  restriction[1](3,20) = 25.0/864.0;
-  restriction[1](3,21) = 25.0/864.0;
-  restriction[1](3,22) = -65.0/864.0;
-  restriction[1](3,23) = -65.0/864.0;
-  restriction[1](3,24) = 25.0/576.0;
-  restriction[1](4,0) = 11495.0/10616832.0;
-  restriction[1](4,1) = -57475.0/10616832.0;
-  restriction[1](4,2) = -1375.0/10616832.0;
-  restriction[1](4,3) = 275.0/10616832.0;
-  restriction[1](4,4) = -63745.0/1327104.0;
-  restriction[1](4,5) = -19855.0/884736.0;
-  restriction[1](4,6) = 35321.0/1327104.0;
-  restriction[1](4,7) = -9625.0/1327104.0;
-  restriction[1](4,8) = 6875.0/884736.0;
-  restriction[1](4,9) = -1375.0/1327104.0;
-  restriction[1](4,10) = -1525.0/1327104.0;
-  restriction[1](4,11) = -475.0/884736.0;
-  restriction[1](4,12) = 845.0/1327104.0;
-  restriction[1](4,13) = 1925.0/1327104.0;
-  restriction[1](4,14) = -1375.0/884736.0;
-  restriction[1](4,15) = 275.0/1327104.0;
-  restriction[1](4,16) = -10675.0/165888.0;
-  restriction[1](4,17) = 5915.0/165888.0;
-  restriction[1](4,18) = 845.0/165888.0;
-  restriction[1](4,19) = -1525.0/165888.0;
-  restriction[1](4,20) = -3325.0/110592.0;
-  restriction[1](4,21) = -4225.0/110592.0;
-  restriction[1](4,22) = -475.0/110592.0;
-  restriction[1](4,23) = 7625.0/110592.0;
-  restriction[1](4,24) = 2375.0/73728.0;
-  restriction[1](5,0) = 22781.0/221184.0;
-  restriction[1](5,1) = 1045.0/73728.0;
-  restriction[1](5,2) = 25.0/73728.0;
-  restriction[1](5,3) = 545.0/221184.0;
-  restriction[1](5,4) = 1045.0/3072.0;
-  restriction[1](5,5) = -1045.0/18432.0;
-  restriction[1](5,6) = -1045.0/27648.0;
-  restriction[1](5,7) = 175.0/9216.0;
-  restriction[1](5,8) = -125.0/6144.0;
-  restriction[1](5,9) = 25.0/9216.0;
-  restriction[1](5,10) = 25.0/3072.0;
-  restriction[1](5,11) = -25.0/18432.0;
-  restriction[1](5,12) = -25.0/27648.0;
-  restriction[1](5,13) = 3815.0/27648.0;
-  restriction[1](5,14) = -2725.0/18432.0;
-  restriction[1](5,15) = 545.0/27648.0;
-  restriction[1](5,16) = 175.0/384.0;
-  restriction[1](5,17) = -175.0/3456.0;
-  restriction[1](5,18) = -25.0/3456.0;
-  restriction[1](5,19) = 25.0/384.0;
-  restriction[1](5,20) = -175.0/2304.0;
-  restriction[1](5,21) = 125.0/2304.0;
-  restriction[1](5,22) = -25.0/2304.0;
-  restriction[1](5,23) = -125.0/256.0;
-  restriction[1](5,24) = 125.0/1536.0;
-  restriction[1](6,0) = 245575.0/10616832.0;
-  restriction[1](6,1) = -525635.0/10616832.0;
-  restriction[1](6,2) = -12575.0/10616832.0;
-  restriction[1](6,3) = 5875.0/10616832.0;
-  restriction[1](6,4) = 270655.0/1327104.0;
-  restriction[1](6,5) = 334609.0/884736.0;
-  restriction[1](6,6) = 289465.0/1327104.0;
-  restriction[1](6,7) = -88025.0/1327104.0;
-  restriction[1](6,8) = 62875.0/884736.0;
-  restriction[1](6,9) = -12575.0/1327104.0;
-  restriction[1](6,10) = 6475.0/1327104.0;
-  restriction[1](6,11) = 8005.0/884736.0;
-  restriction[1](6,12) = 6925.0/1327104.0;
-  restriction[1](6,13) = 41125.0/1327104.0;
-  restriction[1](6,14) = -29375.0/884736.0;
-  restriction[1](6,15) = 5875.0/1327104.0;
-  restriction[1](6,16) = 45325.0/165888.0;
-  restriction[1](6,17) = 48475.0/165888.0;
-  restriction[1](6,18) = 6925.0/165888.0;
-  restriction[1](6,19) = 6475.0/165888.0;
-  restriction[1](6,20) = 56035.0/110592.0;
-  restriction[1](6,21) = -34625.0/110592.0;
-  restriction[1](6,22) = 8005.0/110592.0;
-  restriction[1](6,23) = -32375.0/110592.0;
-  restriction[1](6,24) = -40025.0/73728.0;
-  restriction[1](7,0) = -12575.0/10616832.0;
-  restriction[1](7,1) = -525635.0/10616832.0;
-  restriction[1](7,2) = 245575.0/10616832.0;
-  restriction[1](7,3) = 5875.0/10616832.0;
-  restriction[1](7,4) = -12575.0/1327104.0;
-  restriction[1](7,5) = 62875.0/884736.0;
-  restriction[1](7,6) = -88025.0/1327104.0;
-  restriction[1](7,7) = 289465.0/1327104.0;
-  restriction[1](7,8) = 334609.0/884736.0;
-  restriction[1](7,9) = 270655.0/1327104.0;
-  restriction[1](7,10) = 5875.0/1327104.0;
-  restriction[1](7,11) = -29375.0/884736.0;
-  restriction[1](7,12) = 41125.0/1327104.0;
-  restriction[1](7,13) = 6925.0/1327104.0;
-  restriction[1](7,14) = 8005.0/884736.0;
-  restriction[1](7,15) = 6475.0/1327104.0;
-  restriction[1](7,16) = 6925.0/165888.0;
-  restriction[1](7,17) = 48475.0/165888.0;
-  restriction[1](7,18) = 45325.0/165888.0;
-  restriction[1](7,19) = 6475.0/165888.0;
-  restriction[1](7,20) = -34625.0/110592.0;
-  restriction[1](7,21) = 56035.0/110592.0;
-  restriction[1](7,22) = -32375.0/110592.0;
-  restriction[1](7,23) = 8005.0/110592.0;
-  restriction[1](7,24) = -40025.0/73728.0;
-  restriction[1](8,0) = 25.0/73728.0;
-  restriction[1](8,1) = 1045.0/73728.0;
-  restriction[1](8,2) = 22781.0/221184.0;
-  restriction[1](8,3) = 545.0/221184.0;
-  restriction[1](8,4) = 25.0/9216.0;
-  restriction[1](8,5) = -125.0/6144.0;
-  restriction[1](8,6) = 175.0/9216.0;
-  restriction[1](8,7) = -1045.0/27648.0;
-  restriction[1](8,8) = -1045.0/18432.0;
-  restriction[1](8,9) = 1045.0/3072.0;
-  restriction[1](8,10) = 545.0/27648.0;
-  restriction[1](8,11) = -2725.0/18432.0;
-  restriction[1](8,12) = 3815.0/27648.0;
-  restriction[1](8,13) = -25.0/27648.0;
-  restriction[1](8,14) = -25.0/18432.0;
-  restriction[1](8,15) = 25.0/3072.0;
-  restriction[1](8,16) = -25.0/3456.0;
-  restriction[1](8,17) = -175.0/3456.0;
-  restriction[1](8,18) = 175.0/384.0;
-  restriction[1](8,19) = 25.0/384.0;
-  restriction[1](8,20) = 125.0/2304.0;
-  restriction[1](8,21) = -175.0/2304.0;
-  restriction[1](8,22) = -125.0/256.0;
-  restriction[1](8,23) = -25.0/2304.0;
-  restriction[1](8,24) = 125.0/1536.0;
-  restriction[1](9,0) = -1375.0/10616832.0;
-  restriction[1](9,1) = -57475.0/10616832.0;
-  restriction[1](9,2) = 11495.0/10616832.0;
-  restriction[1](9,3) = 275.0/10616832.0;
-  restriction[1](9,4) = -1375.0/1327104.0;
-  restriction[1](9,5) = 6875.0/884736.0;
-  restriction[1](9,6) = -9625.0/1327104.0;
-  restriction[1](9,7) = 35321.0/1327104.0;
-  restriction[1](9,8) = -19855.0/884736.0;
-  restriction[1](9,9) = -63745.0/1327104.0;
-  restriction[1](9,10) = 275.0/1327104.0;
-  restriction[1](9,11) = -1375.0/884736.0;
-  restriction[1](9,12) = 1925.0/1327104.0;
-  restriction[1](9,13) = 845.0/1327104.0;
-  restriction[1](9,14) = -475.0/884736.0;
-  restriction[1](9,15) = -1525.0/1327104.0;
-  restriction[1](9,16) = 845.0/165888.0;
-  restriction[1](9,17) = 5915.0/165888.0;
-  restriction[1](9,18) = -10675.0/165888.0;
-  restriction[1](9,19) = -1525.0/165888.0;
-  restriction[1](9,20) = -4225.0/110592.0;
-  restriction[1](9,21) = -3325.0/110592.0;
-  restriction[1](9,22) = 7625.0/110592.0;
-  restriction[1](9,23) = -475.0/110592.0;
-  restriction[1](9,24) = 2375.0/73728.0;
-  restriction[1](10,0) = 1375.0/10616832.0;
-  restriction[1](10,1) = -6875.0/10616832.0;
-  restriction[1](10,2) = -6875.0/10616832.0;
-  restriction[1](10,3) = 1375.0/10616832.0;
-  restriction[1](10,4) = -7625.0/1327104.0;
-  restriction[1](10,5) = -2375.0/884736.0;
-  restriction[1](10,6) = 4225.0/1327104.0;
-  restriction[1](10,7) = 1375.0/1327104.0;
-  restriction[1](10,8) = 1375.0/884736.0;
-  restriction[1](10,9) = -3575.0/1327104.0;
-  restriction[1](10,10) = -7625.0/1327104.0;
-  restriction[1](10,11) = -2375.0/884736.0;
-  restriction[1](10,12) = 4225.0/1327104.0;
-  restriction[1](10,13) = -275.0/1327104.0;
-  restriction[1](10,14) = -275.0/884736.0;
-  restriction[1](10,15) = 715.0/1327104.0;
-  restriction[1](10,16) = 1525.0/165888.0;
-  restriction[1](10,17) = -845.0/165888.0;
-  restriction[1](10,18) = 2197.0/165888.0;
-  restriction[1](10,19) = -3965.0/165888.0;
-  restriction[1](10,20) = 475.0/110592.0;
-  restriction[1](10,21) = -845.0/110592.0;
-  restriction[1](10,22) = -1235.0/110592.0;
-  restriction[1](10,23) = 1525.0/110592.0;
-  restriction[1](10,24) = 475.0/73728.0;
-  restriction[1](11,0) = 2725.0/221184.0;
-  restriction[1](11,1) = 125.0/73728.0;
-  restriction[1](11,2) = 125.0/73728.0;
-  restriction[1](11,3) = 2725.0/221184.0;
-  restriction[1](11,4) = 125.0/3072.0;
-  restriction[1](11,5) = -125.0/18432.0;
-  restriction[1](11,6) = -125.0/27648.0;
-  restriction[1](11,7) = -25.0/9216.0;
-  restriction[1](11,8) = -25.0/6144.0;
-  restriction[1](11,9) = 65.0/9216.0;
-  restriction[1](11,10) = 125.0/3072.0;
-  restriction[1](11,11) = -125.0/18432.0;
-  restriction[1](11,12) = -125.0/27648.0;
-  restriction[1](11,13) = -545.0/27648.0;
-  restriction[1](11,14) = -545.0/18432.0;
-  restriction[1](11,15) = 1417.0/27648.0;
-  restriction[1](11,16) = -25.0/384.0;
-  restriction[1](11,17) = 25.0/3456.0;
-  restriction[1](11,18) = -65.0/3456.0;
-  restriction[1](11,19) = 65.0/384.0;
-  restriction[1](11,20) = 25.0/2304.0;
-  restriction[1](11,21) = 25.0/2304.0;
-  restriction[1](11,22) = -65.0/2304.0;
-  restriction[1](11,23) = -25.0/256.0;
-  restriction[1](11,24) = 25.0/1536.0;
-  restriction[1](12,0) = 29375.0/10616832.0;
-  restriction[1](12,1) = -62875.0/10616832.0;
-  restriction[1](12,2) = -62875.0/10616832.0;
-  restriction[1](12,3) = 29375.0/10616832.0;
-  restriction[1](12,4) = 32375.0/1327104.0;
-  restriction[1](12,5) = 40025.0/884736.0;
-  restriction[1](12,6) = 34625.0/1327104.0;
-  restriction[1](12,7) = 12575.0/1327104.0;
-  restriction[1](12,8) = 12575.0/884736.0;
-  restriction[1](12,9) = -32695.0/1327104.0;
-  restriction[1](12,10) = 32375.0/1327104.0;
-  restriction[1](12,11) = 40025.0/884736.0;
-  restriction[1](12,12) = 34625.0/1327104.0;
-  restriction[1](12,13) = -5875.0/1327104.0;
-  restriction[1](12,14) = -5875.0/884736.0;
-  restriction[1](12,15) = 15275.0/1327104.0;
-  restriction[1](12,16) = -6475.0/165888.0;
-  restriction[1](12,17) = -6925.0/165888.0;
-  restriction[1](12,18) = 18005.0/165888.0;
-  restriction[1](12,19) = 16835.0/165888.0;
-  restriction[1](12,20) = -8005.0/110592.0;
-  restriction[1](12,21) = -6925.0/110592.0;
-  restriction[1](12,22) = 20813.0/110592.0;
-  restriction[1](12,23) = -6475.0/110592.0;
-  restriction[1](12,24) = -8005.0/73728.0;
-  restriction[1](13,0) = -62875.0/10616832.0;
-  restriction[1](13,1) = -62875.0/10616832.0;
-  restriction[1](13,2) = 29375.0/10616832.0;
-  restriction[1](13,3) = 29375.0/10616832.0;
-  restriction[1](13,4) = -32695.0/1327104.0;
-  restriction[1](13,5) = 12575.0/884736.0;
-  restriction[1](13,6) = 12575.0/1327104.0;
-  restriction[1](13,7) = 34625.0/1327104.0;
-  restriction[1](13,8) = 40025.0/884736.0;
-  restriction[1](13,9) = 32375.0/1327104.0;
-  restriction[1](13,10) = 15275.0/1327104.0;
-  restriction[1](13,11) = -5875.0/884736.0;
-  restriction[1](13,12) = -5875.0/1327104.0;
-  restriction[1](13,13) = 34625.0/1327104.0;
-  restriction[1](13,14) = 40025.0/884736.0;
-  restriction[1](13,15) = 32375.0/1327104.0;
-  restriction[1](13,16) = 18005.0/165888.0;
-  restriction[1](13,17) = -6925.0/165888.0;
-  restriction[1](13,18) = -6475.0/165888.0;
-  restriction[1](13,19) = 16835.0/165888.0;
-  restriction[1](13,20) = -6925.0/110592.0;
-  restriction[1](13,21) = -8005.0/110592.0;
-  restriction[1](13,22) = -6475.0/110592.0;
-  restriction[1](13,23) = 20813.0/110592.0;
-  restriction[1](13,24) = -8005.0/73728.0;
-  restriction[1](14,0) = 125.0/73728.0;
-  restriction[1](14,1) = 125.0/73728.0;
-  restriction[1](14,2) = 2725.0/221184.0;
-  restriction[1](14,3) = 2725.0/221184.0;
-  restriction[1](14,4) = 65.0/9216.0;
-  restriction[1](14,5) = -25.0/6144.0;
-  restriction[1](14,6) = -25.0/9216.0;
-  restriction[1](14,7) = -125.0/27648.0;
-  restriction[1](14,8) = -125.0/18432.0;
-  restriction[1](14,9) = 125.0/3072.0;
-  restriction[1](14,10) = 1417.0/27648.0;
-  restriction[1](14,11) = -545.0/18432.0;
-  restriction[1](14,12) = -545.0/27648.0;
-  restriction[1](14,13) = -125.0/27648.0;
-  restriction[1](14,14) = -125.0/18432.0;
-  restriction[1](14,15) = 125.0/3072.0;
-  restriction[1](14,16) = -65.0/3456.0;
-  restriction[1](14,17) = 25.0/3456.0;
-  restriction[1](14,18) = -25.0/384.0;
-  restriction[1](14,19) = 65.0/384.0;
-  restriction[1](14,20) = 25.0/2304.0;
-  restriction[1](14,21) = 25.0/2304.0;
-  restriction[1](14,22) = -25.0/256.0;
-  restriction[1](14,23) = -65.0/2304.0;
-  restriction[1](14,24) = 25.0/1536.0;
-  restriction[1](15,0) = -6875.0/10616832.0;
-  restriction[1](15,1) = -6875.0/10616832.0;
-  restriction[1](15,2) = 1375.0/10616832.0;
-  restriction[1](15,3) = 1375.0/10616832.0;
-  restriction[1](15,4) = -3575.0/1327104.0;
-  restriction[1](15,5) = 1375.0/884736.0;
-  restriction[1](15,6) = 1375.0/1327104.0;
-  restriction[1](15,7) = 4225.0/1327104.0;
-  restriction[1](15,8) = -2375.0/884736.0;
-  restriction[1](15,9) = -7625.0/1327104.0;
-  restriction[1](15,10) = 715.0/1327104.0;
-  restriction[1](15,11) = -275.0/884736.0;
-  restriction[1](15,12) = -275.0/1327104.0;
-  restriction[1](15,13) = 4225.0/1327104.0;
-  restriction[1](15,14) = -2375.0/884736.0;
-  restriction[1](15,15) = -7625.0/1327104.0;
-  restriction[1](15,16) = 2197.0/165888.0;
-  restriction[1](15,17) = -845.0/165888.0;
-  restriction[1](15,18) = 1525.0/165888.0;
-  restriction[1](15,19) = -3965.0/165888.0;
-  restriction[1](15,20) = -845.0/110592.0;
-  restriction[1](15,21) = 475.0/110592.0;
-  restriction[1](15,22) = 1525.0/110592.0;
-  restriction[1](15,23) = -1235.0/110592.0;
-  restriction[1](15,24) = 475.0/73728.0;
-  restriction[1](16,0) = -138325.0/1358954496.0;
-  restriction[1](16,1) = 691625.0/1358954496.0;
-  restriction[1](16,2) = -323125.0/1358954496.0;
-  restriction[1](16,3) = 64625.0/1358954496.0;
-  restriction[1](16,4) = 767075.0/169869312.0;
-  restriction[1](16,5) = 238925.0/113246208.0;
-  restriction[1](16,6) = -425035.0/169869312.0;
-  restriction[1](16,7) = -380875.0/169869312.0;
-  restriction[1](16,8) = -440275.0/113246208.0;
-  restriction[1](16,9) = -356125.0/169869312.0;
-  restriction[1](16,10) = -358375.0/169869312.0;
-  restriction[1](16,11) = -111625.0/113246208.0;
-  restriction[1](16,12) = 198575.0/169869312.0;
-  restriction[1](16,13) = 76175.0/169869312.0;
-  restriction[1](16,14) = 88055.0/113246208.0;
-  restriction[1](16,15) = 71225.0/169869312.0;
-  restriction[1](16,16) = -422425.0/21233664.0;
-  restriction[1](16,17) = 234065.0/21233664.0;
-  restriction[1](16,18) = 218855.0/21233664.0;
-  restriction[1](16,19) = -394975.0/21233664.0;
-  restriction[1](16,20) = -131575.0/14155776.0;
-  restriction[1](16,21) = 270569.0/14155776.0;
-  restriction[1](16,22) = -123025.0/14155776.0;
-  restriction[1](16,23) = -488305.0/14155776.0;
-  restriction[1](16,24) = -152095.0/9437184.0;
-  restriction[1](17,0) = -2955125.0/1358954496.0;
-  restriction[1](17,1) = 6325225.0/1358954496.0;
-  restriction[1](17,2) = -2955125.0/1358954496.0;
-  restriction[1](17,3) = 1380625.0/1358954496.0;
-  restriction[1](17,4) = -3256925.0/169869312.0;
-  restriction[1](17,5) = -4026515.0/113246208.0;
-  restriction[1](17,6) = -3483275.0/169869312.0;
-  restriction[1](17,7) = -3483275.0/169869312.0;
-  restriction[1](17,8) = -4026515.0/113246208.0;
-  restriction[1](17,9) = -3256925.0/169869312.0;
-  restriction[1](17,10) = 1521625.0/169869312.0;
-  restriction[1](17,11) = 1881175.0/113246208.0;
-  restriction[1](17,12) = 1627375.0/169869312.0;
-  restriction[1](17,13) = 1627375.0/169869312.0;
-  restriction[1](17,14) = 1881175.0/113246208.0;
-  restriction[1](17,15) = 1521625.0/169869312.0;
-  restriction[1](17,16) = 1793575.0/21233664.0;
-  restriction[1](17,17) = 1918225.0/21233664.0;
-  restriction[1](17,18) = 1793575.0/21233664.0;
-  restriction[1](17,19) = 1677025.0/21233664.0;
-  restriction[1](17,20) = 2217385.0/14155776.0;
-  restriction[1](17,21) = 2217385.0/14155776.0;
-  restriction[1](17,22) = 2073295.0/14155776.0;
-  restriction[1](17,23) = 2073295.0/14155776.0;
-  restriction[1](17,24) = 2563201.0/9437184.0;
-  restriction[1](18,0) = -323125.0/1358954496.0;
-  restriction[1](18,1) = 691625.0/1358954496.0;
-  restriction[1](18,2) = -138325.0/1358954496.0;
-  restriction[1](18,3) = 64625.0/1358954496.0;
-  restriction[1](18,4) = -356125.0/169869312.0;
-  restriction[1](18,5) = -440275.0/113246208.0;
-  restriction[1](18,6) = -380875.0/169869312.0;
-  restriction[1](18,7) = -425035.0/169869312.0;
-  restriction[1](18,8) = 238925.0/113246208.0;
-  restriction[1](18,9) = 767075.0/169869312.0;
-  restriction[1](18,10) = 71225.0/169869312.0;
-  restriction[1](18,11) = 88055.0/113246208.0;
-  restriction[1](18,12) = 76175.0/169869312.0;
-  restriction[1](18,13) = 198575.0/169869312.0;
-  restriction[1](18,14) = -111625.0/113246208.0;
-  restriction[1](18,15) = -358375.0/169869312.0;
-  restriction[1](18,16) = 218855.0/21233664.0;
-  restriction[1](18,17) = 234065.0/21233664.0;
-  restriction[1](18,18) = -422425.0/21233664.0;
-  restriction[1](18,19) = -394975.0/21233664.0;
-  restriction[1](18,20) = 270569.0/14155776.0;
-  restriction[1](18,21) = -131575.0/14155776.0;
-  restriction[1](18,22) = -488305.0/14155776.0;
-  restriction[1](18,23) = -123025.0/14155776.0;
-  restriction[1](18,24) = -152095.0/9437184.0;
-  restriction[1](19,0) = -15125.0/1358954496.0;
-  restriction[1](19,1) = 75625.0/1358954496.0;
-  restriction[1](19,2) = -15125.0/1358954496.0;
-  restriction[1](19,3) = 3025.0/1358954496.0;
-  restriction[1](19,4) = 83875.0/169869312.0;
-  restriction[1](19,5) = 26125.0/113246208.0;
-  restriction[1](19,6) = -46475.0/169869312.0;
-  restriction[1](19,7) = -46475.0/169869312.0;
-  restriction[1](19,8) = 26125.0/113246208.0;
-  restriction[1](19,9) = 83875.0/169869312.0;
-  restriction[1](19,10) = -16775.0/169869312.0;
-  restriction[1](19,11) = -5225.0/113246208.0;
-  restriction[1](19,12) = 9295.0/169869312.0;
-  restriction[1](19,13) = 9295.0/169869312.0;
-  restriction[1](19,14) = -5225.0/113246208.0;
-  restriction[1](19,15) = -16775.0/169869312.0;
-  restriction[1](19,16) = -51545.0/21233664.0;
-  restriction[1](19,17) = 28561.0/21233664.0;
-  restriction[1](19,18) = -51545.0/21233664.0;
-  restriction[1](19,19) = 93025.0/21233664.0;
-  restriction[1](19,20) = -16055.0/14155776.0;
-  restriction[1](19,21) = -16055.0/14155776.0;
-  restriction[1](19,22) = 28975.0/14155776.0;
-  restriction[1](19,23) = 28975.0/14155776.0;
-  restriction[1](19,24) = 9025.0/9437184.0;
-  restriction[1](20,0) = -274135.0/28311552.0;
-  restriction[1](20,1) = -12575.0/9437184.0;
-  restriction[1](20,2) = 5875.0/9437184.0;
-  restriction[1](20,3) = 128075.0/28311552.0;
-  restriction[1](20,4) = -12575.0/393216.0;
-  restriction[1](20,5) = 12575.0/2359296.0;
-  restriction[1](20,6) = 12575.0/3538944.0;
-  restriction[1](20,7) = 6925.0/1179648.0;
-  restriction[1](20,8) = 8005.0/786432.0;
-  restriction[1](20,9) = 6475.0/1179648.0;
-  restriction[1](20,10) = 5875.0/393216.0;
-  restriction[1](20,11) = -5875.0/2359296.0;
-  restriction[1](20,12) = -5875.0/3538944.0;
-  restriction[1](20,13) = 150965.0/3538944.0;
-  restriction[1](20,14) = 174509.0/2359296.0;
-  restriction[1](20,15) = 141155.0/3538944.0;
-  restriction[1](20,16) = 6925.0/49152.0;
-  restriction[1](20,17) = -6925.0/442368.0;
-  restriction[1](20,18) = -6475.0/442368.0;
-  restriction[1](20,19) = 6475.0/49152.0;
-  restriction[1](20,20) = -6925.0/294912.0;
-  restriction[1](20,21) = -8005.0/294912.0;
-  restriction[1](20,22) = -6475.0/294912.0;
-  restriction[1](20,23) = 8005.0/32768.0;
-  restriction[1](20,24) = -8005.0/196608.0;
-  restriction[1](21,0) = 5875.0/9437184.0;
-  restriction[1](21,1) = -12575.0/9437184.0;
-  restriction[1](21,2) = -274135.0/28311552.0;
-  restriction[1](21,3) = 128075.0/28311552.0;
-  restriction[1](21,4) = 6475.0/1179648.0;
-  restriction[1](21,5) = 8005.0/786432.0;
-  restriction[1](21,6) = 6925.0/1179648.0;
-  restriction[1](21,7) = 12575.0/3538944.0;
-  restriction[1](21,8) = 12575.0/2359296.0;
-  restriction[1](21,9) = -12575.0/393216.0;
-  restriction[1](21,10) = 141155.0/3538944.0;
-  restriction[1](21,11) = 174509.0/2359296.0;
-  restriction[1](21,12) = 150965.0/3538944.0;
-  restriction[1](21,13) = -5875.0/3538944.0;
-  restriction[1](21,14) = -5875.0/2359296.0;
-  restriction[1](21,15) = 5875.0/393216.0;
-  restriction[1](21,16) = -6475.0/442368.0;
-  restriction[1](21,17) = -6925.0/442368.0;
-  restriction[1](21,18) = 6925.0/49152.0;
-  restriction[1](21,19) = 6475.0/49152.0;
-  restriction[1](21,20) = -8005.0/294912.0;
-  restriction[1](21,21) = -6925.0/294912.0;
-  restriction[1](21,22) = 8005.0/32768.0;
-  restriction[1](21,23) = -6475.0/294912.0;
-  restriction[1](21,24) = -8005.0/196608.0;
-  restriction[1](22,0) = -29975.0/28311552.0;
-  restriction[1](22,1) = -1375.0/9437184.0;
-  restriction[1](22,2) = 275.0/9437184.0;
-  restriction[1](22,3) = 5995.0/28311552.0;
-  restriction[1](22,4) = -1375.0/393216.0;
-  restriction[1](22,5) = 1375.0/2359296.0;
-  restriction[1](22,6) = 1375.0/3538944.0;
-  restriction[1](22,7) = 845.0/1179648.0;
-  restriction[1](22,8) = -475.0/786432.0;
-  restriction[1](22,9) = -1525.0/1179648.0;
-  restriction[1](22,10) = 275.0/393216.0;
-  restriction[1](22,11) = -275.0/2359296.0;
-  restriction[1](22,12) = -275.0/3538944.0;
-  restriction[1](22,13) = 18421.0/3538944.0;
-  restriction[1](22,14) = -10355.0/2359296.0;
-  restriction[1](22,15) = -33245.0/3538944.0;
-  restriction[1](22,16) = 845.0/49152.0;
-  restriction[1](22,17) = -845.0/442368.0;
-  restriction[1](22,18) = 1525.0/442368.0;
-  restriction[1](22,19) = -1525.0/49152.0;
-  restriction[1](22,20) = -845.0/294912.0;
-  restriction[1](22,21) = 475.0/294912.0;
-  restriction[1](22,22) = 1525.0/294912.0;
-  restriction[1](22,23) = -475.0/32768.0;
-  restriction[1](22,24) = 475.0/196608.0;
-  restriction[1](23,0) = 275.0/9437184.0;
-  restriction[1](23,1) = -1375.0/9437184.0;
-  restriction[1](23,2) = -29975.0/28311552.0;
-  restriction[1](23,3) = 5995.0/28311552.0;
-  restriction[1](23,4) = -1525.0/1179648.0;
-  restriction[1](23,5) = -475.0/786432.0;
-  restriction[1](23,6) = 845.0/1179648.0;
-  restriction[1](23,7) = 1375.0/3538944.0;
-  restriction[1](23,8) = 1375.0/2359296.0;
-  restriction[1](23,9) = -1375.0/393216.0;
-  restriction[1](23,10) = -33245.0/3538944.0;
-  restriction[1](23,11) = -10355.0/2359296.0;
-  restriction[1](23,12) = 18421.0/3538944.0;
-  restriction[1](23,13) = -275.0/3538944.0;
-  restriction[1](23,14) = -275.0/2359296.0;
-  restriction[1](23,15) = 275.0/393216.0;
-  restriction[1](23,16) = 1525.0/442368.0;
-  restriction[1](23,17) = -845.0/442368.0;
-  restriction[1](23,18) = 845.0/49152.0;
-  restriction[1](23,19) = -1525.0/49152.0;
-  restriction[1](23,20) = 475.0/294912.0;
-  restriction[1](23,21) = -845.0/294912.0;
-  restriction[1](23,22) = -475.0/32768.0;
-  restriction[1](23,23) = 1525.0/294912.0;
-  restriction[1](23,24) = 475.0/196608.0;
-  restriction[1](24,0) = 545.0/196608.0;
-  restriction[1](24,1) = 25.0/65536.0;
-  restriction[1](24,2) = 545.0/196608.0;
-  restriction[1](24,3) = 11881.0/589824.0;
-  restriction[1](24,4) = 75.0/8192.0;
-  restriction[1](24,5) = -25.0/16384.0;
-  restriction[1](24,6) = -25.0/24576.0;
-  restriction[1](24,7) = -25.0/24576.0;
-  restriction[1](24,8) = -25.0/16384.0;
-  restriction[1](24,9) = 75.0/8192.0;
-  restriction[1](24,10) = 545.0/8192.0;
-  restriction[1](24,11) = -545.0/49152.0;
-  restriction[1](24,12) = -545.0/73728.0;
-  restriction[1](24,13) = -545.0/73728.0;
-  restriction[1](24,14) = -545.0/49152.0;
-  restriction[1](24,15) = 545.0/8192.0;
-  restriction[1](24,16) = -25.0/1024.0;
-  restriction[1](24,17) = 25.0/9216.0;
-  restriction[1](24,18) = -25.0/1024.0;
-  restriction[1](24,19) = 225.0/1024.0;
-  restriction[1](24,20) = 25.0/6144.0;
-  restriction[1](24,21) = 25.0/6144.0;
-  restriction[1](24,22) = -75.0/2048.0;
-  restriction[1](24,23) = -75.0/2048.0;
-  restriction[1](24,24) = 25.0/4096.0;
-  restriction[2](0,0) = 625.0/82944.0;
-  restriction[2](0,1) = 625.0/82944.0;
-  restriction[2](0,2) = 625.0/82944.0;
-  restriction[2](0,3) = 625.0/82944.0;
-  restriction[2](0,4) = 325.0/10368.0;
-  restriction[2](0,5) = -125.0/6912.0;
-  restriction[2](0,6) = -125.0/10368.0;
-  restriction[2](0,7) = 325.0/10368.0;
-  restriction[2](0,8) = -125.0/6912.0;
-  restriction[2](0,9) = -125.0/10368.0;
-  restriction[2](0,10) = 325.0/10368.0;
-  restriction[2](0,11) = -125.0/6912.0;
-  restriction[2](0,12) = -125.0/10368.0;
-  restriction[2](0,13) = 325.0/10368.0;
-  restriction[2](0,14) = -125.0/6912.0;
-  restriction[2](0,15) = -125.0/10368.0;
-  restriction[2](0,16) = 169.0/1296.0;
-  restriction[2](0,17) = -65.0/1296.0;
-  restriction[2](0,18) = 25.0/1296.0;
-  restriction[2](0,19) = -65.0/1296.0;
-  restriction[2](0,20) = -65.0/864.0;
-  restriction[2](0,21) = 25.0/864.0;
-  restriction[2](0,22) = 25.0/864.0;
-  restriction[2](0,23) = -65.0/864.0;
-  restriction[2](0,24) = 25.0/576.0;
-  restriction[2](1,0) = 125.0/82944.0;
-  restriction[2](1,1) = 5225.0/82944.0;
-  restriction[2](1,2) = 5225.0/82944.0;
-  restriction[2](1,3) = 125.0/82944.0;
-  restriction[2](1,4) = 125.0/10368.0;
-  restriction[2](1,5) = -625.0/6912.0;
-  restriction[2](1,6) = 875.0/10368.0;
-  restriction[2](1,7) = 2717.0/10368.0;
-  restriction[2](1,8) = -1045.0/6912.0;
-  restriction[2](1,9) = -1045.0/10368.0;
-  restriction[2](1,10) = 125.0/10368.0;
-  restriction[2](1,11) = -625.0/6912.0;
-  restriction[2](1,12) = 875.0/10368.0;
-  restriction[2](1,13) = 65.0/10368.0;
-  restriction[2](1,14) = -25.0/6912.0;
-  restriction[2](1,15) = -25.0/10368.0;
-  restriction[2](1,16) = 65.0/1296.0;
-  restriction[2](1,17) = 455.0/1296.0;
-  restriction[2](1,18) = -175.0/1296.0;
-  restriction[2](1,19) = -25.0/1296.0;
-  restriction[2](1,20) = -325.0/864.0;
-  restriction[2](1,21) = -175.0/864.0;
-  restriction[2](1,22) = 125.0/864.0;
-  restriction[2](1,23) = -25.0/864.0;
-  restriction[2](1,24) = 125.0/576.0;
-  restriction[2](2,0) = 25.0/82944.0;
-  restriction[2](2,1) = 1045.0/82944.0;
-  restriction[2](2,2) = 43681.0/82944.0;
-  restriction[2](2,3) = 1045.0/82944.0;
-  restriction[2](2,4) = 25.0/10368.0;
-  restriction[2](2,5) = -125.0/6912.0;
-  restriction[2](2,6) = 175.0/10368.0;
-  restriction[2](2,7) = 1045.0/10368.0;
-  restriction[2](2,8) = -5225.0/6912.0;
-  restriction[2](2,9) = 7315.0/10368.0;
-  restriction[2](2,10) = 1045.0/10368.0;
-  restriction[2](2,11) = -5225.0/6912.0;
-  restriction[2](2,12) = 7315.0/10368.0;
-  restriction[2](2,13) = 25.0/10368.0;
-  restriction[2](2,14) = -125.0/6912.0;
-  restriction[2](2,15) = 175.0/10368.0;
-  restriction[2](2,16) = 25.0/1296.0;
-  restriction[2](2,17) = 175.0/1296.0;
-  restriction[2](2,18) = 1225.0/1296.0;
-  restriction[2](2,19) = 175.0/1296.0;
-  restriction[2](2,20) = -125.0/864.0;
-  restriction[2](2,21) = -875.0/864.0;
-  restriction[2](2,22) = -875.0/864.0;
-  restriction[2](2,23) = -125.0/864.0;
-  restriction[2](2,24) = 625.0/576.0;
-  restriction[2](3,0) = 125.0/82944.0;
-  restriction[2](3,1) = 125.0/82944.0;
-  restriction[2](3,2) = 5225.0/82944.0;
-  restriction[2](3,3) = 5225.0/82944.0;
-  restriction[2](3,4) = 65.0/10368.0;
-  restriction[2](3,5) = -25.0/6912.0;
-  restriction[2](3,6) = -25.0/10368.0;
-  restriction[2](3,7) = 125.0/10368.0;
-  restriction[2](3,8) = -625.0/6912.0;
-  restriction[2](3,9) = 875.0/10368.0;
-  restriction[2](3,10) = 2717.0/10368.0;
-  restriction[2](3,11) = -1045.0/6912.0;
-  restriction[2](3,12) = -1045.0/10368.0;
-  restriction[2](3,13) = 125.0/10368.0;
-  restriction[2](3,14) = -625.0/6912.0;
-  restriction[2](3,15) = 875.0/10368.0;
-  restriction[2](3,16) = 65.0/1296.0;
-  restriction[2](3,17) = -25.0/1296.0;
-  restriction[2](3,18) = -175.0/1296.0;
-  restriction[2](3,19) = 455.0/1296.0;
-  restriction[2](3,20) = -25.0/864.0;
-  restriction[2](3,21) = 125.0/864.0;
-  restriction[2](3,22) = -175.0/864.0;
-  restriction[2](3,23) = -325.0/864.0;
-  restriction[2](3,24) = 125.0/576.0;
-  restriction[2](4,0) = 1375.0/10616832.0;
-  restriction[2](4,1) = -6875.0/10616832.0;
-  restriction[2](4,2) = -6875.0/10616832.0;
-  restriction[2](4,3) = 1375.0/10616832.0;
-  restriction[2](4,4) = -7625.0/1327104.0;
-  restriction[2](4,5) = -2375.0/884736.0;
-  restriction[2](4,6) = 4225.0/1327104.0;
-  restriction[2](4,7) = -3575.0/1327104.0;
-  restriction[2](4,8) = 1375.0/884736.0;
-  restriction[2](4,9) = 1375.0/1327104.0;
-  restriction[2](4,10) = -7625.0/1327104.0;
-  restriction[2](4,11) = -2375.0/884736.0;
-  restriction[2](4,12) = 4225.0/1327104.0;
-  restriction[2](4,13) = 715.0/1327104.0;
-  restriction[2](4,14) = -275.0/884736.0;
-  restriction[2](4,15) = -275.0/1327104.0;
-  restriction[2](4,16) = -3965.0/165888.0;
-  restriction[2](4,17) = 2197.0/165888.0;
-  restriction[2](4,18) = -845.0/165888.0;
-  restriction[2](4,19) = 1525.0/165888.0;
-  restriction[2](4,20) = -1235.0/110592.0;
-  restriction[2](4,21) = -845.0/110592.0;
-  restriction[2](4,22) = 475.0/110592.0;
-  restriction[2](4,23) = 1525.0/110592.0;
-  restriction[2](4,24) = 475.0/73728.0;
-  restriction[2](5,0) = 2725.0/221184.0;
-  restriction[2](5,1) = 125.0/73728.0;
-  restriction[2](5,2) = 125.0/73728.0;
-  restriction[2](5,3) = 2725.0/221184.0;
-  restriction[2](5,4) = 125.0/3072.0;
-  restriction[2](5,5) = -125.0/18432.0;
-  restriction[2](5,6) = -125.0/27648.0;
-  restriction[2](5,7) = 65.0/9216.0;
-  restriction[2](5,8) = -25.0/6144.0;
-  restriction[2](5,9) = -25.0/9216.0;
-  restriction[2](5,10) = 125.0/3072.0;
-  restriction[2](5,11) = -125.0/18432.0;
-  restriction[2](5,12) = -125.0/27648.0;
-  restriction[2](5,13) = 1417.0/27648.0;
-  restriction[2](5,14) = -545.0/18432.0;
-  restriction[2](5,15) = -545.0/27648.0;
-  restriction[2](5,16) = 65.0/384.0;
-  restriction[2](5,17) = -65.0/3456.0;
-  restriction[2](5,18) = 25.0/3456.0;
-  restriction[2](5,19) = -25.0/384.0;
-  restriction[2](5,20) = -65.0/2304.0;
-  restriction[2](5,21) = 25.0/2304.0;
-  restriction[2](5,22) = 25.0/2304.0;
-  restriction[2](5,23) = -25.0/256.0;
-  restriction[2](5,24) = 25.0/1536.0;
-  restriction[2](6,0) = 29375.0/10616832.0;
-  restriction[2](6,1) = -62875.0/10616832.0;
-  restriction[2](6,2) = -62875.0/10616832.0;
-  restriction[2](6,3) = 29375.0/10616832.0;
-  restriction[2](6,4) = 32375.0/1327104.0;
-  restriction[2](6,5) = 40025.0/884736.0;
-  restriction[2](6,6) = 34625.0/1327104.0;
-  restriction[2](6,7) = -32695.0/1327104.0;
-  restriction[2](6,8) = 12575.0/884736.0;
-  restriction[2](6,9) = 12575.0/1327104.0;
-  restriction[2](6,10) = 32375.0/1327104.0;
-  restriction[2](6,11) = 40025.0/884736.0;
-  restriction[2](6,12) = 34625.0/1327104.0;
-  restriction[2](6,13) = 15275.0/1327104.0;
-  restriction[2](6,14) = -5875.0/884736.0;
-  restriction[2](6,15) = -5875.0/1327104.0;
-  restriction[2](6,16) = 16835.0/165888.0;
-  restriction[2](6,17) = 18005.0/165888.0;
-  restriction[2](6,18) = -6925.0/165888.0;
-  restriction[2](6,19) = -6475.0/165888.0;
-  restriction[2](6,20) = 20813.0/110592.0;
-  restriction[2](6,21) = -6925.0/110592.0;
-  restriction[2](6,22) = -8005.0/110592.0;
-  restriction[2](6,23) = -6475.0/110592.0;
-  restriction[2](6,24) = -8005.0/73728.0;
-  restriction[2](7,0) = 275.0/10616832.0;
-  restriction[2](7,1) = 11495.0/10616832.0;
-  restriction[2](7,2) = -57475.0/10616832.0;
-  restriction[2](7,3) = -1375.0/10616832.0;
-  restriction[2](7,4) = 275.0/1327104.0;
-  restriction[2](7,5) = -1375.0/884736.0;
-  restriction[2](7,6) = 1925.0/1327104.0;
-  restriction[2](7,7) = -63745.0/1327104.0;
-  restriction[2](7,8) = -19855.0/884736.0;
-  restriction[2](7,9) = 35321.0/1327104.0;
-  restriction[2](7,10) = -1375.0/1327104.0;
-  restriction[2](7,11) = 6875.0/884736.0;
-  restriction[2](7,12) = -9625.0/1327104.0;
-  restriction[2](7,13) = -1525.0/1327104.0;
-  restriction[2](7,14) = -475.0/884736.0;
-  restriction[2](7,15) = 845.0/1327104.0;
-  restriction[2](7,16) = -1525.0/165888.0;
-  restriction[2](7,17) = -10675.0/165888.0;
-  restriction[2](7,18) = 5915.0/165888.0;
-  restriction[2](7,19) = 845.0/165888.0;
-  restriction[2](7,20) = 7625.0/110592.0;
-  restriction[2](7,21) = -3325.0/110592.0;
-  restriction[2](7,22) = -4225.0/110592.0;
-  restriction[2](7,23) = -475.0/110592.0;
-  restriction[2](7,24) = 2375.0/73728.0;
-  restriction[2](8,0) = 545.0/221184.0;
-  restriction[2](8,1) = 22781.0/221184.0;
-  restriction[2](8,2) = 1045.0/73728.0;
-  restriction[2](8,3) = 25.0/73728.0;
-  restriction[2](8,4) = 545.0/27648.0;
-  restriction[2](8,5) = -2725.0/18432.0;
-  restriction[2](8,6) = 3815.0/27648.0;
-  restriction[2](8,7) = 1045.0/3072.0;
-  restriction[2](8,8) = -1045.0/18432.0;
-  restriction[2](8,9) = -1045.0/27648.0;
-  restriction[2](8,10) = 25.0/9216.0;
-  restriction[2](8,11) = -125.0/6144.0;
-  restriction[2](8,12) = 175.0/9216.0;
-  restriction[2](8,13) = 25.0/3072.0;
-  restriction[2](8,14) = -25.0/18432.0;
-  restriction[2](8,15) = -25.0/27648.0;
-  restriction[2](8,16) = 25.0/384.0;
-  restriction[2](8,17) = 175.0/384.0;
-  restriction[2](8,18) = -175.0/3456.0;
-  restriction[2](8,19) = -25.0/3456.0;
-  restriction[2](8,20) = -125.0/256.0;
-  restriction[2](8,21) = -175.0/2304.0;
-  restriction[2](8,22) = 125.0/2304.0;
-  restriction[2](8,23) = -25.0/2304.0;
-  restriction[2](8,24) = 125.0/1536.0;
-  restriction[2](9,0) = 5875.0/10616832.0;
-  restriction[2](9,1) = 245575.0/10616832.0;
-  restriction[2](9,2) = -525635.0/10616832.0;
-  restriction[2](9,3) = -12575.0/10616832.0;
-  restriction[2](9,4) = 5875.0/1327104.0;
-  restriction[2](9,5) = -29375.0/884736.0;
-  restriction[2](9,6) = 41125.0/1327104.0;
-  restriction[2](9,7) = 270655.0/1327104.0;
-  restriction[2](9,8) = 334609.0/884736.0;
-  restriction[2](9,9) = 289465.0/1327104.0;
-  restriction[2](9,10) = -12575.0/1327104.0;
-  restriction[2](9,11) = 62875.0/884736.0;
-  restriction[2](9,12) = -88025.0/1327104.0;
-  restriction[2](9,13) = 6475.0/1327104.0;
-  restriction[2](9,14) = 8005.0/884736.0;
-  restriction[2](9,15) = 6925.0/1327104.0;
-  restriction[2](9,16) = 6475.0/165888.0;
-  restriction[2](9,17) = 45325.0/165888.0;
-  restriction[2](9,18) = 48475.0/165888.0;
-  restriction[2](9,19) = 6925.0/165888.0;
-  restriction[2](9,20) = -32375.0/110592.0;
-  restriction[2](9,21) = 56035.0/110592.0;
-  restriction[2](9,22) = -34625.0/110592.0;
-  restriction[2](9,23) = 8005.0/110592.0;
-  restriction[2](9,24) = -40025.0/73728.0;
-  restriction[2](10,0) = 275.0/10616832.0;
-  restriction[2](10,1) = -1375.0/10616832.0;
-  restriction[2](10,2) = -57475.0/10616832.0;
-  restriction[2](10,3) = 11495.0/10616832.0;
-  restriction[2](10,4) = -1525.0/1327104.0;
-  restriction[2](10,5) = -475.0/884736.0;
-  restriction[2](10,6) = 845.0/1327104.0;
-  restriction[2](10,7) = -1375.0/1327104.0;
-  restriction[2](10,8) = 6875.0/884736.0;
-  restriction[2](10,9) = -9625.0/1327104.0;
-  restriction[2](10,10) = -63745.0/1327104.0;
-  restriction[2](10,11) = -19855.0/884736.0;
-  restriction[2](10,12) = 35321.0/1327104.0;
-  restriction[2](10,13) = 275.0/1327104.0;
-  restriction[2](10,14) = -1375.0/884736.0;
-  restriction[2](10,15) = 1925.0/1327104.0;
-  restriction[2](10,16) = -1525.0/165888.0;
-  restriction[2](10,17) = 845.0/165888.0;
-  restriction[2](10,18) = 5915.0/165888.0;
-  restriction[2](10,19) = -10675.0/165888.0;
-  restriction[2](10,20) = -475.0/110592.0;
-  restriction[2](10,21) = -4225.0/110592.0;
-  restriction[2](10,22) = -3325.0/110592.0;
-  restriction[2](10,23) = 7625.0/110592.0;
-  restriction[2](10,24) = 2375.0/73728.0;
-  restriction[2](11,0) = 545.0/221184.0;
-  restriction[2](11,1) = 25.0/73728.0;
-  restriction[2](11,2) = 1045.0/73728.0;
-  restriction[2](11,3) = 22781.0/221184.0;
-  restriction[2](11,4) = 25.0/3072.0;
-  restriction[2](11,5) = -25.0/18432.0;
-  restriction[2](11,6) = -25.0/27648.0;
-  restriction[2](11,7) = 25.0/9216.0;
-  restriction[2](11,8) = -125.0/6144.0;
-  restriction[2](11,9) = 175.0/9216.0;
-  restriction[2](11,10) = 1045.0/3072.0;
-  restriction[2](11,11) = -1045.0/18432.0;
-  restriction[2](11,12) = -1045.0/27648.0;
-  restriction[2](11,13) = 545.0/27648.0;
-  restriction[2](11,14) = -2725.0/18432.0;
-  restriction[2](11,15) = 3815.0/27648.0;
-  restriction[2](11,16) = 25.0/384.0;
-  restriction[2](11,17) = -25.0/3456.0;
-  restriction[2](11,18) = -175.0/3456.0;
-  restriction[2](11,19) = 175.0/384.0;
-  restriction[2](11,20) = -25.0/2304.0;
-  restriction[2](11,21) = 125.0/2304.0;
-  restriction[2](11,22) = -175.0/2304.0;
-  restriction[2](11,23) = -125.0/256.0;
-  restriction[2](11,24) = 125.0/1536.0;
-  restriction[2](12,0) = 5875.0/10616832.0;
-  restriction[2](12,1) = -12575.0/10616832.0;
-  restriction[2](12,2) = -525635.0/10616832.0;
-  restriction[2](12,3) = 245575.0/10616832.0;
-  restriction[2](12,4) = 6475.0/1327104.0;
-  restriction[2](12,5) = 8005.0/884736.0;
-  restriction[2](12,6) = 6925.0/1327104.0;
-  restriction[2](12,7) = -12575.0/1327104.0;
-  restriction[2](12,8) = 62875.0/884736.0;
-  restriction[2](12,9) = -88025.0/1327104.0;
-  restriction[2](12,10) = 270655.0/1327104.0;
-  restriction[2](12,11) = 334609.0/884736.0;
-  restriction[2](12,12) = 289465.0/1327104.0;
-  restriction[2](12,13) = 5875.0/1327104.0;
-  restriction[2](12,14) = -29375.0/884736.0;
-  restriction[2](12,15) = 41125.0/1327104.0;
-  restriction[2](12,16) = 6475.0/165888.0;
-  restriction[2](12,17) = 6925.0/165888.0;
-  restriction[2](12,18) = 48475.0/165888.0;
-  restriction[2](12,19) = 45325.0/165888.0;
-  restriction[2](12,20) = 8005.0/110592.0;
-  restriction[2](12,21) = -34625.0/110592.0;
-  restriction[2](12,22) = 56035.0/110592.0;
-  restriction[2](12,23) = -32375.0/110592.0;
-  restriction[2](12,24) = -40025.0/73728.0;
-  restriction[2](13,0) = 1375.0/10616832.0;
-  restriction[2](13,1) = 1375.0/10616832.0;
-  restriction[2](13,2) = -6875.0/10616832.0;
-  restriction[2](13,3) = -6875.0/10616832.0;
-  restriction[2](13,4) = 715.0/1327104.0;
-  restriction[2](13,5) = -275.0/884736.0;
-  restriction[2](13,6) = -275.0/1327104.0;
-  restriction[2](13,7) = -7625.0/1327104.0;
-  restriction[2](13,8) = -2375.0/884736.0;
-  restriction[2](13,9) = 4225.0/1327104.0;
-  restriction[2](13,10) = -3575.0/1327104.0;
-  restriction[2](13,11) = 1375.0/884736.0;
-  restriction[2](13,12) = 1375.0/1327104.0;
-  restriction[2](13,13) = -7625.0/1327104.0;
-  restriction[2](13,14) = -2375.0/884736.0;
-  restriction[2](13,15) = 4225.0/1327104.0;
-  restriction[2](13,16) = -3965.0/165888.0;
-  restriction[2](13,17) = 1525.0/165888.0;
-  restriction[2](13,18) = -845.0/165888.0;
-  restriction[2](13,19) = 2197.0/165888.0;
-  restriction[2](13,20) = 1525.0/110592.0;
-  restriction[2](13,21) = 475.0/110592.0;
-  restriction[2](13,22) = -845.0/110592.0;
-  restriction[2](13,23) = -1235.0/110592.0;
-  restriction[2](13,24) = 475.0/73728.0;
-  restriction[2](14,0) = 2725.0/221184.0;
-  restriction[2](14,1) = 2725.0/221184.0;
-  restriction[2](14,2) = 125.0/73728.0;
-  restriction[2](14,3) = 125.0/73728.0;
-  restriction[2](14,4) = 1417.0/27648.0;
-  restriction[2](14,5) = -545.0/18432.0;
-  restriction[2](14,6) = -545.0/27648.0;
-  restriction[2](14,7) = 125.0/3072.0;
-  restriction[2](14,8) = -125.0/18432.0;
-  restriction[2](14,9) = -125.0/27648.0;
-  restriction[2](14,10) = 65.0/9216.0;
-  restriction[2](14,11) = -25.0/6144.0;
-  restriction[2](14,12) = -25.0/9216.0;
-  restriction[2](14,13) = 125.0/3072.0;
-  restriction[2](14,14) = -125.0/18432.0;
-  restriction[2](14,15) = -125.0/27648.0;
-  restriction[2](14,16) = 65.0/384.0;
-  restriction[2](14,17) = -25.0/384.0;
-  restriction[2](14,18) = 25.0/3456.0;
-  restriction[2](14,19) = -65.0/3456.0;
-  restriction[2](14,20) = -25.0/256.0;
-  restriction[2](14,21) = 25.0/2304.0;
-  restriction[2](14,22) = 25.0/2304.0;
-  restriction[2](14,23) = -65.0/2304.0;
-  restriction[2](14,24) = 25.0/1536.0;
-  restriction[2](15,0) = 29375.0/10616832.0;
-  restriction[2](15,1) = 29375.0/10616832.0;
-  restriction[2](15,2) = -62875.0/10616832.0;
-  restriction[2](15,3) = -62875.0/10616832.0;
-  restriction[2](15,4) = 15275.0/1327104.0;
-  restriction[2](15,5) = -5875.0/884736.0;
-  restriction[2](15,6) = -5875.0/1327104.0;
-  restriction[2](15,7) = 32375.0/1327104.0;
-  restriction[2](15,8) = 40025.0/884736.0;
-  restriction[2](15,9) = 34625.0/1327104.0;
-  restriction[2](15,10) = -32695.0/1327104.0;
-  restriction[2](15,11) = 12575.0/884736.0;
-  restriction[2](15,12) = 12575.0/1327104.0;
-  restriction[2](15,13) = 32375.0/1327104.0;
-  restriction[2](15,14) = 40025.0/884736.0;
-  restriction[2](15,15) = 34625.0/1327104.0;
-  restriction[2](15,16) = 16835.0/165888.0;
-  restriction[2](15,17) = -6475.0/165888.0;
-  restriction[2](15,18) = -6925.0/165888.0;
-  restriction[2](15,19) = 18005.0/165888.0;
-  restriction[2](15,20) = -6475.0/110592.0;
-  restriction[2](15,21) = -8005.0/110592.0;
-  restriction[2](15,22) = -6925.0/110592.0;
-  restriction[2](15,23) = 20813.0/110592.0;
-  restriction[2](15,24) = -8005.0/73728.0;
-  restriction[2](16,0) = 3025.0/1358954496.0;
-  restriction[2](16,1) = -15125.0/1358954496.0;
-  restriction[2](16,2) = 75625.0/1358954496.0;
-  restriction[2](16,3) = -15125.0/1358954496.0;
-  restriction[2](16,4) = -16775.0/169869312.0;
-  restriction[2](16,5) = -5225.0/113246208.0;
-  restriction[2](16,6) = 9295.0/169869312.0;
-  restriction[2](16,7) = 83875.0/169869312.0;
-  restriction[2](16,8) = 26125.0/113246208.0;
-  restriction[2](16,9) = -46475.0/169869312.0;
-  restriction[2](16,10) = 83875.0/169869312.0;
-  restriction[2](16,11) = 26125.0/113246208.0;
-  restriction[2](16,12) = -46475.0/169869312.0;
-  restriction[2](16,13) = -16775.0/169869312.0;
-  restriction[2](16,14) = -5225.0/113246208.0;
-  restriction[2](16,15) = 9295.0/169869312.0;
-  restriction[2](16,16) = 93025.0/21233664.0;
-  restriction[2](16,17) = -51545.0/21233664.0;
-  restriction[2](16,18) = 28561.0/21233664.0;
-  restriction[2](16,19) = -51545.0/21233664.0;
-  restriction[2](16,20) = 28975.0/14155776.0;
-  restriction[2](16,21) = -16055.0/14155776.0;
-  restriction[2](16,22) = -16055.0/14155776.0;
-  restriction[2](16,23) = 28975.0/14155776.0;
-  restriction[2](16,24) = 9025.0/9437184.0;
-  restriction[2](17,0) = 64625.0/1358954496.0;
-  restriction[2](17,1) = -138325.0/1358954496.0;
-  restriction[2](17,2) = 691625.0/1358954496.0;
-  restriction[2](17,3) = -323125.0/1358954496.0;
-  restriction[2](17,4) = 71225.0/169869312.0;
-  restriction[2](17,5) = 88055.0/113246208.0;
-  restriction[2](17,6) = 76175.0/169869312.0;
-  restriction[2](17,7) = 767075.0/169869312.0;
-  restriction[2](17,8) = 238925.0/113246208.0;
-  restriction[2](17,9) = -425035.0/169869312.0;
-  restriction[2](17,10) = -356125.0/169869312.0;
-  restriction[2](17,11) = -440275.0/113246208.0;
-  restriction[2](17,12) = -380875.0/169869312.0;
-  restriction[2](17,13) = -358375.0/169869312.0;
-  restriction[2](17,14) = -111625.0/113246208.0;
-  restriction[2](17,15) = 198575.0/169869312.0;
-  restriction[2](17,16) = -394975.0/21233664.0;
-  restriction[2](17,17) = -422425.0/21233664.0;
-  restriction[2](17,18) = 234065.0/21233664.0;
-  restriction[2](17,19) = 218855.0/21233664.0;
-  restriction[2](17,20) = -488305.0/14155776.0;
-  restriction[2](17,21) = -131575.0/14155776.0;
-  restriction[2](17,22) = 270569.0/14155776.0;
-  restriction[2](17,23) = -123025.0/14155776.0;
-  restriction[2](17,24) = -152095.0/9437184.0;
-  restriction[2](18,0) = 1380625.0/1358954496.0;
-  restriction[2](18,1) = -2955125.0/1358954496.0;
-  restriction[2](18,2) = 6325225.0/1358954496.0;
-  restriction[2](18,3) = -2955125.0/1358954496.0;
-  restriction[2](18,4) = 1521625.0/169869312.0;
-  restriction[2](18,5) = 1881175.0/113246208.0;
-  restriction[2](18,6) = 1627375.0/169869312.0;
-  restriction[2](18,7) = -3256925.0/169869312.0;
-  restriction[2](18,8) = -4026515.0/113246208.0;
-  restriction[2](18,9) = -3483275.0/169869312.0;
-  restriction[2](18,10) = -3256925.0/169869312.0;
-  restriction[2](18,11) = -4026515.0/113246208.0;
-  restriction[2](18,12) = -3483275.0/169869312.0;
-  restriction[2](18,13) = 1521625.0/169869312.0;
-  restriction[2](18,14) = 1881175.0/113246208.0;
-  restriction[2](18,15) = 1627375.0/169869312.0;
-  restriction[2](18,16) = 1677025.0/21233664.0;
-  restriction[2](18,17) = 1793575.0/21233664.0;
-  restriction[2](18,18) = 1918225.0/21233664.0;
-  restriction[2](18,19) = 1793575.0/21233664.0;
-  restriction[2](18,20) = 2073295.0/14155776.0;
-  restriction[2](18,21) = 2217385.0/14155776.0;
-  restriction[2](18,22) = 2217385.0/14155776.0;
-  restriction[2](18,23) = 2073295.0/14155776.0;
-  restriction[2](18,24) = 2563201.0/9437184.0;
-  restriction[2](19,0) = 64625.0/1358954496.0;
-  restriction[2](19,1) = -323125.0/1358954496.0;
-  restriction[2](19,2) = 691625.0/1358954496.0;
-  restriction[2](19,3) = -138325.0/1358954496.0;
-  restriction[2](19,4) = -358375.0/169869312.0;
-  restriction[2](19,5) = -111625.0/113246208.0;
-  restriction[2](19,6) = 198575.0/169869312.0;
-  restriction[2](19,7) = -356125.0/169869312.0;
-  restriction[2](19,8) = -440275.0/113246208.0;
-  restriction[2](19,9) = -380875.0/169869312.0;
-  restriction[2](19,10) = 767075.0/169869312.0;
-  restriction[2](19,11) = 238925.0/113246208.0;
-  restriction[2](19,12) = -425035.0/169869312.0;
-  restriction[2](19,13) = 71225.0/169869312.0;
-  restriction[2](19,14) = 88055.0/113246208.0;
-  restriction[2](19,15) = 76175.0/169869312.0;
-  restriction[2](19,16) = -394975.0/21233664.0;
-  restriction[2](19,17) = 218855.0/21233664.0;
-  restriction[2](19,18) = 234065.0/21233664.0;
-  restriction[2](19,19) = -422425.0/21233664.0;
-  restriction[2](19,20) = -123025.0/14155776.0;
-  restriction[2](19,21) = 270569.0/14155776.0;
-  restriction[2](19,22) = -131575.0/14155776.0;
-  restriction[2](19,23) = -488305.0/14155776.0;
-  restriction[2](19,24) = -152095.0/9437184.0;
-  restriction[2](20,0) = 5995.0/28311552.0;
-  restriction[2](20,1) = 275.0/9437184.0;
-  restriction[2](20,2) = -1375.0/9437184.0;
-  restriction[2](20,3) = -29975.0/28311552.0;
-  restriction[2](20,4) = 275.0/393216.0;
-  restriction[2](20,5) = -275.0/2359296.0;
-  restriction[2](20,6) = -275.0/3538944.0;
-  restriction[2](20,7) = -1525.0/1179648.0;
-  restriction[2](20,8) = -475.0/786432.0;
-  restriction[2](20,9) = 845.0/1179648.0;
-  restriction[2](20,10) = -1375.0/393216.0;
-  restriction[2](20,11) = 1375.0/2359296.0;
-  restriction[2](20,12) = 1375.0/3538944.0;
-  restriction[2](20,13) = -33245.0/3538944.0;
-  restriction[2](20,14) = -10355.0/2359296.0;
-  restriction[2](20,15) = 18421.0/3538944.0;
-  restriction[2](20,16) = -1525.0/49152.0;
-  restriction[2](20,17) = 1525.0/442368.0;
-  restriction[2](20,18) = -845.0/442368.0;
-  restriction[2](20,19) = 845.0/49152.0;
-  restriction[2](20,20) = 1525.0/294912.0;
-  restriction[2](20,21) = 475.0/294912.0;
-  restriction[2](20,22) = -845.0/294912.0;
-  restriction[2](20,23) = -475.0/32768.0;
-  restriction[2](20,24) = 475.0/196608.0;
-  restriction[2](21,0) = 128075.0/28311552.0;
-  restriction[2](21,1) = -274135.0/28311552.0;
-  restriction[2](21,2) = -12575.0/9437184.0;
-  restriction[2](21,3) = 5875.0/9437184.0;
-  restriction[2](21,4) = 141155.0/3538944.0;
-  restriction[2](21,5) = 174509.0/2359296.0;
-  restriction[2](21,6) = 150965.0/3538944.0;
-  restriction[2](21,7) = -12575.0/393216.0;
-  restriction[2](21,8) = 12575.0/2359296.0;
-  restriction[2](21,9) = 12575.0/3538944.0;
-  restriction[2](21,10) = 6475.0/1179648.0;
-  restriction[2](21,11) = 8005.0/786432.0;
-  restriction[2](21,12) = 6925.0/1179648.0;
-  restriction[2](21,13) = 5875.0/393216.0;
-  restriction[2](21,14) = -5875.0/2359296.0;
-  restriction[2](21,15) = -5875.0/3538944.0;
-  restriction[2](21,16) = 6475.0/49152.0;
-  restriction[2](21,17) = 6925.0/49152.0;
-  restriction[2](21,18) = -6925.0/442368.0;
-  restriction[2](21,19) = -6475.0/442368.0;
-  restriction[2](21,20) = 8005.0/32768.0;
-  restriction[2](21,21) = -6925.0/294912.0;
-  restriction[2](21,22) = -8005.0/294912.0;
-  restriction[2](21,23) = -6475.0/294912.0;
-  restriction[2](21,24) = -8005.0/196608.0;
-  restriction[2](22,0) = 128075.0/28311552.0;
-  restriction[2](22,1) = 5875.0/9437184.0;
-  restriction[2](22,2) = -12575.0/9437184.0;
-  restriction[2](22,3) = -274135.0/28311552.0;
-  restriction[2](22,4) = 5875.0/393216.0;
-  restriction[2](22,5) = -5875.0/2359296.0;
-  restriction[2](22,6) = -5875.0/3538944.0;
-  restriction[2](22,7) = 6475.0/1179648.0;
-  restriction[2](22,8) = 8005.0/786432.0;
-  restriction[2](22,9) = 6925.0/1179648.0;
-  restriction[2](22,10) = -12575.0/393216.0;
-  restriction[2](22,11) = 12575.0/2359296.0;
-  restriction[2](22,12) = 12575.0/3538944.0;
-  restriction[2](22,13) = 141155.0/3538944.0;
-  restriction[2](22,14) = 174509.0/2359296.0;
-  restriction[2](22,15) = 150965.0/3538944.0;
-  restriction[2](22,16) = 6475.0/49152.0;
-  restriction[2](22,17) = -6475.0/442368.0;
-  restriction[2](22,18) = -6925.0/442368.0;
-  restriction[2](22,19) = 6925.0/49152.0;
-  restriction[2](22,20) = -6475.0/294912.0;
-  restriction[2](22,21) = -8005.0/294912.0;
-  restriction[2](22,22) = -6925.0/294912.0;
-  restriction[2](22,23) = 8005.0/32768.0;
-  restriction[2](22,24) = -8005.0/196608.0;
-  restriction[2](23,0) = 5995.0/28311552.0;
-  restriction[2](23,1) = -29975.0/28311552.0;
-  restriction[2](23,2) = -1375.0/9437184.0;
-  restriction[2](23,3) = 275.0/9437184.0;
-  restriction[2](23,4) = -33245.0/3538944.0;
-  restriction[2](23,5) = -10355.0/2359296.0;
-  restriction[2](23,6) = 18421.0/3538944.0;
-  restriction[2](23,7) = -1375.0/393216.0;
-  restriction[2](23,8) = 1375.0/2359296.0;
-  restriction[2](23,9) = 1375.0/3538944.0;
-  restriction[2](23,10) = -1525.0/1179648.0;
-  restriction[2](23,11) = -475.0/786432.0;
-  restriction[2](23,12) = 845.0/1179648.0;
-  restriction[2](23,13) = 275.0/393216.0;
-  restriction[2](23,14) = -275.0/2359296.0;
-  restriction[2](23,15) = -275.0/3538944.0;
-  restriction[2](23,16) = -1525.0/49152.0;
-  restriction[2](23,17) = 845.0/49152.0;
-  restriction[2](23,18) = -845.0/442368.0;
-  restriction[2](23,19) = 1525.0/442368.0;
-  restriction[2](23,20) = -475.0/32768.0;
-  restriction[2](23,21) = -845.0/294912.0;
-  restriction[2](23,22) = 475.0/294912.0;
-  restriction[2](23,23) = 1525.0/294912.0;
-  restriction[2](23,24) = 475.0/196608.0;
-  restriction[2](24,0) = 11881.0/589824.0;
-  restriction[2](24,1) = 545.0/196608.0;
-  restriction[2](24,2) = 25.0/65536.0;
-  restriction[2](24,3) = 545.0/196608.0;
-  restriction[2](24,4) = 545.0/8192.0;
-  restriction[2](24,5) = -545.0/49152.0;
-  restriction[2](24,6) = -545.0/73728.0;
-  restriction[2](24,7) = 75.0/8192.0;
-  restriction[2](24,8) = -25.0/16384.0;
-  restriction[2](24,9) = -25.0/24576.0;
-  restriction[2](24,10) = 75.0/8192.0;
-  restriction[2](24,11) = -25.0/16384.0;
-  restriction[2](24,12) = -25.0/24576.0;
-  restriction[2](24,13) = 545.0/8192.0;
-  restriction[2](24,14) = -545.0/49152.0;
-  restriction[2](24,15) = -545.0/73728.0;
-  restriction[2](24,16) = 225.0/1024.0;
-  restriction[2](24,17) = -25.0/1024.0;
-  restriction[2](24,18) = 25.0/9216.0;
-  restriction[2](24,19) = -25.0/1024.0;
-  restriction[2](24,20) = -75.0/2048.0;
-  restriction[2](24,21) = 25.0/6144.0;
-  restriction[2](24,22) = 25.0/6144.0;
-  restriction[2](24,23) = -75.0/2048.0;
-  restriction[2](24,24) = 25.0/4096.0;
-  restriction[3](0,0) = 5225.0/82944.0;
-  restriction[3](0,1) = 125.0/82944.0;
-  restriction[3](0,2) = 125.0/82944.0;
-  restriction[3](0,3) = 5225.0/82944.0;
-  restriction[3](0,4) = 875.0/10368.0;
-  restriction[3](0,5) = -625.0/6912.0;
-  restriction[3](0,6) = 125.0/10368.0;
-  restriction[3](0,7) = 65.0/10368.0;
-  restriction[3](0,8) = -25.0/6912.0;
-  restriction[3](0,9) = -25.0/10368.0;
-  restriction[3](0,10) = 875.0/10368.0;
-  restriction[3](0,11) = -625.0/6912.0;
-  restriction[3](0,12) = 125.0/10368.0;
-  restriction[3](0,13) = 2717.0/10368.0;
-  restriction[3](0,14) = -1045.0/6912.0;
-  restriction[3](0,15) = -1045.0/10368.0;
-  restriction[3](0,16) = 455.0/1296.0;
-  restriction[3](0,17) = 65.0/1296.0;
-  restriction[3](0,18) = -25.0/1296.0;
-  restriction[3](0,19) = -175.0/1296.0;
-  restriction[3](0,20) = -325.0/864.0;
-  restriction[3](0,21) = -25.0/864.0;
-  restriction[3](0,22) = 125.0/864.0;
-  restriction[3](0,23) = -175.0/864.0;
-  restriction[3](0,24) = 125.0/576.0;
-  restriction[3](1,0) = 625.0/82944.0;
-  restriction[3](1,1) = 625.0/82944.0;
-  restriction[3](1,2) = 625.0/82944.0;
-  restriction[3](1,3) = 625.0/82944.0;
-  restriction[3](1,4) = -125.0/10368.0;
-  restriction[3](1,5) = -125.0/6912.0;
-  restriction[3](1,6) = 325.0/10368.0;
-  restriction[3](1,7) = 325.0/10368.0;
-  restriction[3](1,8) = -125.0/6912.0;
-  restriction[3](1,9) = -125.0/10368.0;
-  restriction[3](1,10) = -125.0/10368.0;
-  restriction[3](1,11) = -125.0/6912.0;
-  restriction[3](1,12) = 325.0/10368.0;
-  restriction[3](1,13) = 325.0/10368.0;
-  restriction[3](1,14) = -125.0/6912.0;
-  restriction[3](1,15) = -125.0/10368.0;
-  restriction[3](1,16) = -65.0/1296.0;
-  restriction[3](1,17) = 169.0/1296.0;
-  restriction[3](1,18) = -65.0/1296.0;
-  restriction[3](1,19) = 25.0/1296.0;
-  restriction[3](1,20) = -65.0/864.0;
-  restriction[3](1,21) = -65.0/864.0;
-  restriction[3](1,22) = 25.0/864.0;
-  restriction[3](1,23) = 25.0/864.0;
-  restriction[3](1,24) = 25.0/576.0;
-  restriction[3](2,0) = 125.0/82944.0;
-  restriction[3](2,1) = 125.0/82944.0;
-  restriction[3](2,2) = 5225.0/82944.0;
-  restriction[3](2,3) = 5225.0/82944.0;
-  restriction[3](2,4) = -25.0/10368.0;
-  restriction[3](2,5) = -25.0/6912.0;
-  restriction[3](2,6) = 65.0/10368.0;
-  restriction[3](2,7) = 125.0/10368.0;
-  restriction[3](2,8) = -625.0/6912.0;
-  restriction[3](2,9) = 875.0/10368.0;
-  restriction[3](2,10) = -1045.0/10368.0;
-  restriction[3](2,11) = -1045.0/6912.0;
-  restriction[3](2,12) = 2717.0/10368.0;
-  restriction[3](2,13) = 125.0/10368.0;
-  restriction[3](2,14) = -625.0/6912.0;
-  restriction[3](2,15) = 875.0/10368.0;
-  restriction[3](2,16) = -25.0/1296.0;
-  restriction[3](2,17) = 65.0/1296.0;
-  restriction[3](2,18) = 455.0/1296.0;
-  restriction[3](2,19) = -175.0/1296.0;
-  restriction[3](2,20) = -25.0/864.0;
-  restriction[3](2,21) = -325.0/864.0;
-  restriction[3](2,22) = -175.0/864.0;
-  restriction[3](2,23) = 125.0/864.0;
-  restriction[3](2,24) = 125.0/576.0;
-  restriction[3](3,0) = 1045.0/82944.0;
-  restriction[3](3,1) = 25.0/82944.0;
-  restriction[3](3,2) = 1045.0/82944.0;
-  restriction[3](3,3) = 43681.0/82944.0;
-  restriction[3](3,4) = 175.0/10368.0;
-  restriction[3](3,5) = -125.0/6912.0;
-  restriction[3](3,6) = 25.0/10368.0;
-  restriction[3](3,7) = 25.0/10368.0;
-  restriction[3](3,8) = -125.0/6912.0;
-  restriction[3](3,9) = 175.0/10368.0;
-  restriction[3](3,10) = 7315.0/10368.0;
-  restriction[3](3,11) = -5225.0/6912.0;
-  restriction[3](3,12) = 1045.0/10368.0;
-  restriction[3](3,13) = 1045.0/10368.0;
-  restriction[3](3,14) = -5225.0/6912.0;
-  restriction[3](3,15) = 7315.0/10368.0;
-  restriction[3](3,16) = 175.0/1296.0;
-  restriction[3](3,17) = 25.0/1296.0;
-  restriction[3](3,18) = 175.0/1296.0;
-  restriction[3](3,19) = 1225.0/1296.0;
-  restriction[3](3,20) = -125.0/864.0;
-  restriction[3](3,21) = -125.0/864.0;
-  restriction[3](3,22) = -875.0/864.0;
-  restriction[3](3,23) = -875.0/864.0;
-  restriction[3](3,24) = 625.0/576.0;
-  restriction[3](4,0) = -62875.0/10616832.0;
-  restriction[3](4,1) = 29375.0/10616832.0;
-  restriction[3](4,2) = 29375.0/10616832.0;
-  restriction[3](4,3) = -62875.0/10616832.0;
-  restriction[3](4,4) = 34625.0/1327104.0;
-  restriction[3](4,5) = 40025.0/884736.0;
-  restriction[3](4,6) = 32375.0/1327104.0;
-  restriction[3](4,7) = 15275.0/1327104.0;
-  restriction[3](4,8) = -5875.0/884736.0;
-  restriction[3](4,9) = -5875.0/1327104.0;
-  restriction[3](4,10) = 34625.0/1327104.0;
-  restriction[3](4,11) = 40025.0/884736.0;
-  restriction[3](4,12) = 32375.0/1327104.0;
-  restriction[3](4,13) = -32695.0/1327104.0;
-  restriction[3](4,14) = 12575.0/884736.0;
-  restriction[3](4,15) = 12575.0/1327104.0;
-  restriction[3](4,16) = 18005.0/165888.0;
-  restriction[3](4,17) = 16835.0/165888.0;
-  restriction[3](4,18) = -6475.0/165888.0;
-  restriction[3](4,19) = -6925.0/165888.0;
-  restriction[3](4,20) = 20813.0/110592.0;
-  restriction[3](4,21) = -6475.0/110592.0;
-  restriction[3](4,22) = -8005.0/110592.0;
-  restriction[3](4,23) = -6925.0/110592.0;
-  restriction[3](4,24) = -8005.0/73728.0;
-  restriction[3](5,0) = 125.0/73728.0;
-  restriction[3](5,1) = 2725.0/221184.0;
-  restriction[3](5,2) = 2725.0/221184.0;
-  restriction[3](5,3) = 125.0/73728.0;
-  restriction[3](5,4) = -125.0/27648.0;
-  restriction[3](5,5) = -125.0/18432.0;
-  restriction[3](5,6) = 125.0/3072.0;
-  restriction[3](5,7) = 1417.0/27648.0;
-  restriction[3](5,8) = -545.0/18432.0;
-  restriction[3](5,9) = -545.0/27648.0;
-  restriction[3](5,10) = -125.0/27648.0;
-  restriction[3](5,11) = -125.0/18432.0;
-  restriction[3](5,12) = 125.0/3072.0;
-  restriction[3](5,13) = 65.0/9216.0;
-  restriction[3](5,14) = -25.0/6144.0;
-  restriction[3](5,15) = -25.0/9216.0;
-  restriction[3](5,16) = -65.0/3456.0;
-  restriction[3](5,17) = 65.0/384.0;
-  restriction[3](5,18) = -25.0/384.0;
-  restriction[3](5,19) = 25.0/3456.0;
-  restriction[3](5,20) = -65.0/2304.0;
-  restriction[3](5,21) = -25.0/256.0;
-  restriction[3](5,22) = 25.0/2304.0;
-  restriction[3](5,23) = 25.0/2304.0;
-  restriction[3](5,24) = 25.0/1536.0;
-  restriction[3](6,0) = -6875.0/10616832.0;
-  restriction[3](6,1) = 1375.0/10616832.0;
-  restriction[3](6,2) = 1375.0/10616832.0;
-  restriction[3](6,3) = -6875.0/10616832.0;
-  restriction[3](6,4) = 4225.0/1327104.0;
-  restriction[3](6,5) = -2375.0/884736.0;
-  restriction[3](6,6) = -7625.0/1327104.0;
-  restriction[3](6,7) = 715.0/1327104.0;
-  restriction[3](6,8) = -275.0/884736.0;
-  restriction[3](6,9) = -275.0/1327104.0;
-  restriction[3](6,10) = 4225.0/1327104.0;
-  restriction[3](6,11) = -2375.0/884736.0;
-  restriction[3](6,12) = -7625.0/1327104.0;
-  restriction[3](6,13) = -3575.0/1327104.0;
-  restriction[3](6,14) = 1375.0/884736.0;
-  restriction[3](6,15) = 1375.0/1327104.0;
-  restriction[3](6,16) = 2197.0/165888.0;
-  restriction[3](6,17) = -3965.0/165888.0;
-  restriction[3](6,18) = 1525.0/165888.0;
-  restriction[3](6,19) = -845.0/165888.0;
-  restriction[3](6,20) = -1235.0/110592.0;
-  restriction[3](6,21) = 1525.0/110592.0;
-  restriction[3](6,22) = 475.0/110592.0;
-  restriction[3](6,23) = -845.0/110592.0;
-  restriction[3](6,24) = 475.0/73728.0;
-  restriction[3](7,0) = 1375.0/10616832.0;
-  restriction[3](7,1) = 1375.0/10616832.0;
-  restriction[3](7,2) = -6875.0/10616832.0;
-  restriction[3](7,3) = -6875.0/10616832.0;
-  restriction[3](7,4) = -275.0/1327104.0;
-  restriction[3](7,5) = -275.0/884736.0;
-  restriction[3](7,6) = 715.0/1327104.0;
-  restriction[3](7,7) = -7625.0/1327104.0;
-  restriction[3](7,8) = -2375.0/884736.0;
-  restriction[3](7,9) = 4225.0/1327104.0;
-  restriction[3](7,10) = 1375.0/1327104.0;
-  restriction[3](7,11) = 1375.0/884736.0;
-  restriction[3](7,12) = -3575.0/1327104.0;
-  restriction[3](7,13) = -7625.0/1327104.0;
-  restriction[3](7,14) = -2375.0/884736.0;
-  restriction[3](7,15) = 4225.0/1327104.0;
-  restriction[3](7,16) = 1525.0/165888.0;
-  restriction[3](7,17) = -3965.0/165888.0;
-  restriction[3](7,18) = 2197.0/165888.0;
-  restriction[3](7,19) = -845.0/165888.0;
-  restriction[3](7,20) = 1525.0/110592.0;
-  restriction[3](7,21) = -1235.0/110592.0;
-  restriction[3](7,22) = -845.0/110592.0;
-  restriction[3](7,23) = 475.0/110592.0;
-  restriction[3](7,24) = 475.0/73728.0;
-  restriction[3](8,0) = 2725.0/221184.0;
-  restriction[3](8,1) = 2725.0/221184.0;
-  restriction[3](8,2) = 125.0/73728.0;
-  restriction[3](8,3) = 125.0/73728.0;
-  restriction[3](8,4) = -545.0/27648.0;
-  restriction[3](8,5) = -545.0/18432.0;
-  restriction[3](8,6) = 1417.0/27648.0;
-  restriction[3](8,7) = 125.0/3072.0;
-  restriction[3](8,8) = -125.0/18432.0;
-  restriction[3](8,9) = -125.0/27648.0;
-  restriction[3](8,10) = -25.0/9216.0;
-  restriction[3](8,11) = -25.0/6144.0;
-  restriction[3](8,12) = 65.0/9216.0;
-  restriction[3](8,13) = 125.0/3072.0;
-  restriction[3](8,14) = -125.0/18432.0;
-  restriction[3](8,15) = -125.0/27648.0;
-  restriction[3](8,16) = -25.0/384.0;
-  restriction[3](8,17) = 65.0/384.0;
-  restriction[3](8,18) = -65.0/3456.0;
-  restriction[3](8,19) = 25.0/3456.0;
-  restriction[3](8,20) = -25.0/256.0;
-  restriction[3](8,21) = -65.0/2304.0;
-  restriction[3](8,22) = 25.0/2304.0;
-  restriction[3](8,23) = 25.0/2304.0;
-  restriction[3](8,24) = 25.0/1536.0;
-  restriction[3](9,0) = 29375.0/10616832.0;
-  restriction[3](9,1) = 29375.0/10616832.0;
-  restriction[3](9,2) = -62875.0/10616832.0;
-  restriction[3](9,3) = -62875.0/10616832.0;
-  restriction[3](9,4) = -5875.0/1327104.0;
-  restriction[3](9,5) = -5875.0/884736.0;
-  restriction[3](9,6) = 15275.0/1327104.0;
-  restriction[3](9,7) = 32375.0/1327104.0;
-  restriction[3](9,8) = 40025.0/884736.0;
-  restriction[3](9,9) = 34625.0/1327104.0;
-  restriction[3](9,10) = 12575.0/1327104.0;
-  restriction[3](9,11) = 12575.0/884736.0;
-  restriction[3](9,12) = -32695.0/1327104.0;
-  restriction[3](9,13) = 32375.0/1327104.0;
-  restriction[3](9,14) = 40025.0/884736.0;
-  restriction[3](9,15) = 34625.0/1327104.0;
-  restriction[3](9,16) = -6475.0/165888.0;
-  restriction[3](9,17) = 16835.0/165888.0;
-  restriction[3](9,18) = 18005.0/165888.0;
-  restriction[3](9,19) = -6925.0/165888.0;
-  restriction[3](9,20) = -6475.0/110592.0;
-  restriction[3](9,21) = 20813.0/110592.0;
-  restriction[3](9,22) = -6925.0/110592.0;
-  restriction[3](9,23) = -8005.0/110592.0;
-  restriction[3](9,24) = -8005.0/73728.0;
-  restriction[3](10,0) = -12575.0/10616832.0;
-  restriction[3](10,1) = 5875.0/10616832.0;
-  restriction[3](10,2) = 245575.0/10616832.0;
-  restriction[3](10,3) = -525635.0/10616832.0;
-  restriction[3](10,4) = 6925.0/1327104.0;
-  restriction[3](10,5) = 8005.0/884736.0;
-  restriction[3](10,6) = 6475.0/1327104.0;
-  restriction[3](10,7) = 5875.0/1327104.0;
-  restriction[3](10,8) = -29375.0/884736.0;
-  restriction[3](10,9) = 41125.0/1327104.0;
-  restriction[3](10,10) = 289465.0/1327104.0;
-  restriction[3](10,11) = 334609.0/884736.0;
-  restriction[3](10,12) = 270655.0/1327104.0;
-  restriction[3](10,13) = -12575.0/1327104.0;
-  restriction[3](10,14) = 62875.0/884736.0;
-  restriction[3](10,15) = -88025.0/1327104.0;
-  restriction[3](10,16) = 6925.0/165888.0;
-  restriction[3](10,17) = 6475.0/165888.0;
-  restriction[3](10,18) = 45325.0/165888.0;
-  restriction[3](10,19) = 48475.0/165888.0;
-  restriction[3](10,20) = 8005.0/110592.0;
-  restriction[3](10,21) = -32375.0/110592.0;
-  restriction[3](10,22) = 56035.0/110592.0;
-  restriction[3](10,23) = -34625.0/110592.0;
-  restriction[3](10,24) = -40025.0/73728.0;
-  restriction[3](11,0) = 25.0/73728.0;
-  restriction[3](11,1) = 545.0/221184.0;
-  restriction[3](11,2) = 22781.0/221184.0;
-  restriction[3](11,3) = 1045.0/73728.0;
-  restriction[3](11,4) = -25.0/27648.0;
-  restriction[3](11,5) = -25.0/18432.0;
-  restriction[3](11,6) = 25.0/3072.0;
-  restriction[3](11,7) = 545.0/27648.0;
-  restriction[3](11,8) = -2725.0/18432.0;
-  restriction[3](11,9) = 3815.0/27648.0;
-  restriction[3](11,10) = -1045.0/27648.0;
-  restriction[3](11,11) = -1045.0/18432.0;
-  restriction[3](11,12) = 1045.0/3072.0;
-  restriction[3](11,13) = 25.0/9216.0;
-  restriction[3](11,14) = -125.0/6144.0;
-  restriction[3](11,15) = 175.0/9216.0;
-  restriction[3](11,16) = -25.0/3456.0;
-  restriction[3](11,17) = 25.0/384.0;
-  restriction[3](11,18) = 175.0/384.0;
-  restriction[3](11,19) = -175.0/3456.0;
-  restriction[3](11,20) = -25.0/2304.0;
-  restriction[3](11,21) = -125.0/256.0;
-  restriction[3](11,22) = -175.0/2304.0;
-  restriction[3](11,23) = 125.0/2304.0;
-  restriction[3](11,24) = 125.0/1536.0;
-  restriction[3](12,0) = -1375.0/10616832.0;
-  restriction[3](12,1) = 275.0/10616832.0;
-  restriction[3](12,2) = 11495.0/10616832.0;
-  restriction[3](12,3) = -57475.0/10616832.0;
-  restriction[3](12,4) = 845.0/1327104.0;
-  restriction[3](12,5) = -475.0/884736.0;
-  restriction[3](12,6) = -1525.0/1327104.0;
-  restriction[3](12,7) = 275.0/1327104.0;
-  restriction[3](12,8) = -1375.0/884736.0;
-  restriction[3](12,9) = 1925.0/1327104.0;
-  restriction[3](12,10) = 35321.0/1327104.0;
-  restriction[3](12,11) = -19855.0/884736.0;
-  restriction[3](12,12) = -63745.0/1327104.0;
-  restriction[3](12,13) = -1375.0/1327104.0;
-  restriction[3](12,14) = 6875.0/884736.0;
-  restriction[3](12,15) = -9625.0/1327104.0;
-  restriction[3](12,16) = 845.0/165888.0;
-  restriction[3](12,17) = -1525.0/165888.0;
-  restriction[3](12,18) = -10675.0/165888.0;
-  restriction[3](12,19) = 5915.0/165888.0;
-  restriction[3](12,20) = -475.0/110592.0;
-  restriction[3](12,21) = 7625.0/110592.0;
-  restriction[3](12,22) = -3325.0/110592.0;
-  restriction[3](12,23) = -4225.0/110592.0;
-  restriction[3](12,24) = 2375.0/73728.0;
-  restriction[3](13,0) = 11495.0/10616832.0;
-  restriction[3](13,1) = 275.0/10616832.0;
-  restriction[3](13,2) = -1375.0/10616832.0;
-  restriction[3](13,3) = -57475.0/10616832.0;
-  restriction[3](13,4) = 1925.0/1327104.0;
-  restriction[3](13,5) = -1375.0/884736.0;
-  restriction[3](13,6) = 275.0/1327104.0;
-  restriction[3](13,7) = -1525.0/1327104.0;
-  restriction[3](13,8) = -475.0/884736.0;
-  restriction[3](13,9) = 845.0/1327104.0;
-  restriction[3](13,10) = -9625.0/1327104.0;
-  restriction[3](13,11) = 6875.0/884736.0;
-  restriction[3](13,12) = -1375.0/1327104.0;
-  restriction[3](13,13) = -63745.0/1327104.0;
-  restriction[3](13,14) = -19855.0/884736.0;
-  restriction[3](13,15) = 35321.0/1327104.0;
-  restriction[3](13,16) = -10675.0/165888.0;
-  restriction[3](13,17) = -1525.0/165888.0;
-  restriction[3](13,18) = 845.0/165888.0;
-  restriction[3](13,19) = 5915.0/165888.0;
-  restriction[3](13,20) = 7625.0/110592.0;
-  restriction[3](13,21) = -475.0/110592.0;
-  restriction[3](13,22) = -4225.0/110592.0;
-  restriction[3](13,23) = -3325.0/110592.0;
-  restriction[3](13,24) = 2375.0/73728.0;
-  restriction[3](14,0) = 22781.0/221184.0;
-  restriction[3](14,1) = 545.0/221184.0;
-  restriction[3](14,2) = 25.0/73728.0;
-  restriction[3](14,3) = 1045.0/73728.0;
-  restriction[3](14,4) = 3815.0/27648.0;
-  restriction[3](14,5) = -2725.0/18432.0;
-  restriction[3](14,6) = 545.0/27648.0;
-  restriction[3](14,7) = 25.0/3072.0;
-  restriction[3](14,8) = -25.0/18432.0;
-  restriction[3](14,9) = -25.0/27648.0;
-  restriction[3](14,10) = 175.0/9216.0;
-  restriction[3](14,11) = -125.0/6144.0;
-  restriction[3](14,12) = 25.0/9216.0;
-  restriction[3](14,13) = 1045.0/3072.0;
-  restriction[3](14,14) = -1045.0/18432.0;
-  restriction[3](14,15) = -1045.0/27648.0;
-  restriction[3](14,16) = 175.0/384.0;
-  restriction[3](14,17) = 25.0/384.0;
-  restriction[3](14,18) = -25.0/3456.0;
-  restriction[3](14,19) = -175.0/3456.0;
-  restriction[3](14,20) = -125.0/256.0;
-  restriction[3](14,21) = -25.0/2304.0;
-  restriction[3](14,22) = 125.0/2304.0;
-  restriction[3](14,23) = -175.0/2304.0;
-  restriction[3](14,24) = 125.0/1536.0;
-  restriction[3](15,0) = 245575.0/10616832.0;
-  restriction[3](15,1) = 5875.0/10616832.0;
-  restriction[3](15,2) = -12575.0/10616832.0;
-  restriction[3](15,3) = -525635.0/10616832.0;
-  restriction[3](15,4) = 41125.0/1327104.0;
-  restriction[3](15,5) = -29375.0/884736.0;
-  restriction[3](15,6) = 5875.0/1327104.0;
-  restriction[3](15,7) = 6475.0/1327104.0;
-  restriction[3](15,8) = 8005.0/884736.0;
-  restriction[3](15,9) = 6925.0/1327104.0;
-  restriction[3](15,10) = -88025.0/1327104.0;
-  restriction[3](15,11) = 62875.0/884736.0;
-  restriction[3](15,12) = -12575.0/1327104.0;
-  restriction[3](15,13) = 270655.0/1327104.0;
-  restriction[3](15,14) = 334609.0/884736.0;
-  restriction[3](15,15) = 289465.0/1327104.0;
-  restriction[3](15,16) = 45325.0/165888.0;
-  restriction[3](15,17) = 6475.0/165888.0;
-  restriction[3](15,18) = 6925.0/165888.0;
-  restriction[3](15,19) = 48475.0/165888.0;
-  restriction[3](15,20) = -32375.0/110592.0;
-  restriction[3](15,21) = 8005.0/110592.0;
-  restriction[3](15,22) = -34625.0/110592.0;
-  restriction[3](15,23) = 56035.0/110592.0;
-  restriction[3](15,24) = -40025.0/73728.0;
-  restriction[3](16,0) = -138325.0/1358954496.0;
-  restriction[3](16,1) = 64625.0/1358954496.0;
-  restriction[3](16,2) = -323125.0/1358954496.0;
-  restriction[3](16,3) = 691625.0/1358954496.0;
-  restriction[3](16,4) = 76175.0/169869312.0;
-  restriction[3](16,5) = 88055.0/113246208.0;
-  restriction[3](16,6) = 71225.0/169869312.0;
-  restriction[3](16,7) = -358375.0/169869312.0;
-  restriction[3](16,8) = -111625.0/113246208.0;
-  restriction[3](16,9) = 198575.0/169869312.0;
-  restriction[3](16,10) = -380875.0/169869312.0;
-  restriction[3](16,11) = -440275.0/113246208.0;
-  restriction[3](16,12) = -356125.0/169869312.0;
-  restriction[3](16,13) = 767075.0/169869312.0;
-  restriction[3](16,14) = 238925.0/113246208.0;
-  restriction[3](16,15) = -425035.0/169869312.0;
-  restriction[3](16,16) = -422425.0/21233664.0;
-  restriction[3](16,17) = -394975.0/21233664.0;
-  restriction[3](16,18) = 218855.0/21233664.0;
-  restriction[3](16,19) = 234065.0/21233664.0;
-  restriction[3](16,20) = -488305.0/14155776.0;
-  restriction[3](16,21) = -123025.0/14155776.0;
-  restriction[3](16,22) = 270569.0/14155776.0;
-  restriction[3](16,23) = -131575.0/14155776.0;
-  restriction[3](16,24) = -152095.0/9437184.0;
-  restriction[3](17,0) = -15125.0/1358954496.0;
-  restriction[3](17,1) = 3025.0/1358954496.0;
-  restriction[3](17,2) = -15125.0/1358954496.0;
-  restriction[3](17,3) = 75625.0/1358954496.0;
-  restriction[3](17,4) = 9295.0/169869312.0;
-  restriction[3](17,5) = -5225.0/113246208.0;
-  restriction[3](17,6) = -16775.0/169869312.0;
-  restriction[3](17,7) = -16775.0/169869312.0;
-  restriction[3](17,8) = -5225.0/113246208.0;
-  restriction[3](17,9) = 9295.0/169869312.0;
-  restriction[3](17,10) = -46475.0/169869312.0;
-  restriction[3](17,11) = 26125.0/113246208.0;
-  restriction[3](17,12) = 83875.0/169869312.0;
-  restriction[3](17,13) = 83875.0/169869312.0;
-  restriction[3](17,14) = 26125.0/113246208.0;
-  restriction[3](17,15) = -46475.0/169869312.0;
-  restriction[3](17,16) = -51545.0/21233664.0;
-  restriction[3](17,17) = 93025.0/21233664.0;
-  restriction[3](17,18) = -51545.0/21233664.0;
-  restriction[3](17,19) = 28561.0/21233664.0;
-  restriction[3](17,20) = 28975.0/14155776.0;
-  restriction[3](17,21) = 28975.0/14155776.0;
-  restriction[3](17,22) = -16055.0/14155776.0;
-  restriction[3](17,23) = -16055.0/14155776.0;
-  restriction[3](17,24) = 9025.0/9437184.0;
-  restriction[3](18,0) = -323125.0/1358954496.0;
-  restriction[3](18,1) = 64625.0/1358954496.0;
-  restriction[3](18,2) = -138325.0/1358954496.0;
-  restriction[3](18,3) = 691625.0/1358954496.0;
-  restriction[3](18,4) = 198575.0/169869312.0;
-  restriction[3](18,5) = -111625.0/113246208.0;
-  restriction[3](18,6) = -358375.0/169869312.0;
-  restriction[3](18,7) = 71225.0/169869312.0;
-  restriction[3](18,8) = 88055.0/113246208.0;
-  restriction[3](18,9) = 76175.0/169869312.0;
-  restriction[3](18,10) = -425035.0/169869312.0;
-  restriction[3](18,11) = 238925.0/113246208.0;
-  restriction[3](18,12) = 767075.0/169869312.0;
-  restriction[3](18,13) = -356125.0/169869312.0;
-  restriction[3](18,14) = -440275.0/113246208.0;
-  restriction[3](18,15) = -380875.0/169869312.0;
-  restriction[3](18,16) = 218855.0/21233664.0;
-  restriction[3](18,17) = -394975.0/21233664.0;
-  restriction[3](18,18) = -422425.0/21233664.0;
-  restriction[3](18,19) = 234065.0/21233664.0;
-  restriction[3](18,20) = -123025.0/14155776.0;
-  restriction[3](18,21) = -488305.0/14155776.0;
-  restriction[3](18,22) = -131575.0/14155776.0;
-  restriction[3](18,23) = 270569.0/14155776.0;
-  restriction[3](18,24) = -152095.0/9437184.0;
-  restriction[3](19,0) = -2955125.0/1358954496.0;
-  restriction[3](19,1) = 1380625.0/1358954496.0;
-  restriction[3](19,2) = -2955125.0/1358954496.0;
-  restriction[3](19,3) = 6325225.0/1358954496.0;
-  restriction[3](19,4) = 1627375.0/169869312.0;
-  restriction[3](19,5) = 1881175.0/113246208.0;
-  restriction[3](19,6) = 1521625.0/169869312.0;
-  restriction[3](19,7) = 1521625.0/169869312.0;
-  restriction[3](19,8) = 1881175.0/113246208.0;
-  restriction[3](19,9) = 1627375.0/169869312.0;
-  restriction[3](19,10) = -3483275.0/169869312.0;
-  restriction[3](19,11) = -4026515.0/113246208.0;
-  restriction[3](19,12) = -3256925.0/169869312.0;
-  restriction[3](19,13) = -3256925.0/169869312.0;
-  restriction[3](19,14) = -4026515.0/113246208.0;
-  restriction[3](19,15) = -3483275.0/169869312.0;
-  restriction[3](19,16) = 1793575.0/21233664.0;
-  restriction[3](19,17) = 1677025.0/21233664.0;
-  restriction[3](19,18) = 1793575.0/21233664.0;
-  restriction[3](19,19) = 1918225.0/21233664.0;
-  restriction[3](19,20) = 2073295.0/14155776.0;
-  restriction[3](19,21) = 2073295.0/14155776.0;
-  restriction[3](19,22) = 2217385.0/14155776.0;
-  restriction[3](19,23) = 2217385.0/14155776.0;
-  restriction[3](19,24) = 2563201.0/9437184.0;
-  restriction[3](20,0) = 275.0/9437184.0;
-  restriction[3](20,1) = 5995.0/28311552.0;
-  restriction[3](20,2) = -29975.0/28311552.0;
-  restriction[3](20,3) = -1375.0/9437184.0;
-  restriction[3](20,4) = -275.0/3538944.0;
-  restriction[3](20,5) = -275.0/2359296.0;
-  restriction[3](20,6) = 275.0/393216.0;
-  restriction[3](20,7) = -33245.0/3538944.0;
-  restriction[3](20,8) = -10355.0/2359296.0;
-  restriction[3](20,9) = 18421.0/3538944.0;
-  restriction[3](20,10) = 1375.0/3538944.0;
-  restriction[3](20,11) = 1375.0/2359296.0;
-  restriction[3](20,12) = -1375.0/393216.0;
-  restriction[3](20,13) = -1525.0/1179648.0;
-  restriction[3](20,14) = -475.0/786432.0;
-  restriction[3](20,15) = 845.0/1179648.0;
-  restriction[3](20,16) = 1525.0/442368.0;
-  restriction[3](20,17) = -1525.0/49152.0;
-  restriction[3](20,18) = 845.0/49152.0;
-  restriction[3](20,19) = -845.0/442368.0;
-  restriction[3](20,20) = 1525.0/294912.0;
-  restriction[3](20,21) = -475.0/32768.0;
-  restriction[3](20,22) = -845.0/294912.0;
-  restriction[3](20,23) = 475.0/294912.0;
-  restriction[3](20,24) = 475.0/196608.0;
-  restriction[3](21,0) = -29975.0/28311552.0;
-  restriction[3](21,1) = 5995.0/28311552.0;
-  restriction[3](21,2) = 275.0/9437184.0;
-  restriction[3](21,3) = -1375.0/9437184.0;
-  restriction[3](21,4) = 18421.0/3538944.0;
-  restriction[3](21,5) = -10355.0/2359296.0;
-  restriction[3](21,6) = -33245.0/3538944.0;
-  restriction[3](21,7) = 275.0/393216.0;
-  restriction[3](21,8) = -275.0/2359296.0;
-  restriction[3](21,9) = -275.0/3538944.0;
-  restriction[3](21,10) = 845.0/1179648.0;
-  restriction[3](21,11) = -475.0/786432.0;
-  restriction[3](21,12) = -1525.0/1179648.0;
-  restriction[3](21,13) = -1375.0/393216.0;
-  restriction[3](21,14) = 1375.0/2359296.0;
-  restriction[3](21,15) = 1375.0/3538944.0;
-  restriction[3](21,16) = 845.0/49152.0;
-  restriction[3](21,17) = -1525.0/49152.0;
-  restriction[3](21,18) = 1525.0/442368.0;
-  restriction[3](21,19) = -845.0/442368.0;
-  restriction[3](21,20) = -475.0/32768.0;
-  restriction[3](21,21) = 1525.0/294912.0;
-  restriction[3](21,22) = 475.0/294912.0;
-  restriction[3](21,23) = -845.0/294912.0;
-  restriction[3](21,24) = 475.0/196608.0;
-  restriction[3](22,0) = 5875.0/9437184.0;
-  restriction[3](22,1) = 128075.0/28311552.0;
-  restriction[3](22,2) = -274135.0/28311552.0;
-  restriction[3](22,3) = -12575.0/9437184.0;
-  restriction[3](22,4) = -5875.0/3538944.0;
-  restriction[3](22,5) = -5875.0/2359296.0;
-  restriction[3](22,6) = 5875.0/393216.0;
-  restriction[3](22,7) = 141155.0/3538944.0;
-  restriction[3](22,8) = 174509.0/2359296.0;
-  restriction[3](22,9) = 150965.0/3538944.0;
-  restriction[3](22,10) = 12575.0/3538944.0;
-  restriction[3](22,11) = 12575.0/2359296.0;
-  restriction[3](22,12) = -12575.0/393216.0;
-  restriction[3](22,13) = 6475.0/1179648.0;
-  restriction[3](22,14) = 8005.0/786432.0;
-  restriction[3](22,15) = 6925.0/1179648.0;
-  restriction[3](22,16) = -6475.0/442368.0;
-  restriction[3](22,17) = 6475.0/49152.0;
-  restriction[3](22,18) = 6925.0/49152.0;
-  restriction[3](22,19) = -6925.0/442368.0;
-  restriction[3](22,20) = -6475.0/294912.0;
-  restriction[3](22,21) = 8005.0/32768.0;
-  restriction[3](22,22) = -6925.0/294912.0;
-  restriction[3](22,23) = -8005.0/294912.0;
-  restriction[3](22,24) = -8005.0/196608.0;
-  restriction[3](23,0) = -274135.0/28311552.0;
-  restriction[3](23,1) = 128075.0/28311552.0;
-  restriction[3](23,2) = 5875.0/9437184.0;
-  restriction[3](23,3) = -12575.0/9437184.0;
-  restriction[3](23,4) = 150965.0/3538944.0;
-  restriction[3](23,5) = 174509.0/2359296.0;
-  restriction[3](23,6) = 141155.0/3538944.0;
-  restriction[3](23,7) = 5875.0/393216.0;
-  restriction[3](23,8) = -5875.0/2359296.0;
-  restriction[3](23,9) = -5875.0/3538944.0;
-  restriction[3](23,10) = 6925.0/1179648.0;
-  restriction[3](23,11) = 8005.0/786432.0;
-  restriction[3](23,12) = 6475.0/1179648.0;
-  restriction[3](23,13) = -12575.0/393216.0;
-  restriction[3](23,14) = 12575.0/2359296.0;
-  restriction[3](23,15) = 12575.0/3538944.0;
-  restriction[3](23,16) = 6925.0/49152.0;
-  restriction[3](23,17) = 6475.0/49152.0;
-  restriction[3](23,18) = -6475.0/442368.0;
-  restriction[3](23,19) = -6925.0/442368.0;
-  restriction[3](23,20) = 8005.0/32768.0;
-  restriction[3](23,21) = -6475.0/294912.0;
-  restriction[3](23,22) = -8005.0/294912.0;
-  restriction[3](23,23) = -6925.0/294912.0;
-  restriction[3](23,24) = -8005.0/196608.0;
-  restriction[3](24,0) = 545.0/196608.0;
-  restriction[3](24,1) = 11881.0/589824.0;
-  restriction[3](24,2) = 545.0/196608.0;
-  restriction[3](24,3) = 25.0/65536.0;
-  restriction[3](24,4) = -545.0/73728.0;
-  restriction[3](24,5) = -545.0/49152.0;
-  restriction[3](24,6) = 545.0/8192.0;
-  restriction[3](24,7) = 545.0/8192.0;
-  restriction[3](24,8) = -545.0/49152.0;
-  restriction[3](24,9) = -545.0/73728.0;
-  restriction[3](24,10) = -25.0/24576.0;
-  restriction[3](24,11) = -25.0/16384.0;
-  restriction[3](24,12) = 75.0/8192.0;
-  restriction[3](24,13) = 75.0/8192.0;
-  restriction[3](24,14) = -25.0/16384.0;
-  restriction[3](24,15) = -25.0/24576.0;
-  restriction[3](24,16) = -25.0/1024.0;
-  restriction[3](24,17) = 225.0/1024.0;
-  restriction[3](24,18) = -25.0/1024.0;
-  restriction[3](24,19) = 25.0/9216.0;
-  restriction[3](24,20) = -75.0/2048.0;
-  restriction[3](24,21) = -75.0/2048.0;
-  restriction[3](24,22) = 25.0/6144.0;
-  restriction[3](24,23) = 25.0/6144.0;
-  restriction[3](24,24) = 25.0/4096.0;
-#endif
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-
-template<>
-FEDG_Q1<3>::FEDG_Q1():
-               FEQ1<3>(1)
-{
-                                  // Overwrite the
-                                  // restriction matrices to change
-                                  // them from a point interpolation
-                                  // to a projection on the reference
-                                  // square.
-  for (unsigned int child=0;
-       child<GeometryInfo<3>::children_per_cell; ++ child)
-    restriction[child].clear();
-  
-  restriction[0](0,0) = 27.0/64.0;
-  restriction[0](0,1) = 9.0/32.0;
-  restriction[0](0,2) = 3.0/16.0;
-  restriction[0](0,3) = 9.0/32.0;
-  restriction[0](0,4) = 9.0/32.0;
-  restriction[0](0,5) = 3.0/16.0;
-  restriction[0](0,6) = 1.0/8.0;
-  restriction[0](0,7) = 3.0/16.0;
-  restriction[0](1,0) = -9.0/64.0;
-  restriction[0](1,3) = -3.0/32.0;
-  restriction[0](1,4) = -3.0/32.0;
-  restriction[0](1,7) = -1.0/16.0;
-  restriction[0](2,0) = 3.0/64.0;
-  restriction[0](2,4) = 1.0/32.0;
-  restriction[0](3,0) = -9.0/64.0;
-  restriction[0](3,1) = -3.0/32.0;
-  restriction[0](3,4) = -3.0/32.0;
-  restriction[0](3,5) = -1.0/16.0;
-  restriction[0](4,0) = -9.0/64.0;
-  restriction[0](4,1) = -3.0/32.0;
-  restriction[0](4,2) = -1.0/16.0;
-  restriction[0](4,3) = -3.0/32.0;
-  restriction[0](5,0) = 3.0/64.0;
-  restriction[0](5,3) = 1.0/32.0;
-  restriction[0](6,0) = -1.0/64.0;
-  restriction[0](7,0) = 3.0/64.0;
-  restriction[0](7,1) = 1.0/32.0;
-  restriction[1](0,1) = -9.0/64.0;
-  restriction[1](0,2) = -3.0/32.0;
-  restriction[1](0,5) = -3.0/32.0;
-  restriction[1](0,6) = -1.0/16.0;
-  restriction[1](1,0) = 9.0/32.0;
-  restriction[1](1,1) = 27.0/64.0;
-  restriction[1](1,2) = 9.0/32.0;
-  restriction[1](1,3) = 3.0/16.0;
-  restriction[1](1,4) = 3.0/16.0;
-  restriction[1](1,5) = 9.0/32.0;
-  restriction[1](1,6) = 3.0/16.0;
-  restriction[1](1,7) = 1.0/8.0;
-  restriction[1](2,0) = -3.0/32.0;
-  restriction[1](2,1) = -9.0/64.0;
-  restriction[1](2,4) = -1.0/16.0;
-  restriction[1](2,5) = -3.0/32.0;
-  restriction[1](3,1) = 3.0/64.0;
-  restriction[1](3,5) = 1.0/32.0;
-  restriction[1](4,1) = 3.0/64.0;
-  restriction[1](4,2) = 1.0/32.0;
-  restriction[1](5,0) = -3.0/32.0;
-  restriction[1](5,1) = -9.0/64.0;
-  restriction[1](5,2) = -3.0/32.0;
-  restriction[1](5,3) = -1.0/16.0;
-  restriction[1](6,0) = 1.0/32.0;
-  restriction[1](6,1) = 3.0/64.0;
-  restriction[1](7,1) = -1.0/64.0;
-  restriction[2](0,2) = 3.0/64.0;
-  restriction[2](0,6) = 1.0/32.0;
-  restriction[2](1,2) = -9.0/64.0;
-  restriction[2](1,3) = -3.0/32.0;
-  restriction[2](1,6) = -3.0/32.0;
-  restriction[2](1,7) = -1.0/16.0;
-  restriction[2](2,0) = 3.0/16.0;
-  restriction[2](2,1) = 9.0/32.0;
-  restriction[2](2,2) = 27.0/64.0;
-  restriction[2](2,3) = 9.0/32.0;
-  restriction[2](2,4) = 1.0/8.0;
-  restriction[2](2,5) = 3.0/16.0;
-  restriction[2](2,6) = 9.0/32.0;
-  restriction[2](2,7) = 3.0/16.0;
-  restriction[2](3,1) = -3.0/32.0;
-  restriction[2](3,2) = -9.0/64.0;
-  restriction[2](3,5) = -1.0/16.0;
-  restriction[2](3,6) = -3.0/32.0;
-  restriction[2](4,2) = -1.0/64.0;
-  restriction[2](5,2) = 3.0/64.0;
-  restriction[2](5,3) = 1.0/32.0;
-  restriction[2](6,0) = -1.0/16.0;
-  restriction[2](6,1) = -3.0/32.0;
-  restriction[2](6,2) = -9.0/64.0;
-  restriction[2](6,3) = -3.0/32.0;
-  restriction[2](7,1) = 1.0/32.0;
-  restriction[2](7,2) = 3.0/64.0;
-  restriction[3](0,2) = -3.0/32.0;
-  restriction[3](0,3) = -9.0/64.0;
-  restriction[3](0,6) = -1.0/16.0;
-  restriction[3](0,7) = -3.0/32.0;
-  restriction[3](1,3) = 3.0/64.0;
-  restriction[3](1,7) = 1.0/32.0;
-  restriction[3](2,0) = -3.0/32.0;
-  restriction[3](2,3) = -9.0/64.0;
-  restriction[3](2,4) = -1.0/16.0;
-  restriction[3](2,7) = -3.0/32.0;
-  restriction[3](3,0) = 9.0/32.0;
-  restriction[3](3,1) = 3.0/16.0;
-  restriction[3](3,2) = 9.0/32.0;
-  restriction[3](3,3) = 27.0/64.0;
-  restriction[3](3,4) = 3.0/16.0;
-  restriction[3](3,5) = 1.0/8.0;
-  restriction[3](3,6) = 3.0/16.0;
-  restriction[3](3,7) = 9.0/32.0;
-  restriction[3](4,2) = 1.0/32.0;
-  restriction[3](4,3) = 3.0/64.0;
-  restriction[3](5,3) = -1.0/64.0;
-  restriction[3](6,0) = 1.0/32.0;
-  restriction[3](6,3) = 3.0/64.0;
-  restriction[3](7,0) = -3.0/32.0;
-  restriction[3](7,1) = -1.0/16.0;
-  restriction[3](7,2) = -3.0/32.0;
-  restriction[3](7,3) = -9.0/64.0;
-  restriction[4](0,4) = -9.0/64.0;
-  restriction[4](0,5) = -3.0/32.0;
-  restriction[4](0,6) = -1.0/16.0;
-  restriction[4](0,7) = -3.0/32.0;
-  restriction[4](1,4) = 3.0/64.0;
-  restriction[4](1,7) = 1.0/32.0;
-  restriction[4](2,4) = -1.0/64.0;
-  restriction[4](3,4) = 3.0/64.0;
-  restriction[4](3,5) = 1.0/32.0;
-  restriction[4](4,0) = 9.0/32.0;
-  restriction[4](4,1) = 3.0/16.0;
-  restriction[4](4,2) = 1.0/8.0;
-  restriction[4](4,3) = 3.0/16.0;
-  restriction[4](4,4) = 27.0/64.0;
-  restriction[4](4,5) = 9.0/32.0;
-  restriction[4](4,6) = 3.0/16.0;
-  restriction[4](4,7) = 9.0/32.0;
-  restriction[4](5,0) = -3.0/32.0;
-  restriction[4](5,3) = -1.0/16.0;
-  restriction[4](5,4) = -9.0/64.0;
-  restriction[4](5,7) = -3.0/32.0;
-  restriction[4](6,0) = 1.0/32.0;
-  restriction[4](6,4) = 3.0/64.0;
-  restriction[4](7,0) = -3.0/32.0;
-  restriction[4](7,1) = -1.0/16.0;
-  restriction[4](7,4) = -9.0/64.0;
-  restriction[4](7,5) = -3.0/32.0;
-  restriction[5](0,5) = 3.0/64.0;
-  restriction[5](0,6) = 1.0/32.0;
-  restriction[5](1,4) = -3.0/32.0;
-  restriction[5](1,5) = -9.0/64.0;
-  restriction[5](1,6) = -3.0/32.0;
-  restriction[5](1,7) = -1.0/16.0;
-  restriction[5](2,4) = 1.0/32.0;
-  restriction[5](2,5) = 3.0/64.0;
-  restriction[5](3,5) = -1.0/64.0;
-  restriction[5](4,1) = -3.0/32.0;
-  restriction[5](4,2) = -1.0/16.0;
-  restriction[5](4,5) = -9.0/64.0;
-  restriction[5](4,6) = -3.0/32.0;
-  restriction[5](5,0) = 3.0/16.0;
-  restriction[5](5,1) = 9.0/32.0;
-  restriction[5](5,2) = 3.0/16.0;
-  restriction[5](5,3) = 1.0/8.0;
-  restriction[5](5,4) = 9.0/32.0;
-  restriction[5](5,5) = 27.0/64.0;
-  restriction[5](5,6) = 9.0/32.0;
-  restriction[5](5,7) = 3.0/16.0;
-  restriction[5](6,0) = -1.0/16.0;
-  restriction[5](6,1) = -3.0/32.0;
-  restriction[5](6,4) = -3.0/32.0;
-  restriction[5](6,5) = -9.0/64.0;
-  restriction[5](7,1) = 1.0/32.0;
-  restriction[5](7,5) = 3.0/64.0;
-  restriction[6](0,6) = -1.0/64.0;
-  restriction[6](1,6) = 3.0/64.0;
-  restriction[6](1,7) = 1.0/32.0;
-  restriction[6](2,4) = -1.0/16.0;
-  restriction[6](2,5) = -3.0/32.0;
-  restriction[6](2,6) = -9.0/64.0;
-  restriction[6](2,7) = -3.0/32.0;
-  restriction[6](3,5) = 1.0/32.0;
-  restriction[6](3,6) = 3.0/64.0;
-  restriction[6](4,2) = 1.0/32.0;
-  restriction[6](4,6) = 3.0/64.0;
-  restriction[6](5,2) = -3.0/32.0;
-  restriction[6](5,3) = -1.0/16.0;
-  restriction[6](5,6) = -9.0/64.0;
-  restriction[6](5,7) = -3.0/32.0;
-  restriction[6](6,0) = 1.0/8.0;
-  restriction[6](6,1) = 3.0/16.0;
-  restriction[6](6,2) = 9.0/32.0;
-  restriction[6](6,3) = 3.0/16.0;
-  restriction[6](6,4) = 3.0/16.0;
-  restriction[6](6,5) = 9.0/32.0;
-  restriction[6](6,6) = 27.0/64.0;
-  restriction[6](6,7) = 9.0/32.0;
-  restriction[6](7,1) = -1.0/16.0;
-  restriction[6](7,2) = -3.0/32.0;
-  restriction[6](7,5) = -3.0/32.0;
-  restriction[6](7,6) = -9.0/64.0;
-  restriction[7](0,6) = 1.0/32.0;
-  restriction[7](0,7) = 3.0/64.0;
-  restriction[7](1,7) = -1.0/64.0;
-  restriction[7](2,4) = 1.0/32.0;
-  restriction[7](2,7) = 3.0/64.0;
-  restriction[7](3,4) = -3.0/32.0;
-  restriction[7](3,5) = -1.0/16.0;
-  restriction[7](3,6) = -3.0/32.0;
-  restriction[7](3,7) = -9.0/64.0;
-  restriction[7](4,2) = -1.0/16.0;
-  restriction[7](4,3) = -3.0/32.0;
-  restriction[7](4,6) = -3.0/32.0;
-  restriction[7](4,7) = -9.0/64.0;
-  restriction[7](5,3) = 1.0/32.0;
-  restriction[7](5,7) = 3.0/64.0;
-  restriction[7](6,0) = -1.0/16.0;
-  restriction[7](6,3) = -3.0/32.0;
-  restriction[7](6,4) = -3.0/32.0;
-  restriction[7](6,7) = -9.0/64.0;
-  restriction[7](7,0) = 3.0/16.0;
-  restriction[7](7,1) = 1.0/8.0;
-  restriction[7](7,2) = 3.0/16.0;
-  restriction[7](7,3) = 9.0/32.0;
-  restriction[7](7,4) = 9.0/32.0;
-  restriction[7](7,5) = 3.0/16.0;
-  restriction[7](7,6) = 9.0/32.0;
-  restriction[7](7,7) = 27.0/64.0;
-};
-
-
-template<>
-FEDG_Q2<3>::FEDG_Q2():
-               FEQ2<3>(1)
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template<>
-FEDG_Q3<3>::FEDG_Q3():
-               FEQ3<3>(1)
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-
-template<>
-FEDG_Q4<3>::FEDG_Q4():
-               FEQ4<3>(1)
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-#endif// deal_II_dimension == 3
-
-
-
-template <int dim>
-void
-FEDG_Q1<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == 0),
-         FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),0));
-};
-
-
-
-template <int dim>
-void
-FEDG_Q2<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == 0),
-         FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),0));
-};
-
-
-
-template <int dim>
-void
-FEDG_Q3<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == 0),
-         FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),0));
-};
-
-
-
-template <int dim>
-void
-FEDG_Q4<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == 0),
-         FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),0));
-};
-
-
-// explicit instantiations
-template class FEDG_Q1<deal_II_dimension>;
-template class FEDG_Q2<deal_II_dimension>;
-template class FEDG_Q3<deal_II_dimension>;
-template class FEDG_Q4<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.dg.constant.cc b/deal.II/deal.II/source/fe/fe_lib.dg.constant.cc
deleted file mode 100644 (file)
index dd2484a..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-//----------------------------  fe_lib.dg.constant.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.dg.constant.cc  ---------------------------
-
-
-#include <fe/fe_lib.dg.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-
-template <int dim>
-FEDG_Q0<dim>::FEDG_Q0 () :
-               FEQ1Mapping<dim> (0, 
-                                 (dim==1 ? 1 : 0),
-                                 (dim==2 ? 1 : 0),
-                                 (dim==3 ? 1 : 0),
-                                 1,
-                                 std::vector<bool> (1, true))
-{
-  for (unsigned int i=0; i<GeometryInfo<dim>::children_per_cell; ++i)
-    { 
-      restriction[i](0,0) = 1./GeometryInfo<dim>::children_per_cell;
-      prolongation[i](0,0) = 1.0;
-    }
-};
-
-
-#if deal_II_dimension == 1
-
-
-template <>
-void
-FEDG_Q0<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                    std::vector<Point<1> >  &) const
-{
-  Assert (false, ExcInternalError());
-};
-
-#endif
-
-
-
-template <int dim>
-inline
-double
-FEDG_Q0<dim>::shape_value (const unsigned int i,
-                          const Point<dim>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return 1.;
-};
-
-
-
-template <int dim>
-inline
-Tensor<1,dim>
-FEDG_Q0<dim>::shape_grad (const unsigned int i,
-                         const Point<dim>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return Tensor<1,dim> ();
-};
-
-
-
-template <int dim>
-inline
-Tensor<2,dim>
-FEDG_Q0<dim>::shape_grad_grad (const unsigned int i,
-                              const Point<dim> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  return Tensor<2,dim>();
-};
-
-
-
-template <int dim>
-void FEDG_Q0<dim>::get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                         FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<dim>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                        dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<dim>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                        dofs_per_cell));
-
-  local_mass_matrix(0,0) = cell->measure();
-};
-
-
-
-template <int dim>
-void
-FEDG_Q0<dim>::get_unit_support_points (typename std::vector<Point<dim> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<dim>::ExcWrongFieldDimension (unit_points.size(), dofs_per_cell));
-  for (unsigned int d=0; d<dim; ++d)
-    unit_points[0](d) = 0.5;
-};
-
-
-
-template <int dim>
-void
-FEDG_Q0<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                 typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(), dofs_per_cell));
-  
-  support_points[0] = cell->center();
-};
-
-
-
-template <int dim>
-void
-FEDG_Q0<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == 0),
-         FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),0));
-};
-
-
-// explicit instantiations
-
-template class FEDG_Q0<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.dgp1.cc b/deal.II/deal.II/source/fe/fe_lib.dgp1.cc
deleted file mode 100644 (file)
index 3dc7209..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-//----------------------------  $RCSFile$  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  $RCSFile$  ---------------------------
-
-
-#include <fe/fe_lib.dgp.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-
-// declare explicit specializations before use:
-template <> void FEDG_P1<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEDG_P1<1>::FEDG_P1 () :
-               FEQ1Mapping<1> (0, 2, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P1<1>::initialize_matrices ()
-{
-                                  // for restriction and prolongation matrices:
-                                  // note that we do not add up all the
-                                  // contributions since then we would get
-                                  // two summands per vertex in 1d (four
-                                  // in 2d, etc), but only one per line dof.
-                                  // We could accomplish for that by dividing
-                                  // the vertex dof values by 2 (4, etc), but
-                                  // would get into trouble at the boundary
-                                  // of the domain since there only one
-                                  // cell contributes to a vertex. Rather,
-                                  // we do not add up the contributions but
-                                  // set them right into the matrices!
-  restriction[0](0,0) = 1.0;
-  restriction[1](1,1) = 1.0;
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = 1./2.;
-  prolongation[0](1,1) = 1./2.;
-
-  prolongation[1](0,0) = 1./2.;
-  prolongation[1](0,1) = 1./2.;
-  prolongation[1](1,1) = 1.0;
-};
-
-
-template <>
-double
-FEDG_P1<1>::shape_value(const unsigned int i,
-                       const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.-p(0);
-      case 1: return p(0);
-    }
-  return 0.;
-}
-
-
-template <>
-inline
-Tensor<1,1>
-FEDG_P1<1>::shape_grad(const unsigned int i,
-                      const Point<1>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(-1.);
-      case 1: return Point<1>(1.);
-    }
-  return Point<1>();
-};
-
-
-template <>
-inline
-Tensor<2,1>
-FEDG_P1<1>::shape_grad_grad (const unsigned int i,
-                            const Point<1> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // second derivatives on the unit cell
-                                  // are always zero
-  return Tensor<2,1>();
-};
-
-
-template <>
-void FEDG_P1<1>::get_unit_support_points (std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_unit_support_points (support_points);
-};
-
-
-template <>
-void FEDG_P1<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                    std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-template <>
-void FEDG_P1<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                         std::vector<Point<1> >  &) const
-{
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEDG_P1<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cell,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  const double h = cell->vertex(1)(0) - cell->vertex(0)(0);
-  Assert (h>0, ExcJacobiDeterminantHasWrongSign());
-
-  local_mass_matrix(0,0) = local_mass_matrix(1,1) = 1./3.*h;
-  local_mass_matrix(0,1) = local_mass_matrix(1,0) = 1./6.*h;
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEDG_P1<2>::FEDG_P1 () :
-               FEQ1Mapping<2> (0, 0, 3, 0, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P1<2>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-inline
-double
-FEDG_P1<2>::shape_value (const unsigned int i,
-                        const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1;
-      case 1: return p(0);
-      case 2: return p(1);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,2>
-FEDG_P1<2>::shape_grad (const unsigned int i,
-                       const Point<2>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2> (0,0);
-      case 1: return Point<2> (1,0);
-      case 2: return Point<2> (0,1);
-    }
-  return Point<2> ();
-};
-
-
-template <>
-inline
-Tensor<2,2>
-FEDG_P1<2>::shape_grad_grad (const unsigned int i,
-                            const Point<2> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return Tensor<2,2>();
-};
-
-
-template <>
-void FEDG_P1<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert(false, ExcNotImplemented ());
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-};
-
-
-template <>
-void FEDG_P1<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<2> (.5,.5);
-  unit_points[1] = Point<2> (1,0);
-  unit_points[2] = Point<2> (0,1);
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-FEDG_P1<3>::FEDG_P1 () :
-               FEQ1Mapping<3> (0, 0, 0, 4, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P1<3>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-inline
-double
-FEDG_P1<3>::shape_value (const unsigned int i,
-                        const Point<3>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.;
-      case 1: return p(0);
-      case 2: return p(1);
-      case 3: return p(2);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,3>
-FEDG_P1<3>::shape_grad (const unsigned int i,
-                       const Point<3>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<3>(0,0,0);
-      case 1: return Point<3>(1,0,0);
-      case 2: return Point<3>(0,1,0);
-      case 3: return Point<3>(0,0,1);
-    }
-  return Point<3> ();
-};
-
-
-template <>
-inline
-Tensor<2,3>
-FEDG_P1<3>::shape_grad_grad (const unsigned int i,
-                            const Point<3> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  Tensor<2,3> return_value;
-  return return_value;
-};
-
-
-template <>
-void FEDG_P1<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-  throw ExcComputationNotUseful(3);
-};
-
-
-template <>
-void FEDG_P1<3>::get_unit_support_points (std::vector<Point<3> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<3> (.5,.5,.5);
-  unit_points[1] = Point<3> (1,0,0);
-  unit_points[2] = Point<3> (0,1,0);
-  unit_points[3] = Point<3> (0,0,1);
-};
-
-
-#endif
-
-
-template <int dim>
-void
-FEDG_P1<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                 typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  dofs_per_cell));
-  
-  for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
-    support_points[vertex] = cell->vertex(vertex);
-};
-
-
-template <int dim>
-void
-FEDG_P1<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == dofs_per_face) &&
-         (support_points.size() == GeometryInfo<dim>::vertices_per_face),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  GeometryInfo<dim>::vertices_per_face));
-
-  for (unsigned int vertex=0; vertex<dofs_per_face; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-};
-
-
-// explicit instantiations
-
-template class FEDG_P1<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.dgp2.cc b/deal.II/deal.II/source/fe/fe_lib.dgp2.cc
deleted file mode 100644 (file)
index 0a88bb0..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-//----------------------------  $RCSFile$  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  $RCSFile$  ---------------------------
-
-
-#include <fe/fe_lib.dgp.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-
-// declare explicit specializations before use:
-template <> void FEDG_P2<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEDG_P2<1>::FEDG_P2 () :
-               FEQ1Mapping<1> (0, 3, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P2<1>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-double
-FEDG_P2<1>::shape_value(const unsigned int i,
-                       const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.;
-      case 1: return p(0);
-      case 2: return p(0)*p(0);
-    }
-  return 0.;
-}
-
-
-template <>
-inline
-Tensor<1,1>
-FEDG_P2<1>::shape_grad(const unsigned int i,
-                      const Point<1>&p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(-1.);
-      case 1: return Point<1>(1.);
-      case 2: return Point<1>(2.*p(0));
-           
-    }
-  return Point<1>();
-};
-
-
-template <>
-inline
-Tensor<2,1>
-FEDG_P2<1>::shape_grad_grad (const unsigned int i,
-                            const Point<1> &) const
-{
-  Assert(false, ExcNotImplemented());
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return Tensor<2,1>();
-};
-
-
-template <>
-void FEDG_P2<1>::get_unit_support_points (std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_unit_support_points (support_points);
-};
-
-
-template <>
-void FEDG_P2<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                    std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-template <>
-void FEDG_P2<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                         std::vector<Point<1> >  &) const
-{
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEDG_P2<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert(false, ExcNotImplemented());
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEDG_P2<2>::FEDG_P2 () :
-               FEQ1Mapping<2> (0, 0, 6, 0, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P2<2>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-inline
-double
-FEDG_P2<2>::shape_value (const unsigned int i,
-                        const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1;
-      case 1: return p(0);
-      case 2: return p(1);
-      case 3: return p(0)*p(0);
-      case 4: return p(0)*p(1);
-      case 5: return p(1)*p(1);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,2>
-FEDG_P2<2>::shape_grad (const unsigned int i,
-                       const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2> (0,0);
-      case 1: return Point<2> (1,0);
-      case 2: return Point<2> (0,1);
-      case 3: return Point<2> (2*p(0),0);
-      case 4: return Point<2> (p(1),p(0));
-      case 5: return Point<2> (0,2*p(1));
-    }
-  return Point<2> ();
-};
-
-
-template <>
-inline
-Tensor<2,2>
-FEDG_P2<2>::shape_grad_grad (const unsigned int i,
-                            const Point<2> &) const
-{
-  Assert(false, ExcNotImplemented());
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return Tensor<2,2>();
-};
-
-
-template <>
-void FEDG_P2<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &,
-                                       FullMatrix<double> &) const
-{
-  Assert(false, ExcNotImplemented ());
-};
-
-
-template <>
-void FEDG_P2<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<2> (.5,.5);
-  unit_points[1] = Point<2> (1,0);
-  unit_points[2] = Point<2> (0,1);
-  unit_points[3] = Point<2> (1,0);
-  unit_points[4] = Point<2> (0,1);
-  unit_points[5] = Point<2> (1,1);
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-FEDG_P2<3>::FEDG_P2 () :
-               FEQ1Mapping<3> (0, 0, 0, 4, 1,
-                               std::vector<bool> (1, true))
-{
-  Assert(false, ExcNotImplemented ());
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P2<3>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-inline
-double
-FEDG_P2<3>::shape_value (const unsigned int i,
-                        const Point<3>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.;
-      case 1: return p(0);
-      case 2: return p(1);
-      case 3: return p(2);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,3>
-FEDG_P2<3>::shape_grad (const unsigned int i,
-                       const Point<3>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<3>(0,0,0);
-      case 1: return Point<3>(1,0,0);
-      case 2: return Point<3>(0,1,0);
-      case 3: return Point<3>(0,0,1);
-    }
-  return Point<3> ();
-};
-
-
-template <>
-inline
-Tensor<2,3>
-FEDG_P2<3>::shape_grad_grad (const unsigned int i,
-                            const Point<3> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  Tensor<2,3> return_value;
-  return return_value;
-};
-
-
-
-template <>
-void FEDG_P2<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-  throw ExcComputationNotUseful(3);
-};
-
-
-
-template <>
-void FEDG_P2<3>::get_unit_support_points (std::vector<Point<3> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<3> (.5,.5,.5);
-  unit_points[1] = Point<3> (1,0,0);
-  unit_points[2] = Point<3> (0,1,0);
-  unit_points[3] = Point<3> (0,0,1);
-};
-
-
-#endif
-
-
-template <int dim>
-void
-FEDG_P2<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                 typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  dofs_per_cell));
-  
-  for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
-    support_points[vertex] = cell->vertex(vertex);
-};
-
-
-template <int dim>
-void
-FEDG_P2<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == dofs_per_face) &&
-         (support_points.size() == GeometryInfo<dim>::vertices_per_face),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  GeometryInfo<dim>::vertices_per_face));
-
-  for (unsigned int vertex=0; vertex<dofs_per_face; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-};
-
-
-// explicit instantiations
-
-template class FEDG_P2<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.dgp3.cc b/deal.II/deal.II/source/fe/fe_lib.dgp3.cc
deleted file mode 100644 (file)
index ba31d9a..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-//----------------------------  $RCSFile$  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  $RCSFile$  ---------------------------
-
-
-#include <fe/fe_lib.dgp.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-// declare explicit specializations before use:
-template <> void FEDG_P3<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEDG_P3<1>::FEDG_P3 () :
-               FEQ1Mapping<1> (0, 4, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P3<1>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-double
-FEDG_P3<1>::shape_value(const unsigned int i,
-                       const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.;
-      case 1: return p(0);
-      case 2: return p(0)*p(0);
-      case 3: return p(0)*p(0)*p(0);
-    }
-  return 0.;
-}
-
-
-template <>
-inline
-Tensor<1,1>
-FEDG_P3<1>::shape_grad(const unsigned int i,
-                      const Point<1>&p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(-1.);
-      case 1: return Point<1>(1.);
-      case 2: return Point<1>(2.*p(0));
-      case 3: return Point<1>(3.*p(0)*p(0));
-           
-    }
-  return Point<1>();
-};
-
-
-template <>
-inline
-Tensor<2,1>
-FEDG_P3<1>::shape_grad_grad (const unsigned int i,
-                            const Point<1> &) const
-{
-  Assert(false, ExcNotImplemented());
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return Tensor<2,1>();
-};
-
-
-template <>
-void FEDG_P3<1>::get_unit_support_points (std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_unit_support_points (support_points);
-};
-
-
-template <>
-void FEDG_P3<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                    std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-template <>
-void FEDG_P3<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                         std::vector<Point<1> >  &) const
-{
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEDG_P3<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &/*cell*/,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert(false, ExcNotImplemented());
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEDG_P3<2>::FEDG_P3 () :
-               FEQ1Mapping<2> (0, 0, 10, 0, 1,
-                               std::vector<bool> (1, true))
-{
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P3<2>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-inline
-double
-FEDG_P3<2>::shape_value (const unsigned int i,
-                        const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1;
-      case 1: return p(0);
-      case 2: return p(1);
-      case 3: return p(0)*p(0);
-      case 4: return p(0)*p(1);
-      case 5: return p(1)*p(1);
-      case 6: return p(0)*p(0)*p(0);
-      case 7: return p(0)*p(0)*p(1);
-      case 8: return p(0)*p(1)*p(1);
-      case 9: return p(1)*p(1)*p(1);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,2>
-FEDG_P3<2>::shape_grad (const unsigned int i,
-                       const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2> (0,0);
-      case 1: return Point<2> (1,0);
-      case 2: return Point<2> (0,1);
-      case 3: return Point<2> (2*p(0),0);
-      case 4: return Point<2> (p(1),p(0));
-      case 5: return Point<2> (0,2*p(1));
-      case 6: return Point<2> (3*p(0)*p(0), 0);
-      case 7: return Point<2> (2*p(0)*p(1), p(0)*p(0));
-      case 8: return Point<2> (p(1)*p(1),   2*p(0)*p(1));
-      case 9: return Point<2> (0,           3*p(1)*p(1));
-    }
-  return Point<2> ();
-};
-
-
-template <>
-inline
-Tensor<2,2>
-FEDG_P3<2>::shape_grad_grad (const unsigned int i,
-                            const Point<2> &) const
-{
-  Assert(false, ExcNotImplemented());
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  return Tensor<2,2>();
-};
-
-
-template <>
-void FEDG_P3<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &,
-                                       FullMatrix<double> &) const
-{
-  Assert(false, ExcNotImplemented ());
-};
-
-
-template <>
-void FEDG_P3<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const
-{
-  Assert(false, ExcNotImplemented ());
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<2> (.5,.5);
-  unit_points[1] = Point<2> (1,0);
-  unit_points[2] = Point<2> (0,1);
-  unit_points[3] = Point<2> (1,0);
-  unit_points[4] = Point<2> (0,1);
-  unit_points[5] = Point<2> (1,1);
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-FEDG_P3<3>::FEDG_P3 () :
-               FEQ1Mapping<3> (0, 0, 0, 4, 1,
-                               std::vector<bool> (1, true))
-{
-  Assert(false, ExcNotImplemented ());
-//  initialize_matrices ();
-};
-
-
-template <>
-void FEDG_P3<3>::initialize_matrices ()
-{
-  Assert(false, ExcNotImplemented());
-};
-
-
-template <>
-inline
-double
-FEDG_P3<3>::shape_value (const unsigned int i,
-                        const Point<3>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.;
-      case 1: return p(0);
-      case 2: return p(1);
-      case 3: return p(2);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,3>
-FEDG_P3<3>::shape_grad (const unsigned int i,
-                       const Point<3>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<3>(0,0,0);
-      case 1: return Point<3>(1,0,0);
-      case 2: return Point<3>(0,1,0);
-      case 3: return Point<3>(0,0,1);
-    }
-  return Point<3> ();
-};
-
-
-template <>
-inline
-Tensor<2,3>
-FEDG_P3<3>::shape_grad_grad (const unsigned int i,
-                            const Point<3> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  Tensor<2,3> return_value;
-  return return_value;
-};
-
-
-template <>
-void FEDG_P3<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                                       FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-  throw ExcComputationNotUseful(3);
-};
-
-
-
-template <>
-void FEDG_P3<3>::get_unit_support_points (std::vector<Point<3> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<3> (.5,.5,.5);
-  unit_points[1] = Point<3> (1,0,0);
-  unit_points[2] = Point<3> (0,1,0);
-  unit_points[3] = Point<3> (0,0,1);
-};
-
-
-#endif
-
-
-template <int dim>
-void
-FEDG_P3<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                 typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  dofs_per_cell));
-  
-  for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
-    support_points[vertex] = cell->vertex(vertex);
-};
-
-
-template <int dim>
-void
-FEDG_P3<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                      typename std::vector<Point<dim> >  &support_points) const
-{
-  Assert ((support_points.size() == dofs_per_face) &&
-         (support_points.size() == GeometryInfo<dim>::vertices_per_face),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  GeometryInfo<dim>::vertices_per_face));
-
-  for (unsigned int vertex=0; vertex<dofs_per_face; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-};
-
-
-// explicit instantiations
-
-template class FEDG_P3<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.linear.cc b/deal.II/deal.II/source/fe/fe_lib.linear.cc
deleted file mode 100644 (file)
index fe33af2..0000000
+++ /dev/null
@@ -1,912 +0,0 @@
-//----------------------------  fe_lib.linear.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.linear.cc  ---------------------------
-
-
-#include <fe/fe_lib.lagrange.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-
-// declare explicit specializations before use:
-template <> void FEQ1<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEQ1<1>::FEQ1 () :
-               FEQ1Mapping<1> (1, 0, 0, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ1<1>::FEQ1 (const int) :
-               FEQ1Mapping<1> (0, 2, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ1<1>::initialize_matrices ()
-{
-                                  // for restriction and prolongation matrices:
-                                  // note that we do not add up all the
-                                  // contributions since then we would get
-                                  // two summands per vertex in 1d (four
-                                  // in 2d, etc), but only one per line dof.
-                                  // We could accomplish for that by dividing
-                                  // the vertex dof values by 2 (4, etc), but
-                                  // would get into trouble at the boundary
-                                  // of the domain since there only one
-                                  // cell contributes to a vertex. Rather,
-                                  // we do not add up the contributions but
-                                  // set them right into the matrices!
-  restriction[0](0,0) = 1.0;
-  restriction[1](1,1) = 1.0;
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = 1./2.;
-  prolongation[0](1,1) = 1./2.;
-
-  prolongation[1](0,0) = 1./2.;
-  prolongation[1](0,1) = 1./2.;
-  prolongation[1](1,1) = 1.0;
-};
-
-
-template <>
-double
-FEQ1<1>::shape_value(const unsigned int i,
-                    const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.-p(0);
-      case 1: return p(0);
-    }
-  return 0.;
-}
-
-
-template <>
-inline
-Tensor<1,1>
-FEQ1<1>::shape_grad(const unsigned int i,
-                   const Point<1>&) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(-1.);
-      case 1: return Point<1>(1.);
-    }
-  return Point<1>();
-};
-
-
-template <>
-inline
-Tensor<2,1>
-FEQ1<1>::shape_grad_grad (const unsigned int i,
-                         const Point<1> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // second derivatives on the unit cell
-                                  // are always zero
-  return Tensor<2,1>();
-};
-
-
-template <>
-void FEQ1<1>::get_unit_support_points (std::vector<Point<1> >  &support_points) const {
-  FiniteElement<1>::get_unit_support_points (support_points);
-};
-
-
-template <>
-void FEQ1<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                 std::vector<Point<1> >  &support_points) const {
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-template <>
-void FEQ1<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                      std::vector<Point<1> >  &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ1<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  const double h = cell->vertex(1)(0) - cell->vertex(0)(0);
-  Assert (h>0, ExcJacobiDeterminantHasWrongSign());
-
-  local_mass_matrix(0,0) = local_mass_matrix(1,1) = 1./3.*h;
-  local_mass_matrix(0,1) = local_mass_matrix(1,0) = 1./6.*h;
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEQ1<2>::FEQ1 () :
-               FEQ1Mapping<2> (1, 0, 0, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,0) = 1./2.;
-  interface_constraints(0,1) = 1./2.;
-
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ1<2>::FEQ1 (const int) :
-               FEQ1Mapping<2> (0, 0, 4, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ1<2>::initialize_matrices ()
-{
-  restriction[0](0,0) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[3](3,3) = 1.0;
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = 1./2.;
-  prolongation[0](1,1) = 1./2.;
-  prolongation[0](3,0) = 1./2.;
-  prolongation[0](3,3) = 1./2.;
-  prolongation[0](2,0) = 1./4.;
-  prolongation[0](2,1) = 1./4.;
-  prolongation[0](2,2) = 1./4.;
-  prolongation[0](2,3) = 1./4.;
-
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](0,0) = 1./2.;
-  prolongation[1](0,1) = 1./2.;
-  prolongation[1](2,1) = 1./2.;
-  prolongation[1](2,2) = 1./2.;
-  prolongation[1](3,0) = 1./4.;
-  prolongation[1](3,1) = 1./4.;
-  prolongation[1](3,2) = 1./4.;
-  prolongation[1](3,3) = 1./4.;
-
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](1,2) = 1./2.;
-  prolongation[2](1,1) = 1./2.;
-  prolongation[2](3,2) = 1./2.;
-  prolongation[2](3,3) = 1./2.;
-  prolongation[2](0,0) = 1./4.;
-  prolongation[2](0,1) = 1./4.;
-  prolongation[2](0,2) = 1./4.;
-  prolongation[2](0,3) = 1./4.;
-
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](0,0) = 1./2.;
-  prolongation[3](0,3) = 1./2.;
-  prolongation[3](2,2) = 1./2.;
-  prolongation[3](2,3) = 1./2.;
-  prolongation[3](1,0) = 1./4.;
-  prolongation[3](1,1) = 1./4.;
-  prolongation[3](1,2) = 1./4.;
-  prolongation[3](1,3) = 1./4.;
-};
-
-
-template <>
-inline
-double
-FEQ1<2>::shape_value (const unsigned int i,
-                     const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return (1.-p(0)) * (1.-p(1));
-      case 1: return p(0) * (1.-p(1));
-      case 2: return p(0) * p(1);
-      case 3: return (1.-p(0)) * p(1);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,2>
-FEQ1<2>::shape_grad (const unsigned int i,
-                    const Point<2>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2> (p(1)-1., p(0)-1.);
-      case 1: return Point<2> (1.-p(1), -p(0));
-      case 2: return Point<2> (p(1), p(0));
-      case 3: return Point<2> (-p(1), 1.-p(0));
-    }
-  return Point<2> ();
-};
-
-
-template <>
-inline
-Tensor<2,2>
-FEQ1<2>::shape_grad_grad (const unsigned int i,
-                         const Point<2> &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  switch (i)
-    {
-      case 0:
-      case 2:
-      {
-       const double initializer[2][2] = {{0, 1},{1,0}};
-       return Tensor<2,2>(initializer);
-      };
-       
-      case 1:
-      case 3:
-      {
-       const double initializer[2][2] = {{0, -1},{-1,0}};
-       return Tensor<2,2>(initializer);
-      };
-    };    
-           
-  return Tensor<2,2>();
-};
-
-
-template <>
-void FEQ1<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-/* Get the computation of the local mass matrix by these lines in maple:
-
-   x_real := sum(x[i]*phi[i], i=0..3);
-   y_real := sum(y[i]*phi[i], i=0..3);
-   phi[0] := (1-xi)*(1-eta);
-   phi[1] := xi*(1-eta);
-   phi[2] := xi*eta;
-   phi[3] := (1-xi)*eta;
-   detJ := diff(x_real,xi)*diff(y_real,eta) - diff(x_real,eta)*diff(y_real,xi);
-
-   m := proc (i,j)  int( int(phi[i]*phi[j]*detJ, xi=0..1), eta=0..1); end;
-
-   M := array(0..3,0..3);
-   for i from 0 to 3 do
-     for j from 0 to 3 do
-       M[i,j] := m(i,j);
-     od;
-   od;
-
-   readlib(C);
-   C(M, optimized);
-*/
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-  
-/* check that the Jacobi determinant
-
-    t0 = (-x[0]*(1.0-eta)+x[1]*(1.0-eta)+x[2]*eta-x[3]*eta) *
-         (-y[0]*(1.0-xi)-y[1]*xi+y[2]*xi+y[3]*(1.0-xi))        -
-        (-x[0]*(1.0-xi)-x[1]*xi+x[2]*xi+x[3]*(1.0-xi)) *
-        (-y[0]*(1.0-eta)+y[1]*(1.0-eta)+y[2]*eta-y[3]*eta)
-
-   has the right sign.  
-        
-   We do not attempt to check its (hopefully) positive sign at all points
-   on the unit cell, but we check that it is positive in the four corners,
-   which is sufficient since $det J$ is a bilinear function.
-*/
-  Assert ((-x[0]+x[1])*(-y[0]+y[3])-(-x[0]+x[3])*(-y[0]+y[1]),  // xi=eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[0]+y[3])-(-x[0]+x[3])*(y[2]-y[3]),    // xi=0, eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[1]+y[2])-(-x[1]+x[2])*(y[2]-y[3]),    // xi=eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((-x[0]+x[1])*(-y[1]+y[2])-(-x[1]+x[2])*(-y[0]+y[1]),  // xi=1, eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  
-  const double t1 = x[1]*y[3],
-              t2 = x[1]*y[2],
-              t3 = x[1]*y[0],
-              t4 = x[0]*y[3],
-              t5 = x[0]*y[1],
-              t6 = x[2]*y[3],
-              t7 = x[3]*y[0],
-              t8 = x[2]*y[1],
-              t9 = x[3]*y[2],
-             t10 = x[3]*y[1],
-             t12 = x[0]*y[2],
-             t13 = x[2]*y[0],
-             t14 = t1/72+t2/36-t3/24-t4/36-t12/72+t5/24+t6/72
-                   +t7/36-t8/36-t9/72-t10/72+t13/72,
-             t15 = t2/72-t3/72-t4/72+t5/72+t6/72+t7/72-t8/72-t9/72,
-             t16 = t1/72+t2/72-t3/36-t4/24+t12/72+t5/36+t6/36
-                   +t7/24-t8/72-t9/36-t10/72-t13/72,
-             t18 = -t1/72+t2/24-t3/36-t4/72-t12/72+t5/36+t6/36
-                   +t7/72-t8/24-t9/36+t10/72+t13/72,
-             t20 = -t1/72+t12/72+t2/36+t5/72-t3/72+t6/24
-                   -t9/24-t13/72+t10/72-t4/36+t7/36-t8/36;
-  local_mass_matrix(0,0) = t1/18+t2/36-t3/12-t4/12+t5/12+t6/36+t7/12-t8/36-t9/36-t10/18;
-  local_mass_matrix(0,1) = t14;
-  local_mass_matrix(0,2) = t15;
-  local_mass_matrix(0,3) = t16;
-  local_mass_matrix(1,0) = t14;
-  local_mass_matrix(1,1) = t2/12-t3/12-t4/36-t12/18+t5/12+t6/36+
-                          t7/36-t8/12-t9/36+t13/18;
-  local_mass_matrix(1,2) = t18;
-  local_mass_matrix(1,3) = t15;
-  local_mass_matrix(2,0) = t15;
-  local_mass_matrix(2,1) = t18;
-  local_mass_matrix(2,2) = -t1/18+t2/12+t5/36-t3/36+t6/12-t9/12+
-                          t10/18-t4/36+t7/36-t8/12;
-  local_mass_matrix(2,3) = t20;
-  local_mass_matrix(3,0) = t16;
-  local_mass_matrix(3,1) = t15;
-  local_mass_matrix(3,2) = t20;
-  local_mass_matrix(3,3) = t12/18+t2/36+t5/36-t3/36+t6/12-t9/12-
-                          t13/18-t4/12+t7/12-t8/36;
-};
-
-
-template <>
-void FEQ1<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const {
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<2> (0,0);
-  unit_points[1] = Point<2> (1,0);
-  unit_points[2] = Point<2> (1,1);
-  unit_points[3] = Point<2> (0,1);
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-FEQ1<3>::FEQ1 () :
-               FEQ1Mapping<3> (1, 0, 0, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,0) = 1.0/4.0;
-  interface_constraints(0,1) = 1.0/4.0;
-  interface_constraints(0,2) = 1.0/4.0;
-  interface_constraints(0,3) = 1.0/4.0;
-  interface_constraints(1,0) = 1.0/2.0;
-  interface_constraints(1,1) = 1.0/2.0;
-  interface_constraints(2,1) = 1.0/2.0;
-  interface_constraints(2,2) = 1.0/2.0;
-  interface_constraints(3,2) = 1.0/2.0;
-  interface_constraints(3,3) = 1.0/2.0;
-  interface_constraints(4,0) = 1.0/2.0;
-  interface_constraints(4,3) = 1.0/2.0;
-
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ1<3>::FEQ1 (const int) :
-               FEQ1Mapping<3> (0, 0, 0, 8, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ1<3>::initialize_matrices ()
-{
-  restriction[0](0,0) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[3](3,3) = 1.0;
-  restriction[4](4,4) = 1.0;
-  restriction[5](5,5) = 1.0;
-  restriction[6](6,6) = 1.0;
-  restriction[7](7,7) = 1.0;
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,0) = 1.0/2.0;
-  prolongation[0](1,1) = 1.0/2.0;
-  prolongation[0](2,0) = 1.0/4.0;
-  prolongation[0](2,1) = 1.0/4.0;
-  prolongation[0](2,2) = 1.0/4.0;
-  prolongation[0](2,3) = 1.0/4.0;
-  prolongation[0](3,0) = 1.0/2.0;
-  prolongation[0](3,3) = 1.0/2.0;
-  prolongation[0](4,0) = 1.0/2.0;
-  prolongation[0](4,4) = 1.0/2.0;
-  prolongation[0](5,0) = 1.0/4.0;
-  prolongation[0](5,1) = 1.0/4.0;
-  prolongation[0](5,4) = 1.0/4.0;
-  prolongation[0](5,5) = 1.0/4.0;
-  prolongation[0](6,0) = 1.0/8.0;
-  prolongation[0](6,1) = 1.0/8.0;
-  prolongation[0](6,2) = 1.0/8.0;
-  prolongation[0](6,3) = 1.0/8.0;
-  prolongation[0](6,4) = 1.0/8.0;
-  prolongation[0](6,5) = 1.0/8.0;
-  prolongation[0](6,6) = 1.0/8.0;
-  prolongation[0](6,7) = 1.0/8.0;
-  prolongation[0](7,0) = 1.0/4.0;
-  prolongation[0](7,3) = 1.0/4.0;
-  prolongation[0](7,4) = 1.0/4.0;
-  prolongation[0](7,7) = 1.0/4.0;
-  prolongation[1](0,0) = 1.0/2.0;
-  prolongation[1](0,1) = 1.0/2.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,1) = 1.0/2.0;
-  prolongation[1](2,2) = 1.0/2.0;
-  prolongation[1](3,0) = 1.0/4.0;
-  prolongation[1](3,1) = 1.0/4.0;
-  prolongation[1](3,2) = 1.0/4.0;
-  prolongation[1](3,3) = 1.0/4.0;
-  prolongation[1](4,0) = 1.0/4.0;
-  prolongation[1](4,1) = 1.0/4.0;
-  prolongation[1](4,4) = 1.0/4.0;
-  prolongation[1](4,5) = 1.0/4.0;
-  prolongation[1](5,1) = 1.0/2.0;
-  prolongation[1](5,5) = 1.0/2.0;
-  prolongation[1](6,1) = 1.0/4.0;
-  prolongation[1](6,2) = 1.0/4.0;
-  prolongation[1](6,5) = 1.0/4.0;
-  prolongation[1](6,6) = 1.0/4.0;
-  prolongation[1](7,0) = 1.0/8.0;
-  prolongation[1](7,1) = 1.0/8.0;
-  prolongation[1](7,2) = 1.0/8.0;
-  prolongation[1](7,3) = 1.0/8.0;
-  prolongation[1](7,4) = 1.0/8.0;
-  prolongation[1](7,5) = 1.0/8.0;
-  prolongation[1](7,6) = 1.0/8.0;
-  prolongation[1](7,7) = 1.0/8.0;
-  prolongation[2](0,0) = 1.0/4.0;
-  prolongation[2](0,1) = 1.0/4.0;
-  prolongation[2](0,2) = 1.0/4.0;
-  prolongation[2](0,3) = 1.0/4.0;
-  prolongation[2](1,1) = 1.0/2.0;
-  prolongation[2](1,2) = 1.0/2.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](3,2) = 1.0/2.0;
-  prolongation[2](3,3) = 1.0/2.0;
-  prolongation[2](4,0) = 1.0/8.0;
-  prolongation[2](4,1) = 1.0/8.0;
-  prolongation[2](4,2) = 1.0/8.0;
-  prolongation[2](4,3) = 1.0/8.0;
-  prolongation[2](4,4) = 1.0/8.0;
-  prolongation[2](4,5) = 1.0/8.0;
-  prolongation[2](4,6) = 1.0/8.0;
-  prolongation[2](4,7) = 1.0/8.0;
-  prolongation[2](5,1) = 1.0/4.0;
-  prolongation[2](5,2) = 1.0/4.0;
-  prolongation[2](5,5) = 1.0/4.0;
-  prolongation[2](5,6) = 1.0/4.0;
-  prolongation[2](6,2) = 1.0/2.0;
-  prolongation[2](6,6) = 1.0/2.0;
-  prolongation[2](7,2) = 1.0/4.0;
-  prolongation[2](7,3) = 1.0/4.0;
-  prolongation[2](7,6) = 1.0/4.0;
-  prolongation[2](7,7) = 1.0/4.0;
-  prolongation[3](0,0) = 1.0/2.0;
-  prolongation[3](0,3) = 1.0/2.0;
-  prolongation[3](1,0) = 1.0/4.0;
-  prolongation[3](1,1) = 1.0/4.0;
-  prolongation[3](1,2) = 1.0/4.0;
-  prolongation[3](1,3) = 1.0/4.0;
-  prolongation[3](2,2) = 1.0/2.0;
-  prolongation[3](2,3) = 1.0/2.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](4,0) = 1.0/4.0;
-  prolongation[3](4,3) = 1.0/4.0;
-  prolongation[3](4,4) = 1.0/4.0;
-  prolongation[3](4,7) = 1.0/4.0;
-  prolongation[3](5,0) = 1.0/8.0;
-  prolongation[3](5,1) = 1.0/8.0;
-  prolongation[3](5,2) = 1.0/8.0;
-  prolongation[3](5,3) = 1.0/8.0;
-  prolongation[3](5,4) = 1.0/8.0;
-  prolongation[3](5,5) = 1.0/8.0;
-  prolongation[3](5,6) = 1.0/8.0;
-  prolongation[3](5,7) = 1.0/8.0;
-  prolongation[3](6,2) = 1.0/4.0;
-  prolongation[3](6,3) = 1.0/4.0;
-  prolongation[3](6,6) = 1.0/4.0;
-  prolongation[3](6,7) = 1.0/4.0;
-  prolongation[3](7,3) = 1.0/2.0;
-  prolongation[3](7,7) = 1.0/2.0;
-  prolongation[4](0,0) = 1.0/2.0;
-  prolongation[4](0,4) = 1.0/2.0;
-  prolongation[4](1,0) = 1.0/4.0;
-  prolongation[4](1,1) = 1.0/4.0;
-  prolongation[4](1,4) = 1.0/4.0;
-  prolongation[4](1,5) = 1.0/4.0;
-  prolongation[4](2,0) = 1.0/8.0;
-  prolongation[4](2,1) = 1.0/8.0;
-  prolongation[4](2,2) = 1.0/8.0;
-  prolongation[4](2,3) = 1.0/8.0;
-  prolongation[4](2,4) = 1.0/8.0;
-  prolongation[4](2,5) = 1.0/8.0;
-  prolongation[4](2,6) = 1.0/8.0;
-  prolongation[4](2,7) = 1.0/8.0;
-  prolongation[4](3,0) = 1.0/4.0;
-  prolongation[4](3,3) = 1.0/4.0;
-  prolongation[4](3,4) = 1.0/4.0;
-  prolongation[4](3,7) = 1.0/4.0;
-  prolongation[4](4,4) = 1.0;
-  prolongation[4](5,4) = 1.0/2.0;
-  prolongation[4](5,5) = 1.0/2.0;
-  prolongation[4](6,4) = 1.0/4.0;
-  prolongation[4](6,5) = 1.0/4.0;
-  prolongation[4](6,6) = 1.0/4.0;
-  prolongation[4](6,7) = 1.0/4.0;
-  prolongation[4](7,4) = 1.0/2.0;
-  prolongation[4](7,7) = 1.0/2.0;
-  prolongation[5](0,0) = 1.0/4.0;
-  prolongation[5](0,1) = 1.0/4.0;
-  prolongation[5](0,4) = 1.0/4.0;
-  prolongation[5](0,5) = 1.0/4.0;
-  prolongation[5](1,1) = 1.0/2.0;
-  prolongation[5](1,5) = 1.0/2.0;
-  prolongation[5](2,1) = 1.0/4.0;
-  prolongation[5](2,2) = 1.0/4.0;
-  prolongation[5](2,5) = 1.0/4.0;
-  prolongation[5](2,6) = 1.0/4.0;
-  prolongation[5](3,0) = 1.0/8.0;
-  prolongation[5](3,1) = 1.0/8.0;
-  prolongation[5](3,2) = 1.0/8.0;
-  prolongation[5](3,3) = 1.0/8.0;
-  prolongation[5](3,4) = 1.0/8.0;
-  prolongation[5](3,5) = 1.0/8.0;
-  prolongation[5](3,6) = 1.0/8.0;
-  prolongation[5](3,7) = 1.0/8.0;
-  prolongation[5](4,4) = 1.0/2.0;
-  prolongation[5](4,5) = 1.0/2.0;
-  prolongation[5](5,5) = 1.0;
-  prolongation[5](6,5) = 1.0/2.0;
-  prolongation[5](6,6) = 1.0/2.0;
-  prolongation[5](7,4) = 1.0/4.0;
-  prolongation[5](7,5) = 1.0/4.0;
-  prolongation[5](7,6) = 1.0/4.0;
-  prolongation[5](7,7) = 1.0/4.0;
-  prolongation[6](0,0) = 1.0/8.0;
-  prolongation[6](0,1) = 1.0/8.0;
-  prolongation[6](0,2) = 1.0/8.0;
-  prolongation[6](0,3) = 1.0/8.0;
-  prolongation[6](0,4) = 1.0/8.0;
-  prolongation[6](0,5) = 1.0/8.0;
-  prolongation[6](0,6) = 1.0/8.0;
-  prolongation[6](0,7) = 1.0/8.0;
-  prolongation[6](1,1) = 1.0/4.0;
-  prolongation[6](1,2) = 1.0/4.0;
-  prolongation[6](1,5) = 1.0/4.0;
-  prolongation[6](1,6) = 1.0/4.0;
-  prolongation[6](2,2) = 1.0/2.0;
-  prolongation[6](2,6) = 1.0/2.0;
-  prolongation[6](3,2) = 1.0/4.0;
-  prolongation[6](3,3) = 1.0/4.0;
-  prolongation[6](3,6) = 1.0/4.0;
-  prolongation[6](3,7) = 1.0/4.0;
-  prolongation[6](4,4) = 1.0/4.0;
-  prolongation[6](4,5) = 1.0/4.0;
-  prolongation[6](4,6) = 1.0/4.0;
-  prolongation[6](4,7) = 1.0/4.0;
-  prolongation[6](5,5) = 1.0/2.0;
-  prolongation[6](5,6) = 1.0/2.0;
-  prolongation[6](6,6) = 1.0;
-  prolongation[6](7,6) = 1.0/2.0;
-  prolongation[6](7,7) = 1.0/2.0;
-  prolongation[7](0,0) = 1.0/4.0;
-  prolongation[7](0,3) = 1.0/4.0;
-  prolongation[7](0,4) = 1.0/4.0;
-  prolongation[7](0,7) = 1.0/4.0;
-  prolongation[7](1,0) = 1.0/8.0;
-  prolongation[7](1,1) = 1.0/8.0;
-  prolongation[7](1,2) = 1.0/8.0;
-  prolongation[7](1,3) = 1.0/8.0;
-  prolongation[7](1,4) = 1.0/8.0;
-  prolongation[7](1,5) = 1.0/8.0;
-  prolongation[7](1,6) = 1.0/8.0;
-  prolongation[7](1,7) = 1.0/8.0;
-  prolongation[7](2,2) = 1.0/4.0;
-  prolongation[7](2,3) = 1.0/4.0;
-  prolongation[7](2,6) = 1.0/4.0;
-  prolongation[7](2,7) = 1.0/4.0;
-  prolongation[7](3,3) = 1.0/2.0;
-  prolongation[7](3,7) = 1.0/2.0;
-  prolongation[7](4,4) = 1.0/2.0;
-  prolongation[7](4,7) = 1.0/2.0;
-  prolongation[7](5,4) = 1.0/4.0;
-  prolongation[7](5,5) = 1.0/4.0;
-  prolongation[7](5,6) = 1.0/4.0;
-  prolongation[7](5,7) = 1.0/4.0;
-  prolongation[7](6,6) = 1.0/2.0;
-  prolongation[7](6,7) = 1.0/2.0;
-  prolongation[7](7,7) = 1.0;
-};
-
-
-template <>
-inline
-double
-FEQ1<3>::shape_value (const unsigned int i,
-                     const Point<3>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  switch (i)
-    {
-      case 0: return 1.0-p(0)+(-1.0+p(0))*p(1)+(-1.0+p(0)+(1.0-p(0))*p(1))*p(2);
-      case 1: return p(0)-p(0)*p(1)+(-p(0)+p(0)*p(1))*p(2);
-      case 2: return (p(0)-p(0)*p(1))*p(2);
-      case 3: return (1.0-p(0)+(-1.0+p(0))*p(1))*p(2);
-      case 4: return (1.0-p(0))*p(1)+(-1.0+p(0))*p(1)*p(2);
-      case 5: return p(0)*p(1)-p(0)*p(1)*p(2);
-      case 6: return p(0)*p(1)*p(2);
-      case 7: return (1.0-p(0))*p(1)*p(2);
-    }
-  return 0.;
-};
-
-
-template <>
-inline
-Tensor<1,3>
-FEQ1<3>::shape_grad (const unsigned int i,
-                    const Point<3>& p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<3>(-1.0+p(1)+(1.0-p(1))*p(2),
-                             -1.0+p(0)+(1.0-p(0))*p(2),
-                             -1.0+p(0)+(1.0-p(0))*p(1));
-      case 1: return Point<3>(1.0-p(1)+(-1.0+p(1))*p(2),
-                             -p(0)+p(0)*p(2),
-                             -p(0)+p(0)*p(1));
-      case 2: return Point<3>((1.0-p(1))*p(2),
-                             -p(0)*p(2),
-                             p(0)-p(0)*p(1));
-      case 3: return Point<3>((-1.0+p(1))*p(2),
-                             (-1.0+p(0))*p(2),
-                             1.0-p(0)+(-1.0+p(0))*p(1));
-      case 4: return Point<3>(-p(1)+p(1)*p(2),
-                             1.0-p(0)+(-1.0+p(0))*p(2),
-                             (-1.0+p(0))*p(1));
-      case 5: return Point<3>(p(1)-p(1)*p(2),
-                             p(0)-p(0)*p(2),
-                             -p(0)*p(1));
-      case 6: return Point<3>(p(1)*p(2),
-                             p(0)*p(2),
-                             p(0)*p(1));
-      case 7: return Point<3>(-p(1)*p(2),
-                             (1.0-p(0))*p(2),
-                             (1.0-p(0))*p(1));
-    }
-  return Point<3> ();
-};
-
-
-template <>
-inline
-Tensor<2,3>
-FEQ1<3>::shape_grad_grad (const unsigned int i,
-                         const Point<3> &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  Tensor<2,3> return_value;
-  
-  switch (i) 
-    {
-      case 0:
-           return_value[0][1] = 1.0-p(2);
-           return_value[0][2] = 1.0-p(1);
-           return_value[1][0] = 1.0-p(2);
-           return_value[1][2] = 1.0-p(0);
-           return_value[2][0] = 1.0-p(1);
-           return_value[2][1] = 1.0-p(0);
-           break;
-      case 1:
-           return_value[0][1] = -1.0+p(2);
-           return_value[0][2] = -1.0+p(1);
-           return_value[1][0] = -1.0+p(2);
-           return_value[1][2] = p(0);
-           return_value[2][0] = -1.0+p(1);
-           return_value[2][1] = p(0);
-           break;
-      case 2:
-           return_value[0][1] = -p(2);
-           return_value[0][2] = 1.0-p(1);
-           return_value[1][0] = -p(2);
-           return_value[1][2] = -p(0);
-           return_value[2][0] = 1.0-p(1);
-           return_value[2][1] = -p(0);
-           break;
-      case 3:
-           return_value[0][1] = p(2);
-           return_value[0][2] = -1.0+p(1);
-           return_value[1][0] = p(2);
-           return_value[1][2] = -1.0+p(0);
-           return_value[2][0] = -1.0+p(1);
-           return_value[2][1] = -1.0+p(0);
-           break;
-      case 4:
-           return_value[0][1] = -1.0+p(2);
-           return_value[0][2] = p(1);
-           return_value[1][0] = -1.0+p(2);
-           return_value[1][2] = -1.0+p(0);
-           return_value[2][0] = p(1);
-           return_value[2][1] = -1.0+p(0);
-           break;
-      case 5:
-           return_value[0][1] = 1.0-p(2);
-           return_value[0][2] = -p(1);
-           return_value[1][0] = 1.0-p(2);
-           return_value[1][2] = -p(0);
-           return_value[2][0] = -p(1);
-           return_value[2][1] = -p(0);
-           break;
-      case 6:
-           return_value[0][1] = p(2);
-           return_value[0][2] = p(1);
-           return_value[1][0] = p(2);
-           return_value[1][2] = p(0);
-           return_value[2][0] = p(1);
-           return_value[2][1] = p(0);
-           break;
-      case 7:
-           return_value[0][1] = -p(2);
-           return_value[0][2] = -p(1);
-           return_value[1][0] = -p(2);
-           return_value[1][2] = 1.0-p(0);
-           return_value[2][0] = -p(1);
-           return_value[2][1] = 1.0-p(0);
-    };
-  
-  return return_value;
-};
-
-
-template <>
-void FEQ1<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                                    FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-  throw ExcComputationNotUseful(3);
-};
-
-
-
-template <>
-void FEQ1<3>::get_unit_support_points (std::vector<Point<3> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<3> (0,0,0);
-  unit_points[1] = Point<3> (1,0,0);
-  unit_points[2] = Point<3> (1,0,1);
-  unit_points[3] = Point<3> (0,0,1);
-  unit_points[4] = Point<3> (0,1,0);
-  unit_points[5] = Point<3> (1,1,0);
-  unit_points[6] = Point<3> (1,1,1);
-  unit_points[7] = Point<3> (0,1,1);
-};
-
-
-#endif
-
-
-template <int dim>
-void
-FEQ1<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                              typename std::vector<Point<dim> >  &support_points) const {
-  Assert (support_points.size() == dofs_per_cell,
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension (support_points.size(),
-                                                                  dofs_per_cell));
-  
-  for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
-    support_points[vertex] = cell->vertex(vertex);
-};
-
-
-template <int dim>
-void
-FEQ1<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator &face,
-                                   typename std::vector<Point<dim> >  &support_points) const {
-  Assert ((support_points.size() == dofs_per_face) &&
-         (support_points.size() == GeometryInfo<dim>::vertices_per_face),
-         typename FiniteElementBase<dim>::
-         ExcWrongFieldDimension (support_points.size(),
-                                 GeometryInfo<dim>::vertices_per_face));
-
-  for (unsigned int vertex=0; vertex<dofs_per_face; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-};
-
-
-// explicit instantiations
-
-template class FEQ1<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/fe_lib.quadratic.cc b/deal.II/deal.II/source/fe/fe_lib.quadratic.cc
deleted file mode 100644 (file)
index 1a9d53b..0000000
+++ /dev/null
@@ -1,2982 +0,0 @@
-//----------------------------  fe_lib.quadratic.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.quadratic.cc  ---------------------------
-
-
-#include <fe/fe_lib.lagrange.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-
-// declare explicit specializations before use:
-template <> void FEQ2<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEQ2<1>::FEQ2 () :
-               FEQ1Mapping<1> (1, 1, 0, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  initialize_matrices ();
-};
-
-
-
-template <>
-FEQ2<1>::FEQ2 (const int) :
-               FEQ1Mapping<1> (0, 3, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-
-template <>
-void FEQ2<1>::initialize_matrices ()
-{
-/*
-  Get the prolongation matrices by the following little maple script:
-
-  phi[0] := proc(xi) (1-xi)*(1-2*xi); end;
-  phi[1] := proc(xi) xi*(2*xi-1);     end;
-  phi[2] := proc(xi) 4*xi*(1-xi);     end;
-
-  points[0] := array(0..2, [0, 1/2, 1/4]);
-  points[1] := array(0..2, [1/2, 1, 3/4]);
-
-  prolongation := array(0..1,0..2, 0..2);
-  restriction := array(0..1,0..2, 0..2);
-
-  for i from 0 to 1 do
-  for j from 0 to 2 do
-  for k from 0 to 2 do
-  prolongation[i,j,k] := phi[k](points[i][j]);
-  od;
-  od;
-  od;
-
-
-  # to get the restriction (interpolation) matrices, evaluate
-  # the basis functions on the child cells at the global
-  # interpolation points
-
-  global_points := array(0..2, [0,1,1/2]):
-  child_phi[0] := proc(i, point)
-  if ((point<0) or (point>1/2)) then
-  0:
-  else
-  phi[i](2*point):
-  fi:
-  end: 
-  child_phi[1] := proc(i, point)
-  if ((point<1/2) or (point>1)) then
-  0:
-  else
-  phi[i](2*point-1):
-  fi:
-  end: 
-  
-  for child from 0 to 1 do
-  for j from 0 to 2 do
-  for k from 0 to 2 do
-  restriction[child,j,k] := child_phi[child](k, global_points[j]):
-  od:
-  od:
-  od:
-  
-  readlib(C);
-  C(prolongation);
-  C(restriction);
-*/
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](0,1) = 0.0;
-  prolongation[0](0,2) = 0.0;
-  prolongation[0](1,0) = 0.0;
-  prolongation[0](1,1) = 0.0;
-  prolongation[0](1,2) = 1.0;
-  prolongation[0](2,0) = 3.0/8.0;
-  prolongation[0](2,1) = -1.0/8.0;
-  prolongation[0](2,2) = 3.0/4.0;
-  prolongation[1](0,0) = 0.0;
-  prolongation[1](0,1) = 0.0;
-  prolongation[1](0,2) = 1.0;
-  prolongation[1](1,0) = 0.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](1,2) = 0.0;
-  prolongation[1](2,0) = -1.0/8.0;
-  prolongation[1](2,1) = 3.0/8.0;
-  prolongation[1](2,2) = 3.0/4.0;
-
-  restriction[0](0,0)= 1.0;
-  restriction[0](2,1)= 1.0;
-  restriction[1](1,1)= 1.0;
-  restriction[1](2,0)= 1.0;
-};
-
-
-
-template <>
-double
-FEQ2<1>::shape_value(const unsigned int i,
-                    const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  const double xi = p(0);
-  switch (i)
-    {
-      case 0: return (1-xi)*(1-2*xi);
-      case 1: return xi*(2*xi-1);
-      case 2: return 4*xi*(1-xi);
-    }
-  return 0.;
-};
-
-
-
-template <>
-Tensor<1,1>
-FEQ2<1>::shape_grad(const unsigned int i,
-                   const Point<1>    &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  const double xi = p(0);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(-3+4*xi);
-      case 1: return Point<1>(4*xi-1);
-      case 2: return Point<1>(4-8*xi);
-    }
-  return Point<1>();
-};
-
-
-
-template <>
-Tensor<2,1>
-FEQ2<1>::shape_grad_grad (const unsigned int i,
-                         const Point<1>    &) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  Tensor<2,1> return_value;
-  switch (i)
-    {
-      case 0:
-           return_value[0][0] = 4;
-           break;
-      case 1:
-           return_value[0][0] = 4;
-           break;
-      case 2:
-           return_value[0][0] = -8;
-           break;
-    }
-  return return_value;
-};
-
-
-
-template <>
-void FEQ2<1>::get_unit_support_points (std::vector<Point<1> > &unit_points) const
-{
-  FiniteElement<1>::get_unit_support_points (unit_points);
-};
-
-
-
-template <>
-void FEQ2<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                 std::vector<Point<1> >  &support_points) const
-{
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-
-template <>
-void FEQ2<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                      std::vector<Point<1> >  &) const
-{
-  Assert (false, ExcInternalError());
-};
-
-
-
-template <>
-void FEQ2<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  const double h = cell->vertex(1)(0) - cell->vertex(0)(0);
-  Assert (h>0, ExcJacobiDeterminantHasWrongSign());
-
-  local_mass_matrix(0,0) = local_mass_matrix(1,1) = 2./15.*h;
-  local_mass_matrix(0,1) = local_mass_matrix(1,0) = -1./30.*h;
-  local_mass_matrix(0,2) = local_mass_matrix(2,0) = 1./15.*h;
-  local_mass_matrix(1,2) = local_mass_matrix(2,1) = 1./15.*h;
-  local_mass_matrix(2,2) = 8./15.*h;
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEQ2<2>::FEQ2 () :
-               FEQ1Mapping<2> (1, 1, 1, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,2) = 1.0;
-  interface_constraints(1,0) = 3./8.;
-  interface_constraints(1,1) = -1./8.;
-  interface_constraints(1,2) = 3./4.;
-  interface_constraints(2,0) = -1./8.;
-  interface_constraints(2,1) = 3./8.;
-  interface_constraints(2,2) = 3./4.;
-
-  initialize_matrices ();
-};
-
-
-
-template <>
-FEQ2<2>::FEQ2 (const int) :
-               FEQ1Mapping<2> (0, 0, 9, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-
-template <>
-void FEQ2<2>::initialize_matrices ()
-{
-/*
-  Get the prolongation and restriction matrices by the following little maple script:
-
-  phi[0] := proc(xi,eta) (1-xi)*( 2*xi-1) * (1-eta)*( 2*eta-1);    end;
-  phi[1] := proc(xi,eta)    xi *(-2*xi+1) * (1-eta)*( 2*eta-1);    end;
-  phi[2] := proc(xi,eta)    xi *(-2*xi+1) *    eta *(-2*eta+1);    end;
-  phi[3] := proc(xi,eta) (1-xi)*( 2*xi-1) *    eta *(-2*eta+1);    end;
-  phi[4] := proc(xi,eta) 4 * (1-xi)*xi        * (1-eta)*(1-2*eta); end;
-  phi[5] := proc(xi,eta) 4 *    xi *(-1+2*xi) * (1-eta)*eta;       end;
-  phi[6] := proc(xi,eta) 4 * (1-xi)*xi        *    eta *(-1+2*eta);end;
-  phi[7] := proc(xi,eta) 4 * (1-xi)*(1-2*xi)  * (1-eta)*eta;       end;
-  phi[8] := proc(xi,eta) 16 * xi*(1-xi) * eta*(1-eta);             end;
-
-  points_x[0] := array(0..8, [0, 1/2, 1/2, 0, 1/4, 1/2, 1/4, 0, 1/4]);
-  points_y[0] := array(0..8, [0, 0, 1/2, 1/2, 0, 1/4, 1/2, 1/4, 1/4]);
-
-  points_x[1] := array(0..8, [1/2, 1, 1, 1/2, 3/4, 1, 3/4, 1/2, 3/4]);
-  points_y[1] := array(0..8, [0, 0, 1/2, 1/2, 0, 1/4, 1/2, 1/4, 1/4]);
-
-  points_x[2] := array(0..8, [1/2, 1, 1, 1/2, 3/4, 1, 3/4, 1/2, 3/4]);
-  points_y[2] := array(0..8, [1/2, 1/2, 1, 1, 1/2, 3/4, 1, 3/4, 3/4]);
-
-  points_x[3] := array(0..8, [0, 1/2, 1/2, 0, 1/4, 1/2, 1/4, 0, 1/4]);
-  points_y[3] := array(0..8, [1/2, 1/2, 1, 1, 1/2, 3/4, 1, 3/4, 3/4]);
-
-  prolongation := array(0..3,0..8, 0..8);
-
-  for i from 0 to 3 do
-  for j from 0 to 8 do
-  for k from 0 to 8 do
-  prolongation[i,j,k] := phi[k](points_x[i][j], points_y[i][j]);
-  od;
-  od;
-  od;
-
-  readlib(C);
-  C(prolongation);
-*/
-
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](0,1) = 0.0;
-  prolongation[0](0,2) = 0.0;
-  prolongation[0](0,3) = 0.0;
-  prolongation[0](0,4) = 0.0;
-  prolongation[0](0,5) = 0.0;
-  prolongation[0](0,6) = 0.0;
-  prolongation[0](0,7) = 0.0;
-  prolongation[0](0,8) = 0.0;
-  prolongation[0](1,0) = 0.0;
-  prolongation[0](1,1) = 0.0;
-  prolongation[0](1,2) = 0.0;
-  prolongation[0](1,3) = 0.0;
-  prolongation[0](1,4) = 1.0;
-  prolongation[0](1,5) = 0.0;
-  prolongation[0](1,6) = 0.0;
-  prolongation[0](1,7) = 0.0;
-  prolongation[0](1,8) = 0.0;
-  prolongation[0](2,0) = 0.0;
-  prolongation[0](2,1) = 0.0;
-  prolongation[0](2,2) = 0.0;
-  prolongation[0](2,3) = 0.0;
-  prolongation[0](2,4) = 0.0;
-  prolongation[0](2,5) = 0.0;
-  prolongation[0](2,6) = 0.0;
-  prolongation[0](2,7) = 0.0;
-  prolongation[0](2,8) = 1.0;
-  prolongation[0](3,0) = 0.0;
-  prolongation[0](3,1) = 0.0;
-  prolongation[0](3,2) = 0.0;
-  prolongation[0](3,3) = 0.0;
-  prolongation[0](3,4) = 0.0;
-  prolongation[0](3,5) = 0.0;
-  prolongation[0](3,6) = 0.0;
-  prolongation[0](3,7) = 1.0;
-  prolongation[0](3,8) = 0.0;
-  prolongation[0](4,0) = 3.0/8.0;
-  prolongation[0](4,1) = -1.0/8.0;
-  prolongation[0](4,2) = 0.0;
-  prolongation[0](4,3) = 0.0;
-  prolongation[0](4,4) = 3.0/4.0;
-  prolongation[0](4,5) = 0.0;
-  prolongation[0](4,6) = 0.0;
-  prolongation[0](4,7) = 0.0;
-  prolongation[0](4,8) = 0.0;
-  prolongation[0](5,0) = 0.0;
-  prolongation[0](5,1) = 0.0;
-  prolongation[0](5,2) = 0.0;
-  prolongation[0](5,3) = 0.0;
-  prolongation[0](5,4) = 3.0/8.0;
-  prolongation[0](5,5) = 0.0;
-  prolongation[0](5,6) = -1.0/8.0;
-  prolongation[0](5,7) = 0.0;
-  prolongation[0](5,8) = 3.0/4.0;
-  prolongation[0](6,0) = 0.0;
-  prolongation[0](6,1) = 0.0;
-  prolongation[0](6,2) = 0.0;
-  prolongation[0](6,3) = 0.0;
-  prolongation[0](6,4) = 0.0;
-  prolongation[0](6,5) = -1.0/8.0;
-  prolongation[0](6,6) = 0.0;
-  prolongation[0](6,7) = 3.0/8.0;
-  prolongation[0](6,8) = 3.0/4.0;
-  prolongation[0](7,0) = 3.0/8.0;
-  prolongation[0](7,1) = 0.0;
-  prolongation[0](7,2) = 0.0;
-  prolongation[0](7,3) = -1.0/8.0;
-  prolongation[0](7,4) = 0.0;
-  prolongation[0](7,5) = 0.0;
-  prolongation[0](7,6) = 0.0;
-  prolongation[0](7,7) = 3.0/4.0;
-  prolongation[0](7,8) = 0.0;
-  prolongation[0](8,0) = 9.0/64.0;
-  prolongation[0](8,1) = -3.0/64.0;
-  prolongation[0](8,2) = 1.0/64.0;
-  prolongation[0](8,3) = -3.0/64.0;
-  prolongation[0](8,4) = 9.0/32.0;
-  prolongation[0](8,5) = -3.0/32.0;
-  prolongation[0](8,6) = -3.0/32.0;
-  prolongation[0](8,7) = 9.0/32.0;
-  prolongation[0](8,8) = 9.0/16.0;
-  prolongation[1](0,0) = 0.0;
-  prolongation[1](0,1) = 0.0;
-  prolongation[1](0,2) = 0.0;
-  prolongation[1](0,3) = 0.0;
-  prolongation[1](0,4) = 1.0;
-  prolongation[1](0,5) = 0.0;
-  prolongation[1](0,6) = 0.0;
-  prolongation[1](0,7) = 0.0;
-  prolongation[1](0,8) = 0.0;
-  prolongation[1](1,0) = 0.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](1,2) = 0.0;
-  prolongation[1](1,3) = 0.0;
-  prolongation[1](1,4) = 0.0;
-  prolongation[1](1,5) = 0.0;
-  prolongation[1](1,6) = 0.0;
-  prolongation[1](1,7) = 0.0;
-  prolongation[1](1,8) = 0.0;
-  prolongation[1](2,0) = 0.0;
-  prolongation[1](2,1) = 0.0;
-  prolongation[1](2,2) = 0.0;
-  prolongation[1](2,3) = 0.0;
-  prolongation[1](2,4) = 0.0;
-  prolongation[1](2,5) = 1.0;
-  prolongation[1](2,6) = 0.0;
-  prolongation[1](2,7) = 0.0;
-  prolongation[1](2,8) = 0.0;
-  prolongation[1](3,0) = 0.0;
-  prolongation[1](3,1) = 0.0;
-  prolongation[1](3,2) = 0.0;
-  prolongation[1](3,3) = 0.0;
-  prolongation[1](3,4) = 0.0;
-  prolongation[1](3,5) = 0.0;
-  prolongation[1](3,6) = 0.0;
-  prolongation[1](3,7) = 0.0;
-  prolongation[1](3,8) = 1.0;
-  prolongation[1](4,0) = -1.0/8.0;
-  prolongation[1](4,1) = 3.0/8.0;
-  prolongation[1](4,2) = 0.0;
-  prolongation[1](4,3) = 0.0;
-  prolongation[1](4,4) = 3.0/4.0;
-  prolongation[1](4,5) = 0.0;
-  prolongation[1](4,6) = 0.0;
-  prolongation[1](4,7) = 0.0;
-  prolongation[1](4,8) = 0.0;
-  prolongation[1](5,0) = 0.0;
-  prolongation[1](5,1) = 3.0/8.0;
-  prolongation[1](5,2) = -1.0/8.0;
-  prolongation[1](5,3) = 0.0;
-  prolongation[1](5,4) = 0.0;
-  prolongation[1](5,5) = 3.0/4.0;
-  prolongation[1](5,6) = 0.0;
-  prolongation[1](5,7) = 0.0;
-  prolongation[1](5,8) = 0.0;
-  prolongation[1](6,0) = 0.0;
-  prolongation[1](6,1) = 0.0;
-  prolongation[1](6,2) = 0.0;
-  prolongation[1](6,3) = 0.0;
-  prolongation[1](6,4) = 0.0;
-  prolongation[1](6,5) = 3.0/8.0;
-  prolongation[1](6,6) = 0.0;
-  prolongation[1](6,7) = -1.0/8.0;
-  prolongation[1](6,8) = 3.0/4.0;
-  prolongation[1](7,0) = 0.0;
-  prolongation[1](7,1) = 0.0;
-  prolongation[1](7,2) = 0.0;
-  prolongation[1](7,3) = 0.0;
-  prolongation[1](7,4) = 3.0/8.0;
-  prolongation[1](7,5) = 0.0;
-  prolongation[1](7,6) = -1.0/8.0;
-  prolongation[1](7,7) = 0.0;
-  prolongation[1](7,8) = 3.0/4.0;
-  prolongation[1](8,0) = -3.0/64.0;
-  prolongation[1](8,1) = 9.0/64.0;
-  prolongation[1](8,2) = -3.0/64.0;
-  prolongation[1](8,3) = 1.0/64.0;
-  prolongation[1](8,4) = 9.0/32.0;
-  prolongation[1](8,5) = 9.0/32.0;
-  prolongation[1](8,6) = -3.0/32.0;
-  prolongation[1](8,7) = -3.0/32.0;
-  prolongation[1](8,8) = 9.0/16.0;
-  prolongation[2](0,0) = 0.0;
-  prolongation[2](0,1) = 0.0;
-  prolongation[2](0,2) = 0.0;
-  prolongation[2](0,3) = 0.0;
-  prolongation[2](0,4) = 0.0;
-  prolongation[2](0,5) = 0.0;
-  prolongation[2](0,6) = 0.0;
-  prolongation[2](0,7) = 0.0;
-  prolongation[2](0,8) = 1.0;
-  prolongation[2](1,0) = 0.0;
-  prolongation[2](1,1) = 0.0;
-  prolongation[2](1,2) = 0.0;
-  prolongation[2](1,3) = 0.0;
-  prolongation[2](1,4) = 0.0;
-  prolongation[2](1,5) = 1.0;
-  prolongation[2](1,6) = 0.0;
-  prolongation[2](1,7) = 0.0;
-  prolongation[2](1,8) = 0.0;
-  prolongation[2](2,0) = 0.0;
-  prolongation[2](2,1) = 0.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](2,3) = 0.0;
-  prolongation[2](2,4) = 0.0;
-  prolongation[2](2,5) = 0.0;
-  prolongation[2](2,6) = 0.0;
-  prolongation[2](2,7) = 0.0;
-  prolongation[2](2,8) = 0.0;
-  prolongation[2](3,0) = 0.0;
-  prolongation[2](3,1) = 0.0;
-  prolongation[2](3,2) = 0.0;
-  prolongation[2](3,3) = 0.0;
-  prolongation[2](3,4) = 0.0;
-  prolongation[2](3,5) = 0.0;
-  prolongation[2](3,6) = 1.0;
-  prolongation[2](3,7) = 0.0;
-  prolongation[2](3,8) = 0.0;
-  prolongation[2](4,0) = 0.0;
-  prolongation[2](4,1) = 0.0;
-  prolongation[2](4,2) = 0.0;
-  prolongation[2](4,3) = 0.0;
-  prolongation[2](4,4) = 0.0;
-  prolongation[2](4,5) = 3.0/8.0;
-  prolongation[2](4,6) = 0.0;
-  prolongation[2](4,7) = -1.0/8.0;
-  prolongation[2](4,8) = 3.0/4.0;
-  prolongation[2](5,0) = 0.0;
-  prolongation[2](5,1) = -1.0/8.0;
-  prolongation[2](5,2) = 3.0/8.0;
-  prolongation[2](5,3) = 0.0;
-  prolongation[2](5,4) = 0.0;
-  prolongation[2](5,5) = 3.0/4.0;
-  prolongation[2](5,6) = 0.0;
-  prolongation[2](5,7) = 0.0;
-  prolongation[2](5,8) = 0.0;
-  prolongation[2](6,0) = 0.0;
-  prolongation[2](6,1) = 0.0;
-  prolongation[2](6,2) = 3.0/8.0;
-  prolongation[2](6,3) = -1.0/8.0;
-  prolongation[2](6,4) = 0.0;
-  prolongation[2](6,5) = 0.0;
-  prolongation[2](6,6) = 3.0/4.0;
-  prolongation[2](6,7) = 0.0;
-  prolongation[2](6,8) = 0.0;
-  prolongation[2](7,0) = 0.0;
-  prolongation[2](7,1) = 0.0;
-  prolongation[2](7,2) = 0.0;
-  prolongation[2](7,3) = 0.0;
-  prolongation[2](7,4) = -1.0/8.0;
-  prolongation[2](7,5) = 0.0;
-  prolongation[2](7,6) = 3.0/8.0;
-  prolongation[2](7,7) = 0.0;
-  prolongation[2](7,8) = 3.0/4.0;
-  prolongation[2](8,0) = 1.0/64.0;
-  prolongation[2](8,1) = -3.0/64.0;
-  prolongation[2](8,2) = 9.0/64.0;
-  prolongation[2](8,3) = -3.0/64.0;
-  prolongation[2](8,4) = -3.0/32.0;
-  prolongation[2](8,5) = 9.0/32.0;
-  prolongation[2](8,6) = 9.0/32.0;
-  prolongation[2](8,7) = -3.0/32.0;
-  prolongation[2](8,8) = 9.0/16.0;
-  prolongation[3](0,0) = 0.0;
-  prolongation[3](0,1) = 0.0;
-  prolongation[3](0,2) = 0.0;
-  prolongation[3](0,3) = 0.0;
-  prolongation[3](0,4) = 0.0;
-  prolongation[3](0,5) = 0.0;
-  prolongation[3](0,6) = 0.0;
-  prolongation[3](0,7) = 1.0;
-  prolongation[3](0,8) = 0.0;
-  prolongation[3](1,0) = 0.0;
-  prolongation[3](1,1) = 0.0;
-  prolongation[3](1,2) = 0.0;
-  prolongation[3](1,3) = 0.0;
-  prolongation[3](1,4) = 0.0;
-  prolongation[3](1,5) = 0.0;
-  prolongation[3](1,6) = 0.0;
-  prolongation[3](1,7) = 0.0;
-  prolongation[3](1,8) = 1.0;
-  prolongation[3](2,0) = 0.0;
-  prolongation[3](2,1) = 0.0;
-  prolongation[3](2,2) = 0.0;
-  prolongation[3](2,3) = 0.0;
-  prolongation[3](2,4) = 0.0;
-  prolongation[3](2,5) = 0.0;
-  prolongation[3](2,6) = 1.0;
-  prolongation[3](2,7) = 0.0;
-  prolongation[3](2,8) = 0.0;
-  prolongation[3](3,0) = 0.0;
-  prolongation[3](3,1) = 0.0;
-  prolongation[3](3,2) = 0.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](3,4) = 0.0;
-  prolongation[3](3,5) = 0.0;
-  prolongation[3](3,6) = 0.0;
-  prolongation[3](3,7) = 0.0;
-  prolongation[3](3,8) = 0.0;
-  prolongation[3](4,0) = 0.0;
-  prolongation[3](4,1) = 0.0;
-  prolongation[3](4,2) = 0.0;
-  prolongation[3](4,3) = 0.0;
-  prolongation[3](4,4) = 0.0;
-  prolongation[3](4,5) = -1.0/8.0;
-  prolongation[3](4,6) = 0.0;
-  prolongation[3](4,7) = 3.0/8.0;
-  prolongation[3](4,8) = 3.0/4.0;
-  prolongation[3](5,0) = 0.0;
-  prolongation[3](5,1) = 0.0;
-  prolongation[3](5,2) = 0.0;
-  prolongation[3](5,3) = 0.0;
-  prolongation[3](5,4) = -1.0/8.0;
-  prolongation[3](5,5) = 0.0;
-  prolongation[3](5,6) = 3.0/8.0;
-  prolongation[3](5,7) = 0.0;
-  prolongation[3](5,8) = 3.0/4.0;
-  prolongation[3](6,0) = 0.0;
-  prolongation[3](6,1) = 0.0;
-  prolongation[3](6,2) = -1.0/8.0;
-  prolongation[3](6,3) = 3.0/8.0;
-  prolongation[3](6,4) = 0.0;
-  prolongation[3](6,5) = 0.0;
-  prolongation[3](6,6) = 3.0/4.0;
-  prolongation[3](6,7) = 0.0;
-  prolongation[3](6,8) = 0.0;
-  prolongation[3](7,0) = -1.0/8.0;
-  prolongation[3](7,1) = 0.0;
-  prolongation[3](7,2) = 0.0;
-  prolongation[3](7,3) = 3.0/8.0;
-  prolongation[3](7,4) = 0.0;
-  prolongation[3](7,5) = 0.0;
-  prolongation[3](7,6) = 0.0;
-  prolongation[3](7,7) = 3.0/4.0;
-  prolongation[3](7,8) = 0.0;
-  prolongation[3](8,0) = -3.0/64.0;
-  prolongation[3](8,1) = 1.0/64.0;
-  prolongation[3](8,2) = -3.0/64.0;
-  prolongation[3](8,3) = 9.0/64.0;
-  prolongation[3](8,4) = -3.0/32.0;
-  prolongation[3](8,5) = -3.0/32.0;
-  prolongation[3](8,6) = 9.0/32.0;
-  prolongation[3](8,7) = 9.0/32.0;
-  prolongation[3](8,8) = 9.0/16.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](4,1) = 1.0;
-  restriction[0](7,3) = 1.0;
-  restriction[0](8,2) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](4,0) = 1.0;
-  restriction[1](5,2) = 1.0;
-  restriction[1](8,3) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[2](5,1) = 1.0;
-  restriction[2](6,3) = 1.0;
-  restriction[2](8,0) = 1.0;
-  restriction[3](3,3) = 1.0;
-  restriction[3](6,2) = 1.0;
-  restriction[3](7,0) = 1.0;
-  restriction[3](8,1) = 1.0; 
-};
-
-
-
-template <>
-double
-FEQ2<2>::shape_value (const unsigned int i,
-                     const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0),
-              eta= p(1);
-  switch (i)
-    {
-      case 0: return (1-xi)*( 2*xi-1) * (1-eta)*( 2*eta-1);
-      case 1: return    xi *(-2*xi+1) * (1-eta)*( 2*eta-1);
-      case 2: return    xi *(-2*xi+1) *    eta *(-2*eta+1);
-      case 3: return (1-xi)*( 2*xi-1) *    eta *(-2*eta+1);
-      case 4: return 4 * (1-xi)*xi        * (1-eta)*(1-2*eta);
-      case 5: return 4 *    xi *(-1+2*xi) * (1-eta)*eta;
-      case 6: return 4 * (1-xi)*xi        *    eta *(-1+2*eta);
-      case 7: return 4 * (1-xi)*(1-2*xi)  * (1-eta)*eta;
-      case 8: return 16 * xi*(1-xi) * eta*(1-eta);
-    };
-  return 0;
-};
-
-
-
-template <>
-Tensor<1,2>
-FEQ2<2>::shape_grad (const unsigned int i,
-                    const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0),
-              eta= p(1);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2>(-(2*xi-1)*(1-eta)*(2*eta-1)+2*(1-xi)*(1-eta)*(2*eta-1),
-                             -(1-xi)*(2*xi-1)*(2*eta-1)+2*(1-xi)*(2*xi-1)*(1-eta));
-      case 1: return Point<2>((-2*xi+1)*(1-eta)*(2*eta-1)-2*xi*(1-eta)*(2*eta-1),
-                             -xi*(-2*xi+1)*(2*eta-1)+2*xi*(-2*xi+1)*(1-eta));
-      case 2: return Point<2>((-2*xi+1)*eta*(-2*eta+1)-2*xi*eta*(-2*eta+1),
-                             xi*(-2*xi+1)*(-2*eta+1)-2*xi*(-2*xi+1)*eta);
-      case 3: return Point<2>(-(2*xi-1)*eta*(-2*eta+1)+2*(1-xi)*eta*(-2*eta+1),
-                             (1-xi)*(2*xi-1)*(-2*eta+1)-2*(1-xi)*(2*xi-1)*eta);
-      case 4: return Point<2>(-4*xi*(1-eta)*(-2*eta+1)+4*(1-xi)*(1-eta)*(-2*eta+1),
-                             -4*(1-xi)*xi*(-2*eta+1)-8*(1-xi)*xi*(1-eta));
-      case 5: return Point<2>(4*(2*xi-1)*(1-eta)*eta+8*xi*(1-eta)*eta,
-                             -4*xi*(2*xi-1)*eta+4*xi*(2*xi-1)*(1-eta));
-      case 6: return Point<2>(-4*xi*eta*(2*eta-1)+4*(1-xi)*eta*(2*eta-1),
-                             4*(1-xi)*xi*(2*eta-1)+8*(1-xi)*xi*eta);
-      case 7: return Point<2>(-4*(-2*xi+1)*(1-eta)*eta-8*(1-xi)*(1-eta)*eta,
-                             -4*(1-xi)*(-2*xi+1)*eta+4*(1-xi)*(-2*xi+1)*(1-eta));
-      case 8: return Point<2>(16*(1-xi)*(1-eta)*eta-16*xi*eta*(1-eta),
-                             16*xi*(1-xi)*(1-eta)-16*(1-xi)*xi*eta);
-    };
-  return Point<2> ();
-};
-
-
-
-template <>
-Tensor<2,2>
-FEQ2<2>::shape_grad_grad (const unsigned int i,
-                         const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  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 FEQ2<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-/* Get the computation of the local mass matrix by these lines in maple. Note
-   that tphi[i] are the basis function of the linear finite element, which
-   are used by the transformation (therefore >t<phi), while the phi[i]
-   are the basis functions of the biquadratic element.
-
-   x_real := sum(x[i]*tphi[i], i=0..3);
-   y_real := sum(y[i]*tphi[i], i=0..3);
-   tphi[0] := (1-xi)*(1-eta);
-   tphi[1] := xi*(1-eta);
-   tphi[2] := xi*eta;
-   tphi[3] := (1-xi)*eta;
-   detJ := diff(x_real,xi)*diff(y_real,eta) - diff(x_real,eta)*diff(y_real,xi);
-
-   phi[0] := (1-xi)*( 2*xi-1) * (1-eta)*( 2*eta-1);
-   phi[1] :=    xi *(-2*xi+1) * (1-eta)*( 2*eta-1);
-   phi[2] :=    xi *(-2*xi+1) *    eta *(-2*eta+1);
-   phi[3] := (1-xi)*( 2*xi-1) *    eta *(-2*eta+1);
-   phi[4] := 4 * (1-xi)*xi        * (1-eta)*(1-2*eta);
-   phi[5] := 4 *    xi *(-1+2*xi) * (1-eta)*eta;
-   phi[6] := 4 * (1-xi)*xi        *    eta *(-1+2*eta);
-   phi[7] := 4 * (1-xi)*(1-2*xi)  * (1-eta)*eta;
-   phi[8] := 16 * xi*(1-xi) * eta*(1-eta);
-   m := proc (i,j)  int( int(phi[i]*phi[j]*detJ, xi=0..1), eta=0..1); end;
-
-   M := array(0..8,0..8);
-   for i from 0 to 8 do
-   for j from 0 to 8 do
-   M[i,j] := m(i,j);
-   od;
-   od;
-
-   readlib(C);
-   C(M, optimized);
-*/
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-  
-/* check that the Jacobi determinant
-
-   t0 = (-x[0]*(1.0-eta)+x[1]*(1.0-eta)+x[2]*eta-x[3]*eta) *
-   (-y[0]*(1.0-xi)-y[1]*xi+y[2]*xi+y[3]*(1.0-xi))        -
-   (-x[0]*(1.0-xi)-x[1]*xi+x[2]*xi+x[3]*(1.0-xi)) *
-   (-y[0]*(1.0-eta)+y[1]*(1.0-eta)+y[2]*eta-y[3]*eta)
-
-   has the right sign.  
-        
-   We do not attempt to check its (hopefully) positive sign at all points
-   on the unit cell, but we check that it is positive in the four corners,
-   which is sufficient since $det J$ is a bilinear function.
-*/
-  Assert ((-x[0]+x[1])*(-y[0]+y[3])-(-x[0]+x[3])*(-y[0]+y[1]),  // xi=eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[0]+y[3])-(-x[0]+x[3])*(y[2]-y[3]),    // xi=0, eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[1]+y[2])-(-x[1]+x[2])*(y[2]-y[3]),    // xi=eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((-x[0]+x[1])*(-y[1]+y[2])-(-x[1]+x[2])*(-y[0]+y[1]),  // xi=1, eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-
-  const double t1 = (x[1]*y[0]);
-  const double t2 = (x[1]*y[2]);
-  const double t3 = (x[0]*y[3]);
-  const double t4 = (x[3]*y[2]);
-  const double t5 = (x[2]*y[3]);
-  const double t6 = (x[0]*y[1]);
-  const double t7 = (x[3]*y[1]);
-  const double t8 = (x[3]*y[0]);
-  const double t9 = (x[2]*y[1]);
-  const double t10 = (x[1]*y[3]);
-  const double t12 = (x[0]*y[2]);
-  const double t13 = (x[2]*y[0]);
-  const double t14 = (7.0/1800.0*t1-t2/450+t3/450+t4/1800-t5/1800-
-                     7.0/1800.0*t6+t12/600+
-                     t7/600-t8/450-t13/600+t9/450-t10/600);
-  const double t15 = (-t1/1800+t2/1800-t3/1800-t4/1800+t5/1800+
-                     t6/1800+t8/1800-t9/1800);
-  const double t16 = (t1/450-t2/1800+7.0/1800.0*t3+t4/450-
-                     t5/450-t6/450-t12/600+t7/600
-                     -7.0/1800.0*t8+t13/600+t9/1800-t10/600);
-  const double t17 = (-7.0/900.0*t1-2.0/225.0*t3-t4/900+t5/900
-                     +7.0/900.0*t6+t12/900-7.0/
-                     900.0*t7+2.0/225.0*t8-t13/900+7.0/900.0*t10);
-  const double t18 = (t1/450-t2/900+t3/900-t6/450+t12/900+
-                     t7/900-t8/900-t13/900+t9/900-
-                     t10/900);
-  const double t19 = (t1/900+t3/450+t4/900-t5/900-t6/900
-                     -t12/900+t7/900-t8/450+t13/900-
-                     t10/900);
-  const double t20 = (-2.0/225.0*t1+t2/900-7.0/900.0*t3+
-                     2.0/225.0*t6-t12/900-7.0/900.0*t7
-                     +7.0/900.0*t8+t13/900-t9/900+7.0/900.0*t10);
-  const double t21 = (-t1/225-t3/225+t6/225-t7/225+t8/225+t10/225);
-  const double t23 = (t1/450-7.0/1800.0*t2+t3/1800+t4/450
-                     -t5/450-t6/450+t12/600-t7/600-t8
-                     /1800-t13/600+7.0/1800.0*t9+t10/600);
-  const double t24 = (-7.0/900.0*t1+2.0/225.0*t2-t4/900+t5/900
-                     +7.0/900.0*t6-7.0/900.0*t12
-                     +t7/900+7.0/900.0*t13-2.0/225.0*t9-t10/900);
-  const double t25 = (-2.0/225.0*t1+7.0/900.0*t2-t3/900+2.0/225.0*t6
-                     -7.0/900.0*t12-t7/900
-                     +t8/900+7.0/900.0*t13-7.0/900.0*t9+t10/900);
-  const double t26 = (t1/900-t2/450+t4/900-t5/900-t6/900+t12/900
-                     -t7/900-t13/900+t9/450+
-                     t10/900);
-  const double t27 = (-t1/225+t2/225+t6/225-t12/225+t13/225-t9/225);
-  const double t29 = (t1/1800-t2/450+t3/450+7.0/1800.0*t4-7.0/1800.0*t5
-                     -t6/1800-t12/600-
-                     t7/600-t8/450+t13/600+t9/450+t10/600);
-  const double t30 = (7.0/900.0*t2-t3/900-2.0/225.0*t4+2.0/225.0*t5
-                     +t12/900+7.0/900.0*t7+
-                     t8/900-t13/900-7.0/900.0*t9-7.0/900.0*t10);
-  const double t31 = (-t1/900+2.0/225.0*t2-7.0/900.0*t4+7.0/900.0*t5
-                     +t6/900-t12/900+7.0/
-                     900.0*t7+t13/900-2.0/225.0*t9-7.0/900.0*t10);
-  const double t32 = (-t2/900+t3/900+t4/450-t5/450-t12/900-t7/900
-                     -t8/900+t13/900+t9/900+
-                     t10/900);
-  const double t33 = (t2/225-t4/225+t5/225+t7/225-t9/225-t10/225);
-  const double t35 = (-t1/900-2.0/225.0*t3-7.0/900.0*t4+7.0/900.0*t5
-                     +t6/900+7.0/900.0*t12
-                     -t7/900+2.0/225.0*t8-7.0/900.0*t13+t10/900);
-  const double t36 = (t2/900-7.0/900.0*t3-2.0/225.0*t4+2.0/225.0*t5
-                     +7.0/900.0*t12+t7/900+
-                     7.0/900.0*t8-7.0/900.0*t13-t9/900-t10/900);
-  const double t37 = (-t3/225-t4/225+t5/225+t12/225+t8/225-t13/225);
-  const double t38 = (-14.0/225.0*t1+8.0/225.0*t2-8.0/225.0*t3
-                     -2.0/225.0*t4+2.0/225.0*t5+
-                     14.0/225.0*t6-2.0/75.0*t12-2.0/75.0*t7
-                     +8.0/225.0*t8+2.0/75.0*t13-8.0/225.0*t9+
-                     2.0/75.0*t10);
-  const double t39 = (2.0/225.0*t1-2.0/225.0*t2+2.0/225.0*t3
-                     +2.0/225.0*t4-2.0/225.0*t5
-                     -2.0/225.0*t6-2.0/225.0*t8+2.0/225.0*t9);
-  const double t40 = (-8.0/225.0*t1+4.0/225.0*t2-4.0/225.0*t3
-                     +8.0/225.0*t6-4.0/225.0*t12
-                     -4.0/225.0*t7+4.0/225.0*t8+4.0/225.0*t13
-                     -4.0/225.0*t9+4.0/225.0*t10);
-  const double t41 = (-8.0/225.0*t1+14.0/225.0*t2-2.0/225.0*t3
-                     -8.0/225.0*t4+8.0/225.0*t5+
-                     8.0/225.0*t6-2.0/75.0*t12+2.0/75.0*t7
-                     +2.0/225.0*t8+2.0/75.0*t13-14.0/225.0*t9
-                     -2.0/75.0*t10);
-  const double t42 = (-4.0/225.0*t1+8.0/225.0*t2-4.0/225.0*t4
-                     +4.0/225.0*t5+4.0/225.0*t6
-                     -4.0/225.0*t12+4.0/225.0*t7+4.0/225.0*t13
-                     -8.0/225.0*t9-4.0/225.0*t10);
-  const double t43 = (-2.0/225.0*t1+8.0/225.0*t2-8.0/225.0*t3
-                     -14.0/225.0*t4+14.0/225.0*t5
-                     +2.0/225.0*t6+2.0/75.0*t12+2.0/75.0*t7
-                     +8.0/225.0*t8-2.0/75.0*t13-8.0/225.0*t9
-                     -2.0/75.0*t10);
-  const double t44 = (4.0/225.0*t2-4.0/225.0*t3-8.0/225.0*t4
-                     +8.0/225.0*t5+4.0/225.0*t12+
-                     4.0/225.0*t7+4.0/225.0*t8-4.0/225.0*t13
-                     -4.0/225.0*t9-4.0/225.0*t10);
-  const double t45 = (-8.0/225.0*t1+2.0/225.0*t2-14.0/225.0*t3
-                     -8.0/225.0*t4+8.0/225.0*t5+
-                     8.0/225.0*t6+2.0/75.0*t12-2.0/75.0*t7
-                     +14.0/225.0*t8-2.0/75.0*t13-2.0/225.0*t9+
-                     2.0/75.0*t10);
-  const double t46 = (-4.0/225.0*t1-8.0/225.0*t3-4.0/225.0*t4
-                     +4.0/225.0*t5+4.0/225.0*t6+
-                     4.0/225.0*t12-4.0/225.0*t7+8.0/225.0*t8
-                     -4.0/225.0*t13+4.0/225.0*t10);
-  
-  local_mass_matrix(0,0) = (-7.0/450.0*t1+t2/450-7.0/450.0*t3
-                           -t4/450+t5/450+7.0/450.0*t6-t7/75
-                           +7.0/450.0*t8-t9/450+t10/75);
-  local_mass_matrix(0,1) = (t14);
-  local_mass_matrix(0,2) = (t15);
-  local_mass_matrix(0,3) = (t16);
-  local_mass_matrix(0,4) = (t17);
-  local_mass_matrix(0,5) = (t18);
-  local_mass_matrix(0,6) = (t19);
-  local_mass_matrix(0,7) = (t20);
-  local_mass_matrix(0,8) = (t21);
-  local_mass_matrix(1,0) = (t14);
-  local_mass_matrix(1,1) = (-7.0/450.0*t1+7.0/450.0*t2-t3/450
-                           -t4/450+t5/450+7.0/450.0*t6-
-                           t12/75+t8/450+t13/75-7.0/450.0*t9);
-  local_mass_matrix(1,2) = (t23);
-  local_mass_matrix(1,3) = (t15);
-  local_mass_matrix(1,4) = (t24);
-  local_mass_matrix(1,5) = (t25);
-  local_mass_matrix(1,6) = (t26);
-  local_mass_matrix(1,7) = (t18);
-  local_mass_matrix(1,8) = (t27);
-  local_mass_matrix(2,0) = (t15);
-  local_mass_matrix(2,1) = (t23);
-  local_mass_matrix(2,2) = (-t1/450+7.0/450.0*t2-t3/450-7.0/450.0*t4
-                           +7.0/450.0*t5+t6/450+t7/75
-                           +t8/450-7.0/450.0*t9-t10/75);
-  local_mass_matrix(2,3) = (t29);
-  local_mass_matrix(2,4) = (t26);
-  local_mass_matrix(2,5) = (t30);
-  local_mass_matrix(2,6) = (t31);
-  local_mass_matrix(2,7) = (t32);
-  local_mass_matrix(2,8) = (t33);
-  local_mass_matrix(3,0) = (t16);
-  local_mass_matrix(3,1) = (t15);
-  local_mass_matrix(3,2) = (t29);
-  local_mass_matrix(3,3) = (-t1/450+t2/450-7.0/450.0*t3-7.0/450.0*t4
-                           +7.0/450.0*t5+t6/450+
-                           t12/75+7.0/450.0*t8-t13/75-t9/450);
-  local_mass_matrix(3,4) = (t19);
-  local_mass_matrix(3,5) = (t32);
-  local_mass_matrix(3,6) = (t35);
-  local_mass_matrix(3,7) = (t36);
-  local_mass_matrix(3,8) = (t37);
-  local_mass_matrix(4,0) = (t17);
-  local_mass_matrix(4,1) = (t24);
-  local_mass_matrix(4,2) = (t26);
-  local_mass_matrix(4,3) = (t19);
-  local_mass_matrix(4,4) = (t38);
-  local_mass_matrix(4,5) = (t27);
-  local_mass_matrix(4,6) = (t39);
-  local_mass_matrix(4,7) = (t21);
-  local_mass_matrix(4,8) = (t40);
-  local_mass_matrix(5,0) = (t18);
-  local_mass_matrix(5,1) = (t25);
-  local_mass_matrix(5,2) = (t30);
-  local_mass_matrix(5,3) = (t32);
-  local_mass_matrix(5,4) = (t27);
-  local_mass_matrix(5,5) = (t41);
-  local_mass_matrix(5,6) = (t33);
-  local_mass_matrix(5,7) = (t39);
-  local_mass_matrix(5,8) = (t42);
-  local_mass_matrix(6,0) = (t19);
-  local_mass_matrix(6,1) = (t26);
-  local_mass_matrix(6,2) = (t31);
-  local_mass_matrix(6,3) = (t35);
-  local_mass_matrix(6,4) = (t39);
-  local_mass_matrix(6,5) = (t33);
-  local_mass_matrix(6,6) = (t43);
-  local_mass_matrix(6,7) = (t37);
-  local_mass_matrix(6,8) = (t44);
-  local_mass_matrix(7,0) = (t20);
-  local_mass_matrix(7,1) = (t18);
-  local_mass_matrix(7,2) = (t32);
-  local_mass_matrix(7,3) = (t36);
-  local_mass_matrix(7,4) = (t21);
-  local_mass_matrix(7,5) = (t39);
-  local_mass_matrix(7,6) = (t37);
-  local_mass_matrix(7,7) = (t45);
-  local_mass_matrix(7,8) = (t46);
-  local_mass_matrix(8,0) = (t21);
-  local_mass_matrix(8,1) = (t27);
-  local_mass_matrix(8,2) = (t33);
-  local_mass_matrix(8,3) = (t37);
-  local_mass_matrix(8,4) = (t40);
-  local_mass_matrix(8,5) = (t42);
-  local_mass_matrix(8,6) = (t44);
-  local_mass_matrix(8,7) = (t46);
-  local_mass_matrix(8,8) = (-32.0/225.0*t1+32.0/225.0*t2-32.0/225.0*t3
-                           -32.0/225.0*t4+32.0/225.0*t5+32.0/225.0*t6
-                           +32.0/225.0*t8-32.0/225.0*t9);  
-};
-
-
-
-template <>
-void FEQ2<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-  
-  unit_points[0] = Point<2> (0,0);
-  unit_points[1] = Point<2> (1,0);
-  unit_points[2] = Point<2> (1,1);
-  unit_points[3] = Point<2> (0,1);
-  unit_points[4] = Point<2> (0.5,0);
-  unit_points[5] = Point<2> (1,0.5);
-  unit_points[6] = Point<2> (0.5,1);
-  unit_points[7] = Point<2> (0,0.5);
-  unit_points[8] = Point<2> (0.5,0.5);
-};
-
-
-
-template <>
-void FEQ2<2>::get_support_points (const DoFHandler<2>::cell_iterator &cell,
-                                 std::vector<Point<2> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (support_points.size(),
-                                                       dofs_per_cell));
-  
-  for (unsigned int vertex=0; vertex<4; ++vertex)
-    support_points[vertex] = cell->vertex(vertex);
-
-                                  // for the bilinear mapping, the centers
-                                  // of the face on the unit cell are mapped
-                                  // to the mean coordinates of the vertices
-  for (unsigned int line=0; line<4; ++line)
-    support_points[4+line] = (cell->line(line)->vertex(0) +
-                             cell->line(line)->vertex(1)) / 2;
-                                  // same for the center of the square:
-                                  // since all four linear basis functions
-                                  // take on the value 1/4 at the center,
-                                  // the center is mapped to the mean
-                                  // coordinates of the four vertices
-  support_points[8] = (support_points[0] +
-                      support_points[1] +
-                      support_points[2] +
-                      support_points[3]) / 4;
-};
-
-
-
-template <>
-void FEQ2<2>::get_face_support_points (const DoFHandler<2>::face_iterator &face,
-                                      std::vector<Point<2> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_face,
-         FiniteElementBase<2>::ExcWrongFieldDimension (support_points.size(),
-                                                       dofs_per_face));
-
-  for (unsigned int vertex=0; vertex<2; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-  support_points[2] = (support_points[0] + support_points[1]) / 2;
-};
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-FEQ2<3>::FEQ2 () :
-               FEQ1Mapping<3> (1, 1, 1, 1, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,8) = 1.0;
-  interface_constraints(1,4) = 1.0;
-  interface_constraints(2,5) = 1.0;
-  interface_constraints(3,6) = 1.0;
-  interface_constraints(4,7) = 1.0;
-  interface_constraints(5,4) = 3.0/8.0;
-  interface_constraints(5,6) = -1.0/8.0;
-  interface_constraints(5,8) = 3.0/4.0;
-  interface_constraints(6,5) = 3.0/8.0;
-  interface_constraints(6,7) = -1.0/8.0;
-  interface_constraints(6,8) = 3.0/4.0;
-  interface_constraints(7,4) = -1.0/8.0;
-  interface_constraints(7,6) = 3.0/8.0;
-  interface_constraints(7,8) = 3.0/4.0;
-  interface_constraints(8,5) = -1.0/8.0;
-  interface_constraints(8,7) = 3.0/8.0;
-  interface_constraints(8,8) = 3.0/4.0;
-  interface_constraints(9,0) = 3.0/8.0;
-  interface_constraints(9,1) = -1.0/8.0;
-  interface_constraints(9,4) = 3.0/4.0;
-  interface_constraints(10,0) = -1.0/8.0;
-  interface_constraints(10,1) = 3.0/8.0;
-  interface_constraints(10,4) = 3.0/4.0;
-  interface_constraints(11,1) = 3.0/8.0;
-  interface_constraints(11,2) = -1.0/8.0;
-  interface_constraints(11,5) = 3.0/4.0;
-  interface_constraints(12,1) = -1.0/8.0;
-  interface_constraints(12,2) = 3.0/8.0;
-  interface_constraints(12,5) = 3.0/4.0;
-  interface_constraints(13,2) = -1.0/8.0;
-  interface_constraints(13,3) = 3.0/8.0;
-  interface_constraints(13,6) = 3.0/4.0;
-  interface_constraints(14,2) = 3.0/8.0;
-  interface_constraints(14,3) = -1.0/8.0;
-  interface_constraints(14,6) = 3.0/4.0;
-  interface_constraints(15,0) = 3.0/8.0;
-  interface_constraints(15,3) = -1.0/8.0;
-  interface_constraints(15,7) = 3.0/4.0;
-  interface_constraints(16,0) = -1.0/8.0;
-  interface_constraints(16,3) = 3.0/8.0;
-  interface_constraints(16,7) = 3.0/4.0;
-  interface_constraints(17,0) = 9.0/64.0;
-  interface_constraints(17,1) = -3.0/64.0;
-  interface_constraints(17,2) = 1.0/64.0;
-  interface_constraints(17,3) = -3.0/64.0;
-  interface_constraints(17,4) = 9.0/32.0;
-  interface_constraints(17,5) = -3.0/32.0;
-  interface_constraints(17,6) = -3.0/32.0;
-  interface_constraints(17,7) = 9.0/32.0;
-  interface_constraints(17,8) = 9.0/16.0;
-  interface_constraints(18,0) = -3.0/64.0;
-  interface_constraints(18,1) = 9.0/64.0;
-  interface_constraints(18,2) = -3.0/64.0;
-  interface_constraints(18,3) = 1.0/64.0;
-  interface_constraints(18,4) = 9.0/32.0;
-  interface_constraints(18,5) = 9.0/32.0;
-  interface_constraints(18,6) = -3.0/32.0;
-  interface_constraints(18,7) = -3.0/32.0;
-  interface_constraints(18,8) = 9.0/16.0;
-  interface_constraints(19,0) = 1.0/64.0;
-  interface_constraints(19,1) = -3.0/64.0;
-  interface_constraints(19,2) = 9.0/64.0;
-  interface_constraints(19,3) = -3.0/64.0;
-  interface_constraints(19,4) = -3.0/32.0;
-  interface_constraints(19,5) = 9.0/32.0;
-  interface_constraints(19,6) = 9.0/32.0;
-  interface_constraints(19,7) = -3.0/32.0;
-  interface_constraints(19,8) = 9.0/16.0;
-  interface_constraints(20,0) = -3.0/64.0;
-  interface_constraints(20,1) = 1.0/64.0;
-  interface_constraints(20,2) = -3.0/64.0;
-  interface_constraints(20,3) = 9.0/64.0;
-  interface_constraints(20,4) = -3.0/32.0;
-  interface_constraints(20,5) = -3.0/32.0;
-  interface_constraints(20,6) = 9.0/32.0;
-  interface_constraints(20,7) = 9.0/32.0;
-  interface_constraints(20,8) = 9.0/16.0;
-
-  initialize_matrices ();
-};
-
-
-
-template <>
-FEQ2<3>::FEQ2 (const int) :
-               FEQ1Mapping<3> (0, 0, 0, 27, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-
-template <>
-void FEQ2<3>::initialize_matrices ()
-{
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,8) = 1.0;
-  prolongation[0](2,20) = 1.0;
-  prolongation[0](3,11) = 1.0;
-  prolongation[0](4,16) = 1.0;
-  prolongation[0](5,22) = 1.0;
-  prolongation[0](6,26) = 1.0;
-  prolongation[0](7,25) = 1.0;
-  prolongation[0](8,0) = 3.0/8.0;
-  prolongation[0](8,1) = -1.0/8.0;
-  prolongation[0](8,8) = 3.0/4.0;
-  prolongation[0](9,8) = 3.0/8.0;
-  prolongation[0](9,10) = -1.0/8.0;
-  prolongation[0](9,20) = 3.0/4.0;
-  prolongation[0](10,9) = -1.0/8.0;
-  prolongation[0](10,11) = 3.0/8.0;
-  prolongation[0](10,20) = 3.0/4.0;
-  prolongation[0](11,0) = 3.0/8.0;
-  prolongation[0](11,3) = -1.0/8.0;
-  prolongation[0](11,11) = 3.0/4.0;
-  prolongation[0](12,16) = 3.0/8.0;
-  prolongation[0](12,17) = -1.0/8.0;
-  prolongation[0](12,22) = 3.0/4.0;
-  prolongation[0](13,22) = 3.0/8.0;
-  prolongation[0](13,24) = -1.0/8.0;
-  prolongation[0](13,26) = 3.0/4.0;
-  prolongation[0](14,23) = -1.0/8.0;
-  prolongation[0](14,25) = 3.0/8.0;
-  prolongation[0](14,26) = 3.0/4.0;
-  prolongation[0](15,16) = 3.0/8.0;
-  prolongation[0](15,19) = -1.0/8.0;
-  prolongation[0](15,25) = 3.0/4.0;
-  prolongation[0](16,0) = 3.0/8.0;
-  prolongation[0](16,4) = -1.0/8.0;
-  prolongation[0](16,16) = 3.0/4.0;
-  prolongation[0](17,8) = 3.0/8.0;
-  prolongation[0](17,12) = -1.0/8.0;
-  prolongation[0](17,22) = 3.0/4.0;
-  prolongation[0](18,20) = 3.0/8.0;
-  prolongation[0](18,21) = -1.0/8.0;
-  prolongation[0](18,26) = 3.0/4.0;
-  prolongation[0](19,11) = 3.0/8.0;
-  prolongation[0](19,15) = -1.0/8.0;
-  prolongation[0](19,25) = 3.0/4.0;
-  prolongation[0](20,0) = 9.0/64.0;
-  prolongation[0](20,1) = -3.0/64.0;
-  prolongation[0](20,2) = 1.0/64.0;
-  prolongation[0](20,3) = -3.0/64.0;
-  prolongation[0](20,8) = 9.0/32.0;
-  prolongation[0](20,9) = -3.0/32.0;
-  prolongation[0](20,10) = -3.0/32.0;
-  prolongation[0](20,11) = 9.0/32.0;
-  prolongation[0](20,20) = 9.0/16.0;
-  prolongation[0](21,16) = 9.0/64.0;
-  prolongation[0](21,17) = -3.0/64.0;
-  prolongation[0](21,18) = 1.0/64.0;
-  prolongation[0](21,19) = -3.0/64.0;
-  prolongation[0](21,22) = 9.0/32.0;
-  prolongation[0](21,23) = -3.0/32.0;
-  prolongation[0](21,24) = -3.0/32.0;
-  prolongation[0](21,25) = 9.0/32.0;
-  prolongation[0](21,26) = 9.0/16.0;
-  prolongation[0](22,0) = 9.0/64.0;
-  prolongation[0](22,1) = -3.0/64.0;
-  prolongation[0](22,4) = -3.0/64.0;
-  prolongation[0](22,5) = 1.0/64.0;
-  prolongation[0](22,8) = 9.0/32.0;
-  prolongation[0](22,12) = -3.0/32.0;
-  prolongation[0](22,16) = 9.0/32.0;
-  prolongation[0](22,17) = -3.0/32.0;
-  prolongation[0](22,22) = 9.0/16.0;
-  prolongation[0](23,8) = 9.0/64.0;
-  prolongation[0](23,10) = -3.0/64.0;
-  prolongation[0](23,12) = -3.0/64.0;
-  prolongation[0](23,14) = 1.0/64.0;
-  prolongation[0](23,20) = 9.0/32.0;
-  prolongation[0](23,21) = -3.0/32.0;
-  prolongation[0](23,22) = 9.0/32.0;
-  prolongation[0](23,24) = -3.0/32.0;
-  prolongation[0](23,26) = 9.0/16.0;
-  prolongation[0](24,9) = -3.0/64.0;
-  prolongation[0](24,11) = 9.0/64.0;
-  prolongation[0](24,13) = 1.0/64.0;
-  prolongation[0](24,15) = -3.0/64.0;
-  prolongation[0](24,20) = 9.0/32.0;
-  prolongation[0](24,21) = -3.0/32.0;
-  prolongation[0](24,23) = -3.0/32.0;
-  prolongation[0](24,25) = 9.0/32.0;
-  prolongation[0](24,26) = 9.0/16.0;
-  prolongation[0](25,0) = 9.0/64.0;
-  prolongation[0](25,3) = -3.0/64.0;
-  prolongation[0](25,4) = -3.0/64.0;
-  prolongation[0](25,7) = 1.0/64.0;
-  prolongation[0](25,11) = 9.0/32.0;
-  prolongation[0](25,15) = -3.0/32.0;
-  prolongation[0](25,16) = 9.0/32.0;
-  prolongation[0](25,19) = -3.0/32.0;
-  prolongation[0](25,25) = 9.0/16.0;
-  prolongation[0](26,0) = 27.0/512.0;
-  prolongation[0](26,1) = -9.0/512.0;
-  prolongation[0](26,2) = 3.0/512.0;
-  prolongation[0](26,3) = -9.0/512.0;
-  prolongation[0](26,4) = -9.0/512.0;
-  prolongation[0](26,5) = 3.0/512.0;
-  prolongation[0](26,6) = -1.0/512.0;
-  prolongation[0](26,7) = 3.0/512.0;
-  prolongation[0](26,8) = 27.0/256.0;
-  prolongation[0](26,9) = -9.0/256.0;
-  prolongation[0](26,10) = -9.0/256.0;
-  prolongation[0](26,11) = 27.0/256.0;
-  prolongation[0](26,12) = -9.0/256.0;
-  prolongation[0](26,13) = 3.0/256.0;
-  prolongation[0](26,14) = 3.0/256.0;
-  prolongation[0](26,15) = -9.0/256.0;
-  prolongation[0](26,16) = 27.0/256.0;
-  prolongation[0](26,17) = -9.0/256.0;
-  prolongation[0](26,18) = 3.0/256.0;
-  prolongation[0](26,19) = -9.0/256.0;
-  prolongation[0](26,20) = 27.0/128.0;
-  prolongation[0](26,21) = -9.0/128.0;
-  prolongation[0](26,22) = 27.0/128.0;
-  prolongation[0](26,23) = -9.0/128.0;
-  prolongation[0](26,24) = -9.0/128.0;
-  prolongation[0](26,25) = 27.0/128.0;
-  prolongation[0](26,26) = 27.0/64.0;
-  prolongation[1](0,8) = 1.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,9) = 1.0;
-  prolongation[1](3,20) = 1.0;
-  prolongation[1](4,22) = 1.0;
-  prolongation[1](5,17) = 1.0;
-  prolongation[1](6,23) = 1.0;
-  prolongation[1](7,26) = 1.0;
-  prolongation[1](8,0) = -1.0/8.0;
-  prolongation[1](8,1) = 3.0/8.0;
-  prolongation[1](8,8) = 3.0/4.0;
-  prolongation[1](9,1) = 3.0/8.0;
-  prolongation[1](9,2) = -1.0/8.0;
-  prolongation[1](9,9) = 3.0/4.0;
-  prolongation[1](10,9) = 3.0/8.0;
-  prolongation[1](10,11) = -1.0/8.0;
-  prolongation[1](10,20) = 3.0/4.0;
-  prolongation[1](11,8) = 3.0/8.0;
-  prolongation[1](11,10) = -1.0/8.0;
-  prolongation[1](11,20) = 3.0/4.0;
-  prolongation[1](12,16) = -1.0/8.0;
-  prolongation[1](12,17) = 3.0/8.0;
-  prolongation[1](12,22) = 3.0/4.0;
-  prolongation[1](13,17) = 3.0/8.0;
-  prolongation[1](13,18) = -1.0/8.0;
-  prolongation[1](13,23) = 3.0/4.0;
-  prolongation[1](14,23) = 3.0/8.0;
-  prolongation[1](14,25) = -1.0/8.0;
-  prolongation[1](14,26) = 3.0/4.0;
-  prolongation[1](15,22) = 3.0/8.0;
-  prolongation[1](15,24) = -1.0/8.0;
-  prolongation[1](15,26) = 3.0/4.0;
-  prolongation[1](16,8) = 3.0/8.0;
-  prolongation[1](16,12) = -1.0/8.0;
-  prolongation[1](16,22) = 3.0/4.0;
-  prolongation[1](17,1) = 3.0/8.0;
-  prolongation[1](17,5) = -1.0/8.0;
-  prolongation[1](17,17) = 3.0/4.0;
-  prolongation[1](18,9) = 3.0/8.0;
-  prolongation[1](18,13) = -1.0/8.0;
-  prolongation[1](18,23) = 3.0/4.0;
-  prolongation[1](19,20) = 3.0/8.0;
-  prolongation[1](19,21) = -1.0/8.0;
-  prolongation[1](19,26) = 3.0/4.0;
-  prolongation[1](20,0) = -3.0/64.0;
-  prolongation[1](20,1) = 9.0/64.0;
-  prolongation[1](20,2) = -3.0/64.0;
-  prolongation[1](20,3) = 1.0/64.0;
-  prolongation[1](20,8) = 9.0/32.0;
-  prolongation[1](20,9) = 9.0/32.0;
-  prolongation[1](20,10) = -3.0/32.0;
-  prolongation[1](20,11) = -3.0/32.0;
-  prolongation[1](20,20) = 9.0/16.0;
-  prolongation[1](21,16) = -3.0/64.0;
-  prolongation[1](21,17) = 9.0/64.0;
-  prolongation[1](21,18) = -3.0/64.0;
-  prolongation[1](21,19) = 1.0/64.0;
-  prolongation[1](21,22) = 9.0/32.0;
-  prolongation[1](21,23) = 9.0/32.0;
-  prolongation[1](21,24) = -3.0/32.0;
-  prolongation[1](21,25) = -3.0/32.0;
-  prolongation[1](21,26) = 9.0/16.0;
-  prolongation[1](22,0) = -3.0/64.0;
-  prolongation[1](22,1) = 9.0/64.0;
-  prolongation[1](22,4) = 1.0/64.0;
-  prolongation[1](22,5) = -3.0/64.0;
-  prolongation[1](22,8) = 9.0/32.0;
-  prolongation[1](22,12) = -3.0/32.0;
-  prolongation[1](22,16) = -3.0/32.0;
-  prolongation[1](22,17) = 9.0/32.0;
-  prolongation[1](22,22) = 9.0/16.0;
-  prolongation[1](23,1) = 9.0/64.0;
-  prolongation[1](23,2) = -3.0/64.0;
-  prolongation[1](23,5) = -3.0/64.0;
-  prolongation[1](23,6) = 1.0/64.0;
-  prolongation[1](23,9) = 9.0/32.0;
-  prolongation[1](23,13) = -3.0/32.0;
-  prolongation[1](23,17) = 9.0/32.0;
-  prolongation[1](23,18) = -3.0/32.0;
-  prolongation[1](23,23) = 9.0/16.0;
-  prolongation[1](24,9) = 9.0/64.0;
-  prolongation[1](24,11) = -3.0/64.0;
-  prolongation[1](24,13) = -3.0/64.0;
-  prolongation[1](24,15) = 1.0/64.0;
-  prolongation[1](24,20) = 9.0/32.0;
-  prolongation[1](24,21) = -3.0/32.0;
-  prolongation[1](24,23) = 9.0/32.0;
-  prolongation[1](24,25) = -3.0/32.0;
-  prolongation[1](24,26) = 9.0/16.0;
-  prolongation[1](25,8) = 9.0/64.0;
-  prolongation[1](25,10) = -3.0/64.0;
-  prolongation[1](25,12) = -3.0/64.0;
-  prolongation[1](25,14) = 1.0/64.0;
-  prolongation[1](25,20) = 9.0/32.0;
-  prolongation[1](25,21) = -3.0/32.0;
-  prolongation[1](25,22) = 9.0/32.0;
-  prolongation[1](25,24) = -3.0/32.0;
-  prolongation[1](25,26) = 9.0/16.0;
-  prolongation[1](26,0) = -9.0/512.0;
-  prolongation[1](26,1) = 27.0/512.0;
-  prolongation[1](26,2) = -9.0/512.0;
-  prolongation[1](26,3) = 3.0/512.0;
-  prolongation[1](26,4) = 3.0/512.0;
-  prolongation[1](26,5) = -9.0/512.0;
-  prolongation[1](26,6) = 3.0/512.0;
-  prolongation[1](26,7) = -1.0/512.0;
-  prolongation[1](26,8) = 27.0/256.0;
-  prolongation[1](26,9) = 27.0/256.0;
-  prolongation[1](26,10) = -9.0/256.0;
-  prolongation[1](26,11) = -9.0/256.0;
-  prolongation[1](26,12) = -9.0/256.0;
-  prolongation[1](26,13) = -9.0/256.0;
-  prolongation[1](26,14) = 3.0/256.0;
-  prolongation[1](26,15) = 3.0/256.0;
-  prolongation[1](26,16) = -9.0/256.0;
-  prolongation[1](26,17) = 27.0/256.0;
-  prolongation[1](26,18) = -9.0/256.0;
-  prolongation[1](26,19) = 3.0/256.0;
-  prolongation[1](26,20) = 27.0/128.0;
-  prolongation[1](26,21) = -9.0/128.0;
-  prolongation[1](26,22) = 27.0/128.0;
-  prolongation[1](26,23) = 27.0/128.0;
-  prolongation[1](26,24) = -9.0/128.0;
-  prolongation[1](26,25) = -9.0/128.0;
-  prolongation[1](26,26) = 27.0/64.0;
-  prolongation[2](0,20) = 1.0;
-  prolongation[2](1,9) = 1.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](3,10) = 1.0;
-  prolongation[2](4,26) = 1.0;
-  prolongation[2](5,23) = 1.0;
-  prolongation[2](6,18) = 1.0;
-  prolongation[2](7,24) = 1.0;
-  prolongation[2](8,9) = 3.0/8.0;
-  prolongation[2](8,11) = -1.0/8.0;
-  prolongation[2](8,20) = 3.0/4.0;
-  prolongation[2](9,1) = -1.0/8.0;
-  prolongation[2](9,2) = 3.0/8.0;
-  prolongation[2](9,9) = 3.0/4.0;
-  prolongation[2](10,2) = 3.0/8.0;
-  prolongation[2](10,3) = -1.0/8.0;
-  prolongation[2](10,10) = 3.0/4.0;
-  prolongation[2](11,8) = -1.0/8.0;
-  prolongation[2](11,10) = 3.0/8.0;
-  prolongation[2](11,20) = 3.0/4.0;
-  prolongation[2](12,23) = 3.0/8.0;
-  prolongation[2](12,25) = -1.0/8.0;
-  prolongation[2](12,26) = 3.0/4.0;
-  prolongation[2](13,17) = -1.0/8.0;
-  prolongation[2](13,18) = 3.0/8.0;
-  prolongation[2](13,23) = 3.0/4.0;
-  prolongation[2](14,18) = 3.0/8.0;
-  prolongation[2](14,19) = -1.0/8.0;
-  prolongation[2](14,24) = 3.0/4.0;
-  prolongation[2](15,22) = -1.0/8.0;
-  prolongation[2](15,24) = 3.0/8.0;
-  prolongation[2](15,26) = 3.0/4.0;
-  prolongation[2](16,20) = 3.0/8.0;
-  prolongation[2](16,21) = -1.0/8.0;
-  prolongation[2](16,26) = 3.0/4.0;
-  prolongation[2](17,9) = 3.0/8.0;
-  prolongation[2](17,13) = -1.0/8.0;
-  prolongation[2](17,23) = 3.0/4.0;
-  prolongation[2](18,2) = 3.0/8.0;
-  prolongation[2](18,6) = -1.0/8.0;
-  prolongation[2](18,18) = 3.0/4.0;
-  prolongation[2](19,10) = 3.0/8.0;
-  prolongation[2](19,14) = -1.0/8.0;
-  prolongation[2](19,24) = 3.0/4.0;
-  prolongation[2](20,0) = 1.0/64.0;
-  prolongation[2](20,1) = -3.0/64.0;
-  prolongation[2](20,2) = 9.0/64.0;
-  prolongation[2](20,3) = -3.0/64.0;
-  prolongation[2](20,8) = -3.0/32.0;
-  prolongation[2](20,9) = 9.0/32.0;
-  prolongation[2](20,10) = 9.0/32.0;
-  prolongation[2](20,11) = -3.0/32.0;
-  prolongation[2](20,20) = 9.0/16.0;
-  prolongation[2](21,16) = 1.0/64.0;
-  prolongation[2](21,17) = -3.0/64.0;
-  prolongation[2](21,18) = 9.0/64.0;
-  prolongation[2](21,19) = -3.0/64.0;
-  prolongation[2](21,22) = -3.0/32.0;
-  prolongation[2](21,23) = 9.0/32.0;
-  prolongation[2](21,24) = 9.0/32.0;
-  prolongation[2](21,25) = -3.0/32.0;
-  prolongation[2](21,26) = 9.0/16.0;
-  prolongation[2](22,9) = 9.0/64.0;
-  prolongation[2](22,11) = -3.0/64.0;
-  prolongation[2](22,13) = -3.0/64.0;
-  prolongation[2](22,15) = 1.0/64.0;
-  prolongation[2](22,20) = 9.0/32.0;
-  prolongation[2](22,21) = -3.0/32.0;
-  prolongation[2](22,23) = 9.0/32.0;
-  prolongation[2](22,25) = -3.0/32.0;
-  prolongation[2](22,26) = 9.0/16.0;
-  prolongation[2](23,1) = -3.0/64.0;
-  prolongation[2](23,2) = 9.0/64.0;
-  prolongation[2](23,5) = 1.0/64.0;
-  prolongation[2](23,6) = -3.0/64.0;
-  prolongation[2](23,9) = 9.0/32.0;
-  prolongation[2](23,13) = -3.0/32.0;
-  prolongation[2](23,17) = -3.0/32.0;
-  prolongation[2](23,18) = 9.0/32.0;
-  prolongation[2](23,23) = 9.0/16.0;
-  prolongation[2](24,2) = 9.0/64.0;
-  prolongation[2](24,3) = -3.0/64.0;
-  prolongation[2](24,6) = -3.0/64.0;
-  prolongation[2](24,7) = 1.0/64.0;
-  prolongation[2](24,10) = 9.0/32.0;
-  prolongation[2](24,14) = -3.0/32.0;
-  prolongation[2](24,18) = 9.0/32.0;
-  prolongation[2](24,19) = -3.0/32.0;
-  prolongation[2](24,24) = 9.0/16.0;
-  prolongation[2](25,8) = -3.0/64.0;
-  prolongation[2](25,10) = 9.0/64.0;
-  prolongation[2](25,12) = 1.0/64.0;
-  prolongation[2](25,14) = -3.0/64.0;
-  prolongation[2](25,20) = 9.0/32.0;
-  prolongation[2](25,21) = -3.0/32.0;
-  prolongation[2](25,22) = -3.0/32.0;
-  prolongation[2](25,24) = 9.0/32.0;
-  prolongation[2](25,26) = 9.0/16.0;
-  prolongation[2](26,0) = 3.0/512.0;
-  prolongation[2](26,1) = -9.0/512.0;
-  prolongation[2](26,2) = 27.0/512.0;
-  prolongation[2](26,3) = -9.0/512.0;
-  prolongation[2](26,4) = -1.0/512.0;
-  prolongation[2](26,5) = 3.0/512.0;
-  prolongation[2](26,6) = -9.0/512.0;
-  prolongation[2](26,7) = 3.0/512.0;
-  prolongation[2](26,8) = -9.0/256.0;
-  prolongation[2](26,9) = 27.0/256.0;
-  prolongation[2](26,10) = 27.0/256.0;
-  prolongation[2](26,11) = -9.0/256.0;
-  prolongation[2](26,12) = 3.0/256.0;
-  prolongation[2](26,13) = -9.0/256.0;
-  prolongation[2](26,14) = -9.0/256.0;
-  prolongation[2](26,15) = 3.0/256.0;
-  prolongation[2](26,16) = 3.0/256.0;
-  prolongation[2](26,17) = -9.0/256.0;
-  prolongation[2](26,18) = 27.0/256.0;
-  prolongation[2](26,19) = -9.0/256.0;
-  prolongation[2](26,20) = 27.0/128.0;
-  prolongation[2](26,21) = -9.0/128.0;
-  prolongation[2](26,22) = -9.0/128.0;
-  prolongation[2](26,23) = 27.0/128.0;
-  prolongation[2](26,24) = 27.0/128.0;
-  prolongation[2](26,25) = -9.0/128.0;
-  prolongation[2](26,26) = 27.0/64.0;
-  prolongation[3](0,11) = 1.0;
-  prolongation[3](1,20) = 1.0;
-  prolongation[3](2,10) = 1.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](4,25) = 1.0;
-  prolongation[3](5,26) = 1.0;
-  prolongation[3](6,24) = 1.0;
-  prolongation[3](7,19) = 1.0;
-  prolongation[3](8,9) = -1.0/8.0;
-  prolongation[3](8,11) = 3.0/8.0;
-  prolongation[3](8,20) = 3.0/4.0;
-  prolongation[3](9,8) = -1.0/8.0;
-  prolongation[3](9,10) = 3.0/8.0;
-  prolongation[3](9,20) = 3.0/4.0;
-  prolongation[3](10,2) = -1.0/8.0;
-  prolongation[3](10,3) = 3.0/8.0;
-  prolongation[3](10,10) = 3.0/4.0;
-  prolongation[3](11,0) = -1.0/8.0;
-  prolongation[3](11,3) = 3.0/8.0;
-  prolongation[3](11,11) = 3.0/4.0;
-  prolongation[3](12,23) = -1.0/8.0;
-  prolongation[3](12,25) = 3.0/8.0;
-  prolongation[3](12,26) = 3.0/4.0;
-  prolongation[3](13,22) = -1.0/8.0;
-  prolongation[3](13,24) = 3.0/8.0;
-  prolongation[3](13,26) = 3.0/4.0;
-  prolongation[3](14,18) = -1.0/8.0;
-  prolongation[3](14,19) = 3.0/8.0;
-  prolongation[3](14,24) = 3.0/4.0;
-  prolongation[3](15,16) = -1.0/8.0;
-  prolongation[3](15,19) = 3.0/8.0;
-  prolongation[3](15,25) = 3.0/4.0;
-  prolongation[3](16,11) = 3.0/8.0;
-  prolongation[3](16,15) = -1.0/8.0;
-  prolongation[3](16,25) = 3.0/4.0;
-  prolongation[3](17,20) = 3.0/8.0;
-  prolongation[3](17,21) = -1.0/8.0;
-  prolongation[3](17,26) = 3.0/4.0;
-  prolongation[3](18,10) = 3.0/8.0;
-  prolongation[3](18,14) = -1.0/8.0;
-  prolongation[3](18,24) = 3.0/4.0;
-  prolongation[3](19,3) = 3.0/8.0;
-  prolongation[3](19,7) = -1.0/8.0;
-  prolongation[3](19,19) = 3.0/4.0;
-  prolongation[3](20,0) = -3.0/64.0;
-  prolongation[3](20,1) = 1.0/64.0;
-  prolongation[3](20,2) = -3.0/64.0;
-  prolongation[3](20,3) = 9.0/64.0;
-  prolongation[3](20,8) = -3.0/32.0;
-  prolongation[3](20,9) = -3.0/32.0;
-  prolongation[3](20,10) = 9.0/32.0;
-  prolongation[3](20,11) = 9.0/32.0;
-  prolongation[3](20,20) = 9.0/16.0;
-  prolongation[3](21,16) = -3.0/64.0;
-  prolongation[3](21,17) = 1.0/64.0;
-  prolongation[3](21,18) = -3.0/64.0;
-  prolongation[3](21,19) = 9.0/64.0;
-  prolongation[3](21,22) = -3.0/32.0;
-  prolongation[3](21,23) = -3.0/32.0;
-  prolongation[3](21,24) = 9.0/32.0;
-  prolongation[3](21,25) = 9.0/32.0;
-  prolongation[3](21,26) = 9.0/16.0;
-  prolongation[3](22,9) = -3.0/64.0;
-  prolongation[3](22,11) = 9.0/64.0;
-  prolongation[3](22,13) = 1.0/64.0;
-  prolongation[3](22,15) = -3.0/64.0;
-  prolongation[3](22,20) = 9.0/32.0;
-  prolongation[3](22,21) = -3.0/32.0;
-  prolongation[3](22,23) = -3.0/32.0;
-  prolongation[3](22,25) = 9.0/32.0;
-  prolongation[3](22,26) = 9.0/16.0;
-  prolongation[3](23,8) = -3.0/64.0;
-  prolongation[3](23,10) = 9.0/64.0;
-  prolongation[3](23,12) = 1.0/64.0;
-  prolongation[3](23,14) = -3.0/64.0;
-  prolongation[3](23,20) = 9.0/32.0;
-  prolongation[3](23,21) = -3.0/32.0;
-  prolongation[3](23,22) = -3.0/32.0;
-  prolongation[3](23,24) = 9.0/32.0;
-  prolongation[3](23,26) = 9.0/16.0;
-  prolongation[3](24,2) = -3.0/64.0;
-  prolongation[3](24,3) = 9.0/64.0;
-  prolongation[3](24,6) = 1.0/64.0;
-  prolongation[3](24,7) = -3.0/64.0;
-  prolongation[3](24,10) = 9.0/32.0;
-  prolongation[3](24,14) = -3.0/32.0;
-  prolongation[3](24,18) = -3.0/32.0;
-  prolongation[3](24,19) = 9.0/32.0;
-  prolongation[3](24,24) = 9.0/16.0;
-  prolongation[3](25,0) = -3.0/64.0;
-  prolongation[3](25,3) = 9.0/64.0;
-  prolongation[3](25,4) = 1.0/64.0;
-  prolongation[3](25,7) = -3.0/64.0;
-  prolongation[3](25,11) = 9.0/32.0;
-  prolongation[3](25,15) = -3.0/32.0;
-  prolongation[3](25,16) = -3.0/32.0;
-  prolongation[3](25,19) = 9.0/32.0;
-  prolongation[3](25,25) = 9.0/16.0;
-  prolongation[3](26,0) = -9.0/512.0;
-  prolongation[3](26,1) = 3.0/512.0;
-  prolongation[3](26,2) = -9.0/512.0;
-  prolongation[3](26,3) = 27.0/512.0;
-  prolongation[3](26,4) = 3.0/512.0;
-  prolongation[3](26,5) = -1.0/512.0;
-  prolongation[3](26,6) = 3.0/512.0;
-  prolongation[3](26,7) = -9.0/512.0;
-  prolongation[3](26,8) = -9.0/256.0;
-  prolongation[3](26,9) = -9.0/256.0;
-  prolongation[3](26,10) = 27.0/256.0;
-  prolongation[3](26,11) = 27.0/256.0;
-  prolongation[3](26,12) = 3.0/256.0;
-  prolongation[3](26,13) = 3.0/256.0;
-  prolongation[3](26,14) = -9.0/256.0;
-  prolongation[3](26,15) = -9.0/256.0;
-  prolongation[3](26,16) = -9.0/256.0;
-  prolongation[3](26,17) = 3.0/256.0;
-  prolongation[3](26,18) = -9.0/256.0;
-  prolongation[3](26,19) = 27.0/256.0;
-  prolongation[3](26,20) = 27.0/128.0;
-  prolongation[3](26,21) = -9.0/128.0;
-  prolongation[3](26,22) = -9.0/128.0;
-  prolongation[3](26,23) = -9.0/128.0;
-  prolongation[3](26,24) = 27.0/128.0;
-  prolongation[3](26,25) = 27.0/128.0;
-  prolongation[3](26,26) = 27.0/64.0;
-  prolongation[4](0,16) = 1.0;
-  prolongation[4](1,22) = 1.0;
-  prolongation[4](2,26) = 1.0;
-  prolongation[4](3,25) = 1.0;
-  prolongation[4](4,4) = 1.0;
-  prolongation[4](5,12) = 1.0;
-  prolongation[4](6,21) = 1.0;
-  prolongation[4](7,15) = 1.0;
-  prolongation[4](8,16) = 3.0/8.0;
-  prolongation[4](8,17) = -1.0/8.0;
-  prolongation[4](8,22) = 3.0/4.0;
-  prolongation[4](9,22) = 3.0/8.0;
-  prolongation[4](9,24) = -1.0/8.0;
-  prolongation[4](9,26) = 3.0/4.0;
-  prolongation[4](10,23) = -1.0/8.0;
-  prolongation[4](10,25) = 3.0/8.0;
-  prolongation[4](10,26) = 3.0/4.0;
-  prolongation[4](11,16) = 3.0/8.0;
-  prolongation[4](11,19) = -1.0/8.0;
-  prolongation[4](11,25) = 3.0/4.0;
-  prolongation[4](12,4) = 3.0/8.0;
-  prolongation[4](12,5) = -1.0/8.0;
-  prolongation[4](12,12) = 3.0/4.0;
-  prolongation[4](13,12) = 3.0/8.0;
-  prolongation[4](13,14) = -1.0/8.0;
-  prolongation[4](13,21) = 3.0/4.0;
-  prolongation[4](14,13) = -1.0/8.0;
-  prolongation[4](14,15) = 3.0/8.0;
-  prolongation[4](14,21) = 3.0/4.0;
-  prolongation[4](15,4) = 3.0/8.0;
-  prolongation[4](15,7) = -1.0/8.0;
-  prolongation[4](15,15) = 3.0/4.0;
-  prolongation[4](16,0) = -1.0/8.0;
-  prolongation[4](16,4) = 3.0/8.0;
-  prolongation[4](16,16) = 3.0/4.0;
-  prolongation[4](17,8) = -1.0/8.0;
-  prolongation[4](17,12) = 3.0/8.0;
-  prolongation[4](17,22) = 3.0/4.0;
-  prolongation[4](18,20) = -1.0/8.0;
-  prolongation[4](18,21) = 3.0/8.0;
-  prolongation[4](18,26) = 3.0/4.0;
-  prolongation[4](19,11) = -1.0/8.0;
-  prolongation[4](19,15) = 3.0/8.0;
-  prolongation[4](19,25) = 3.0/4.0;
-  prolongation[4](20,16) = 9.0/64.0;
-  prolongation[4](20,17) = -3.0/64.0;
-  prolongation[4](20,18) = 1.0/64.0;
-  prolongation[4](20,19) = -3.0/64.0;
-  prolongation[4](20,22) = 9.0/32.0;
-  prolongation[4](20,23) = -3.0/32.0;
-  prolongation[4](20,24) = -3.0/32.0;
-  prolongation[4](20,25) = 9.0/32.0;
-  prolongation[4](20,26) = 9.0/16.0;
-  prolongation[4](21,4) = 9.0/64.0;
-  prolongation[4](21,5) = -3.0/64.0;
-  prolongation[4](21,6) = 1.0/64.0;
-  prolongation[4](21,7) = -3.0/64.0;
-  prolongation[4](21,12) = 9.0/32.0;
-  prolongation[4](21,13) = -3.0/32.0;
-  prolongation[4](21,14) = -3.0/32.0;
-  prolongation[4](21,15) = 9.0/32.0;
-  prolongation[4](21,21) = 9.0/16.0;
-  prolongation[4](22,0) = -3.0/64.0;
-  prolongation[4](22,1) = 1.0/64.0;
-  prolongation[4](22,4) = 9.0/64.0;
-  prolongation[4](22,5) = -3.0/64.0;
-  prolongation[4](22,8) = -3.0/32.0;
-  prolongation[4](22,12) = 9.0/32.0;
-  prolongation[4](22,16) = 9.0/32.0;
-  prolongation[4](22,17) = -3.0/32.0;
-  prolongation[4](22,22) = 9.0/16.0;
-  prolongation[4](23,8) = -3.0/64.0;
-  prolongation[4](23,10) = 1.0/64.0;
-  prolongation[4](23,12) = 9.0/64.0;
-  prolongation[4](23,14) = -3.0/64.0;
-  prolongation[4](23,20) = -3.0/32.0;
-  prolongation[4](23,21) = 9.0/32.0;
-  prolongation[4](23,22) = 9.0/32.0;
-  prolongation[4](23,24) = -3.0/32.0;
-  prolongation[4](23,26) = 9.0/16.0;
-  prolongation[4](24,9) = 1.0/64.0;
-  prolongation[4](24,11) = -3.0/64.0;
-  prolongation[4](24,13) = -3.0/64.0;
-  prolongation[4](24,15) = 9.0/64.0;
-  prolongation[4](24,20) = -3.0/32.0;
-  prolongation[4](24,21) = 9.0/32.0;
-  prolongation[4](24,23) = -3.0/32.0;
-  prolongation[4](24,25) = 9.0/32.0;
-  prolongation[4](24,26) = 9.0/16.0;
-  prolongation[4](25,0) = -3.0/64.0;
-  prolongation[4](25,3) = 1.0/64.0;
-  prolongation[4](25,4) = 9.0/64.0;
-  prolongation[4](25,7) = -3.0/64.0;
-  prolongation[4](25,11) = -3.0/32.0;
-  prolongation[4](25,15) = 9.0/32.0;
-  prolongation[4](25,16) = 9.0/32.0;
-  prolongation[4](25,19) = -3.0/32.0;
-  prolongation[4](25,25) = 9.0/16.0;
-  prolongation[4](26,0) = -9.0/512.0;
-  prolongation[4](26,1) = 3.0/512.0;
-  prolongation[4](26,2) = -1.0/512.0;
-  prolongation[4](26,3) = 3.0/512.0;
-  prolongation[4](26,4) = 27.0/512.0;
-  prolongation[4](26,5) = -9.0/512.0;
-  prolongation[4](26,6) = 3.0/512.0;
-  prolongation[4](26,7) = -9.0/512.0;
-  prolongation[4](26,8) = -9.0/256.0;
-  prolongation[4](26,9) = 3.0/256.0;
-  prolongation[4](26,10) = 3.0/256.0;
-  prolongation[4](26,11) = -9.0/256.0;
-  prolongation[4](26,12) = 27.0/256.0;
-  prolongation[4](26,13) = -9.0/256.0;
-  prolongation[4](26,14) = -9.0/256.0;
-  prolongation[4](26,15) = 27.0/256.0;
-  prolongation[4](26,16) = 27.0/256.0;
-  prolongation[4](26,17) = -9.0/256.0;
-  prolongation[4](26,18) = 3.0/256.0;
-  prolongation[4](26,19) = -9.0/256.0;
-  prolongation[4](26,20) = -9.0/128.0;
-  prolongation[4](26,21) = 27.0/128.0;
-  prolongation[4](26,22) = 27.0/128.0;
-  prolongation[4](26,23) = -9.0/128.0;
-  prolongation[4](26,24) = -9.0/128.0;
-  prolongation[4](26,25) = 27.0/128.0;
-  prolongation[4](26,26) = 27.0/64.0;
-  prolongation[5](0,22) = 1.0;
-  prolongation[5](1,17) = 1.0;
-  prolongation[5](2,23) = 1.0;
-  prolongation[5](3,26) = 1.0;
-  prolongation[5](4,12) = 1.0;
-  prolongation[5](5,5) = 1.0;
-  prolongation[5](6,13) = 1.0;
-  prolongation[5](7,21) = 1.0;
-  prolongation[5](8,16) = -1.0/8.0;
-  prolongation[5](8,17) = 3.0/8.0;
-  prolongation[5](8,22) = 3.0/4.0;
-  prolongation[5](9,17) = 3.0/8.0;
-  prolongation[5](9,18) = -1.0/8.0;
-  prolongation[5](9,23) = 3.0/4.0;
-  prolongation[5](10,23) = 3.0/8.0;
-  prolongation[5](10,25) = -1.0/8.0;
-  prolongation[5](10,26) = 3.0/4.0;
-  prolongation[5](11,22) = 3.0/8.0;
-  prolongation[5](11,24) = -1.0/8.0;
-  prolongation[5](11,26) = 3.0/4.0;
-  prolongation[5](12,4) = -1.0/8.0;
-  prolongation[5](12,5) = 3.0/8.0;
-  prolongation[5](12,12) = 3.0/4.0;
-  prolongation[5](13,5) = 3.0/8.0;
-  prolongation[5](13,6) = -1.0/8.0;
-  prolongation[5](13,13) = 3.0/4.0;
-  prolongation[5](14,13) = 3.0/8.0;
-  prolongation[5](14,15) = -1.0/8.0;
-  prolongation[5](14,21) = 3.0/4.0;
-  prolongation[5](15,12) = 3.0/8.0;
-  prolongation[5](15,14) = -1.0/8.0;
-  prolongation[5](15,21) = 3.0/4.0;
-  prolongation[5](16,8) = -1.0/8.0;
-  prolongation[5](16,12) = 3.0/8.0;
-  prolongation[5](16,22) = 3.0/4.0;
-  prolongation[5](17,1) = -1.0/8.0;
-  prolongation[5](17,5) = 3.0/8.0;
-  prolongation[5](17,17) = 3.0/4.0;
-  prolongation[5](18,9) = -1.0/8.0;
-  prolongation[5](18,13) = 3.0/8.0;
-  prolongation[5](18,23) = 3.0/4.0;
-  prolongation[5](19,20) = -1.0/8.0;
-  prolongation[5](19,21) = 3.0/8.0;
-  prolongation[5](19,26) = 3.0/4.0;
-  prolongation[5](20,16) = -3.0/64.0;
-  prolongation[5](20,17) = 9.0/64.0;
-  prolongation[5](20,18) = -3.0/64.0;
-  prolongation[5](20,19) = 1.0/64.0;
-  prolongation[5](20,22) = 9.0/32.0;
-  prolongation[5](20,23) = 9.0/32.0;
-  prolongation[5](20,24) = -3.0/32.0;
-  prolongation[5](20,25) = -3.0/32.0;
-  prolongation[5](20,26) = 9.0/16.0;
-  prolongation[5](21,4) = -3.0/64.0;
-  prolongation[5](21,5) = 9.0/64.0;
-  prolongation[5](21,6) = -3.0/64.0;
-  prolongation[5](21,7) = 1.0/64.0;
-  prolongation[5](21,12) = 9.0/32.0;
-  prolongation[5](21,13) = 9.0/32.0;
-  prolongation[5](21,14) = -3.0/32.0;
-  prolongation[5](21,15) = -3.0/32.0;
-  prolongation[5](21,21) = 9.0/16.0;
-  prolongation[5](22,0) = 1.0/64.0;
-  prolongation[5](22,1) = -3.0/64.0;
-  prolongation[5](22,4) = -3.0/64.0;
-  prolongation[5](22,5) = 9.0/64.0;
-  prolongation[5](22,8) = -3.0/32.0;
-  prolongation[5](22,12) = 9.0/32.0;
-  prolongation[5](22,16) = -3.0/32.0;
-  prolongation[5](22,17) = 9.0/32.0;
-  prolongation[5](22,22) = 9.0/16.0;
-  prolongation[5](23,1) = -3.0/64.0;
-  prolongation[5](23,2) = 1.0/64.0;
-  prolongation[5](23,5) = 9.0/64.0;
-  prolongation[5](23,6) = -3.0/64.0;
-  prolongation[5](23,9) = -3.0/32.0;
-  prolongation[5](23,13) = 9.0/32.0;
-  prolongation[5](23,17) = 9.0/32.0;
-  prolongation[5](23,18) = -3.0/32.0;
-  prolongation[5](23,23) = 9.0/16.0;
-  prolongation[5](24,9) = -3.0/64.0;
-  prolongation[5](24,11) = 1.0/64.0;
-  prolongation[5](24,13) = 9.0/64.0;
-  prolongation[5](24,15) = -3.0/64.0;
-  prolongation[5](24,20) = -3.0/32.0;
-  prolongation[5](24,21) = 9.0/32.0;
-  prolongation[5](24,23) = 9.0/32.0;
-  prolongation[5](24,25) = -3.0/32.0;
-  prolongation[5](24,26) = 9.0/16.0;
-  prolongation[5](25,8) = -3.0/64.0;
-  prolongation[5](25,10) = 1.0/64.0;
-  prolongation[5](25,12) = 9.0/64.0;
-  prolongation[5](25,14) = -3.0/64.0;
-  prolongation[5](25,20) = -3.0/32.0;
-  prolongation[5](25,21) = 9.0/32.0;
-  prolongation[5](25,22) = 9.0/32.0;
-  prolongation[5](25,24) = -3.0/32.0;
-  prolongation[5](25,26) = 9.0/16.0;
-  prolongation[5](26,0) = 3.0/512.0;
-  prolongation[5](26,1) = -9.0/512.0;
-  prolongation[5](26,2) = 3.0/512.0;
-  prolongation[5](26,3) = -1.0/512.0;
-  prolongation[5](26,4) = -9.0/512.0;
-  prolongation[5](26,5) = 27.0/512.0;
-  prolongation[5](26,6) = -9.0/512.0;
-  prolongation[5](26,7) = 3.0/512.0;
-  prolongation[5](26,8) = -9.0/256.0;
-  prolongation[5](26,9) = -9.0/256.0;
-  prolongation[5](26,10) = 3.0/256.0;
-  prolongation[5](26,11) = 3.0/256.0;
-  prolongation[5](26,12) = 27.0/256.0;
-  prolongation[5](26,13) = 27.0/256.0;
-  prolongation[5](26,14) = -9.0/256.0;
-  prolongation[5](26,15) = -9.0/256.0;
-  prolongation[5](26,16) = -9.0/256.0;
-  prolongation[5](26,17) = 27.0/256.0;
-  prolongation[5](26,18) = -9.0/256.0;
-  prolongation[5](26,19) = 3.0/256.0;
-  prolongation[5](26,20) = -9.0/128.0;
-  prolongation[5](26,21) = 27.0/128.0;
-  prolongation[5](26,22) = 27.0/128.0;
-  prolongation[5](26,23) = 27.0/128.0;
-  prolongation[5](26,24) = -9.0/128.0;
-  prolongation[5](26,25) = -9.0/128.0;
-  prolongation[5](26,26) = 27.0/64.0;
-  prolongation[6](0,26) = 1.0;
-  prolongation[6](1,23) = 1.0;
-  prolongation[6](2,18) = 1.0;
-  prolongation[6](3,24) = 1.0;
-  prolongation[6](4,21) = 1.0;
-  prolongation[6](5,13) = 1.0;
-  prolongation[6](6,6) = 1.0;
-  prolongation[6](7,14) = 1.0;
-  prolongation[6](8,23) = 3.0/8.0;
-  prolongation[6](8,25) = -1.0/8.0;
-  prolongation[6](8,26) = 3.0/4.0;
-  prolongation[6](9,17) = -1.0/8.0;
-  prolongation[6](9,18) = 3.0/8.0;
-  prolongation[6](9,23) = 3.0/4.0;
-  prolongation[6](10,18) = 3.0/8.0;
-  prolongation[6](10,19) = -1.0/8.0;
-  prolongation[6](10,24) = 3.0/4.0;
-  prolongation[6](11,22) = -1.0/8.0;
-  prolongation[6](11,24) = 3.0/8.0;
-  prolongation[6](11,26) = 3.0/4.0;
-  prolongation[6](12,13) = 3.0/8.0;
-  prolongation[6](12,15) = -1.0/8.0;
-  prolongation[6](12,21) = 3.0/4.0;
-  prolongation[6](13,5) = -1.0/8.0;
-  prolongation[6](13,6) = 3.0/8.0;
-  prolongation[6](13,13) = 3.0/4.0;
-  prolongation[6](14,6) = 3.0/8.0;
-  prolongation[6](14,7) = -1.0/8.0;
-  prolongation[6](14,14) = 3.0/4.0;
-  prolongation[6](15,12) = -1.0/8.0;
-  prolongation[6](15,14) = 3.0/8.0;
-  prolongation[6](15,21) = 3.0/4.0;
-  prolongation[6](16,20) = -1.0/8.0;
-  prolongation[6](16,21) = 3.0/8.0;
-  prolongation[6](16,26) = 3.0/4.0;
-  prolongation[6](17,9) = -1.0/8.0;
-  prolongation[6](17,13) = 3.0/8.0;
-  prolongation[6](17,23) = 3.0/4.0;
-  prolongation[6](18,2) = -1.0/8.0;
-  prolongation[6](18,6) = 3.0/8.0;
-  prolongation[6](18,18) = 3.0/4.0;
-  prolongation[6](19,10) = -1.0/8.0;
-  prolongation[6](19,14) = 3.0/8.0;
-  prolongation[6](19,24) = 3.0/4.0;
-  prolongation[6](20,16) = 1.0/64.0;
-  prolongation[6](20,17) = -3.0/64.0;
-  prolongation[6](20,18) = 9.0/64.0;
-  prolongation[6](20,19) = -3.0/64.0;
-  prolongation[6](20,22) = -3.0/32.0;
-  prolongation[6](20,23) = 9.0/32.0;
-  prolongation[6](20,24) = 9.0/32.0;
-  prolongation[6](20,25) = -3.0/32.0;
-  prolongation[6](20,26) = 9.0/16.0;
-  prolongation[6](21,4) = 1.0/64.0;
-  prolongation[6](21,5) = -3.0/64.0;
-  prolongation[6](21,6) = 9.0/64.0;
-  prolongation[6](21,7) = -3.0/64.0;
-  prolongation[6](21,12) = -3.0/32.0;
-  prolongation[6](21,13) = 9.0/32.0;
-  prolongation[6](21,14) = 9.0/32.0;
-  prolongation[6](21,15) = -3.0/32.0;
-  prolongation[6](21,21) = 9.0/16.0;
-  prolongation[6](22,9) = -3.0/64.0;
-  prolongation[6](22,11) = 1.0/64.0;
-  prolongation[6](22,13) = 9.0/64.0;
-  prolongation[6](22,15) = -3.0/64.0;
-  prolongation[6](22,20) = -3.0/32.0;
-  prolongation[6](22,21) = 9.0/32.0;
-  prolongation[6](22,23) = 9.0/32.0;
-  prolongation[6](22,25) = -3.0/32.0;
-  prolongation[6](22,26) = 9.0/16.0;
-  prolongation[6](23,1) = 1.0/64.0;
-  prolongation[6](23,2) = -3.0/64.0;
-  prolongation[6](23,5) = -3.0/64.0;
-  prolongation[6](23,6) = 9.0/64.0;
-  prolongation[6](23,9) = -3.0/32.0;
-  prolongation[6](23,13) = 9.0/32.0;
-  prolongation[6](23,17) = -3.0/32.0;
-  prolongation[6](23,18) = 9.0/32.0;
-  prolongation[6](23,23) = 9.0/16.0;
-  prolongation[6](24,2) = -3.0/64.0;
-  prolongation[6](24,3) = 1.0/64.0;
-  prolongation[6](24,6) = 9.0/64.0;
-  prolongation[6](24,7) = -3.0/64.0;
-  prolongation[6](24,10) = -3.0/32.0;
-  prolongation[6](24,14) = 9.0/32.0;
-  prolongation[6](24,18) = 9.0/32.0;
-  prolongation[6](24,19) = -3.0/32.0;
-  prolongation[6](24,24) = 9.0/16.0;
-  prolongation[6](25,8) = 1.0/64.0;
-  prolongation[6](25,10) = -3.0/64.0;
-  prolongation[6](25,12) = -3.0/64.0;
-  prolongation[6](25,14) = 9.0/64.0;
-  prolongation[6](25,20) = -3.0/32.0;
-  prolongation[6](25,21) = 9.0/32.0;
-  prolongation[6](25,22) = -3.0/32.0;
-  prolongation[6](25,24) = 9.0/32.0;
-  prolongation[6](25,26) = 9.0/16.0;
-  prolongation[6](26,0) = -1.0/512.0;
-  prolongation[6](26,1) = 3.0/512.0;
-  prolongation[6](26,2) = -9.0/512.0;
-  prolongation[6](26,3) = 3.0/512.0;
-  prolongation[6](26,4) = 3.0/512.0;
-  prolongation[6](26,5) = -9.0/512.0;
-  prolongation[6](26,6) = 27.0/512.0;
-  prolongation[6](26,7) = -9.0/512.0;
-  prolongation[6](26,8) = 3.0/256.0;
-  prolongation[6](26,9) = -9.0/256.0;
-  prolongation[6](26,10) = -9.0/256.0;
-  prolongation[6](26,11) = 3.0/256.0;
-  prolongation[6](26,12) = -9.0/256.0;
-  prolongation[6](26,13) = 27.0/256.0;
-  prolongation[6](26,14) = 27.0/256.0;
-  prolongation[6](26,15) = -9.0/256.0;
-  prolongation[6](26,16) = 3.0/256.0;
-  prolongation[6](26,17) = -9.0/256.0;
-  prolongation[6](26,18) = 27.0/256.0;
-  prolongation[6](26,19) = -9.0/256.0;
-  prolongation[6](26,20) = -9.0/128.0;
-  prolongation[6](26,21) = 27.0/128.0;
-  prolongation[6](26,22) = -9.0/128.0;
-  prolongation[6](26,23) = 27.0/128.0;
-  prolongation[6](26,24) = 27.0/128.0;
-  prolongation[6](26,25) = -9.0/128.0;
-  prolongation[6](26,26) = 27.0/64.0;
-  prolongation[7](0,25) = 1.0;
-  prolongation[7](1,26) = 1.0;
-  prolongation[7](2,24) = 1.0;
-  prolongation[7](3,19) = 1.0;
-  prolongation[7](4,15) = 1.0;
-  prolongation[7](5,21) = 1.0;
-  prolongation[7](6,14) = 1.0;
-  prolongation[7](7,7) = 1.0;
-  prolongation[7](8,23) = -1.0/8.0;
-  prolongation[7](8,25) = 3.0/8.0;
-  prolongation[7](8,26) = 3.0/4.0;
-  prolongation[7](9,22) = -1.0/8.0;
-  prolongation[7](9,24) = 3.0/8.0;
-  prolongation[7](9,26) = 3.0/4.0;
-  prolongation[7](10,18) = -1.0/8.0;
-  prolongation[7](10,19) = 3.0/8.0;
-  prolongation[7](10,24) = 3.0/4.0;
-  prolongation[7](11,16) = -1.0/8.0;
-  prolongation[7](11,19) = 3.0/8.0;
-  prolongation[7](11,25) = 3.0/4.0;
-  prolongation[7](12,13) = -1.0/8.0;
-  prolongation[7](12,15) = 3.0/8.0;
-  prolongation[7](12,21) = 3.0/4.0;
-  prolongation[7](13,12) = -1.0/8.0;
-  prolongation[7](13,14) = 3.0/8.0;
-  prolongation[7](13,21) = 3.0/4.0;
-  prolongation[7](14,6) = -1.0/8.0;
-  prolongation[7](14,7) = 3.0/8.0;
-  prolongation[7](14,14) = 3.0/4.0;
-  prolongation[7](15,4) = -1.0/8.0;
-  prolongation[7](15,7) = 3.0/8.0;
-  prolongation[7](15,15) = 3.0/4.0;
-  prolongation[7](16,11) = -1.0/8.0;
-  prolongation[7](16,15) = 3.0/8.0;
-  prolongation[7](16,25) = 3.0/4.0;
-  prolongation[7](17,20) = -1.0/8.0;
-  prolongation[7](17,21) = 3.0/8.0;
-  prolongation[7](17,26) = 3.0/4.0;
-  prolongation[7](18,10) = -1.0/8.0;
-  prolongation[7](18,14) = 3.0/8.0;
-  prolongation[7](18,24) = 3.0/4.0;
-  prolongation[7](19,3) = -1.0/8.0;
-  prolongation[7](19,7) = 3.0/8.0;
-  prolongation[7](19,19) = 3.0/4.0;
-  prolongation[7](20,16) = -3.0/64.0;
-  prolongation[7](20,17) = 1.0/64.0;
-  prolongation[7](20,18) = -3.0/64.0;
-  prolongation[7](20,19) = 9.0/64.0;
-  prolongation[7](20,22) = -3.0/32.0;
-  prolongation[7](20,23) = -3.0/32.0;
-  prolongation[7](20,24) = 9.0/32.0;
-  prolongation[7](20,25) = 9.0/32.0;
-  prolongation[7](20,26) = 9.0/16.0;
-  prolongation[7](21,4) = -3.0/64.0;
-  prolongation[7](21,5) = 1.0/64.0;
-  prolongation[7](21,6) = -3.0/64.0;
-  prolongation[7](21,7) = 9.0/64.0;
-  prolongation[7](21,12) = -3.0/32.0;
-  prolongation[7](21,13) = -3.0/32.0;
-  prolongation[7](21,14) = 9.0/32.0;
-  prolongation[7](21,15) = 9.0/32.0;
-  prolongation[7](21,21) = 9.0/16.0;
-  prolongation[7](22,9) = 1.0/64.0;
-  prolongation[7](22,11) = -3.0/64.0;
-  prolongation[7](22,13) = -3.0/64.0;
-  prolongation[7](22,15) = 9.0/64.0;
-  prolongation[7](22,20) = -3.0/32.0;
-  prolongation[7](22,21) = 9.0/32.0;
-  prolongation[7](22,23) = -3.0/32.0;
-  prolongation[7](22,25) = 9.0/32.0;
-  prolongation[7](22,26) = 9.0/16.0;
-  prolongation[7](23,8) = 1.0/64.0;
-  prolongation[7](23,10) = -3.0/64.0;
-  prolongation[7](23,12) = -3.0/64.0;
-  prolongation[7](23,14) = 9.0/64.0;
-  prolongation[7](23,20) = -3.0/32.0;
-  prolongation[7](23,21) = 9.0/32.0;
-  prolongation[7](23,22) = -3.0/32.0;
-  prolongation[7](23,24) = 9.0/32.0;
-  prolongation[7](23,26) = 9.0/16.0;
-  prolongation[7](24,2) = 1.0/64.0;
-  prolongation[7](24,3) = -3.0/64.0;
-  prolongation[7](24,6) = -3.0/64.0;
-  prolongation[7](24,7) = 9.0/64.0;
-  prolongation[7](24,10) = -3.0/32.0;
-  prolongation[7](24,14) = 9.0/32.0;
-  prolongation[7](24,18) = -3.0/32.0;
-  prolongation[7](24,19) = 9.0/32.0;
-  prolongation[7](24,24) = 9.0/16.0;
-  prolongation[7](25,0) = 1.0/64.0;
-  prolongation[7](25,3) = -3.0/64.0;
-  prolongation[7](25,4) = -3.0/64.0;
-  prolongation[7](25,7) = 9.0/64.0;
-  prolongation[7](25,11) = -3.0/32.0;
-  prolongation[7](25,15) = 9.0/32.0;
-  prolongation[7](25,16) = -3.0/32.0;
-  prolongation[7](25,19) = 9.0/32.0;
-  prolongation[7](25,25) = 9.0/16.0;
-  prolongation[7](26,0) = 3.0/512.0;
-  prolongation[7](26,1) = -1.0/512.0;
-  prolongation[7](26,2) = 3.0/512.0;
-  prolongation[7](26,3) = -9.0/512.0;
-  prolongation[7](26,4) = -9.0/512.0;
-  prolongation[7](26,5) = 3.0/512.0;
-  prolongation[7](26,6) = -9.0/512.0;
-  prolongation[7](26,7) = 27.0/512.0;
-  prolongation[7](26,8) = 3.0/256.0;
-  prolongation[7](26,9) = 3.0/256.0;
-  prolongation[7](26,10) = -9.0/256.0;
-  prolongation[7](26,11) = -9.0/256.0;
-  prolongation[7](26,12) = -9.0/256.0;
-  prolongation[7](26,13) = -9.0/256.0;
-  prolongation[7](26,14) = 27.0/256.0;
-  prolongation[7](26,15) = 27.0/256.0;
-  prolongation[7](26,16) = -9.0/256.0;
-  prolongation[7](26,17) = 3.0/256.0;
-  prolongation[7](26,18) = -9.0/256.0;
-  prolongation[7](26,19) = 27.0/256.0;
-  prolongation[7](26,20) = -9.0/128.0;
-  prolongation[7](26,21) = 27.0/128.0;
-  prolongation[7](26,22) = -9.0/128.0;
-  prolongation[7](26,23) = -9.0/128.0;
-  prolongation[7](26,24) = 27.0/128.0;
-  prolongation[7](26,25) = 27.0/128.0;
-  prolongation[7](26,26) = 27.0/64.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](8,1) = 1.0;
-  restriction[0](11,3) = 1.0;
-  restriction[0](16,4) = 1.0;
-  restriction[0](20,2) = 1.0;
-  restriction[0](22,5) = 1.0;
-  restriction[0](25,7) = 1.0;
-  restriction[0](26,6) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](8,0) = 1.0;
-  restriction[1](9,2) = 1.0;
-  restriction[1](17,5) = 1.0;
-  restriction[1](20,3) = 1.0;
-  restriction[1](22,4) = 1.0;
-  restriction[1](23,6) = 1.0;
-  restriction[1](26,7) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[2](9,1) = 1.0;
-  restriction[2](10,3) = 1.0;
-  restriction[2](18,6) = 1.0;
-  restriction[2](20,0) = 1.0;
-  restriction[2](23,5) = 1.0;
-  restriction[2](24,7) = 1.0;
-  restriction[2](26,4) = 1.0;
-  restriction[3](3,3) = 1.0;
-  restriction[3](10,2) = 1.0;
-  restriction[3](11,0) = 1.0;
-  restriction[3](19,7) = 1.0;
-  restriction[3](20,1) = 1.0;
-  restriction[3](24,6) = 1.0;
-  restriction[3](25,4) = 1.0;
-  restriction[3](26,5) = 1.0;
-  restriction[4](4,4) = 1.0;
-  restriction[4](12,5) = 1.0;
-  restriction[4](15,7) = 1.0;
-  restriction[4](16,0) = 1.0;
-  restriction[4](21,6) = 1.0;
-  restriction[4](22,1) = 1.0;
-  restriction[4](25,3) = 1.0;
-  restriction[4](26,2) = 1.0;
-  restriction[5](5,5) = 1.0;
-  restriction[5](12,4) = 1.0;
-  restriction[5](13,6) = 1.0;
-  restriction[5](17,1) = 1.0;
-  restriction[5](21,7) = 1.0;
-  restriction[5](22,0) = 1.0;
-  restriction[5](23,2) = 1.0;
-  restriction[5](26,3) = 1.0;
-  restriction[6](6,6) = 1.0;
-  restriction[6](13,5) = 1.0;
-  restriction[6](14,7) = 1.0;
-  restriction[6](18,2) = 1.0;
-  restriction[6](21,4) = 1.0;
-  restriction[6](23,1) = 1.0;
-  restriction[6](24,3) = 1.0;
-  restriction[6](26,0) = 1.0;
-  restriction[7](7,7) = 1.0;
-  restriction[7](14,6) = 1.0;
-  restriction[7](15,4) = 1.0;
-  restriction[7](19,3) = 1.0;
-  restriction[7](21,5) = 1.0;
-  restriction[7](24,2) = 1.0;
-  restriction[7](25,0) = 1.0;
-  restriction[7](26,1) = 1.0;
-};
-
-
-
-template <>
-double
-FEQ2<3>::shape_value (const unsigned int i,
-                     const Point<3>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi  = p(0),
-              eta = p(1),
-              zeta=p(2);
-  switch (i)
-    {
-      case 0: return 1.0-3.0*xi+2.0*xi*xi+(-3.0+9.0*xi-6.0*xi*xi)*eta+(2.0
-                                                                      -6.0*xi+4.0*xi*xi)*eta*eta+(-3.0+9.0*xi-6.0*xi*xi+(9.0-27.0*xi+18.0*xi*xi)*eta+
-                                                                                                  (-6.0+18.0*xi-12.0*xi*xi)*eta*eta)*zeta+(2.0-6.0*xi+4.0*xi*xi+(-6.0+18.0*xi
-                                                                                                                                                                 -12.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 1: return -xi+2.0*xi*xi+(3.0*xi-6.0*xi*xi)*eta+(-2.0*xi+4.0*xi*xi)
-               *eta*eta+(3.0*xi-6.0*xi*xi+(-9.0*xi+18.0*xi*xi)*eta+(6.0*xi-12.0*xi*xi)*eta*eta
-               )*zeta+(-2.0*xi+4.0*xi*xi+(6.0*xi-12.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*
-               zeta*zeta;
-      case 2: return (xi-2.0*xi*xi+(-3.0*xi+6.0*xi*xi)*eta+(2.0*xi-4.0*xi*xi)
-                     *eta*eta)*zeta+(-2.0*xi+4.0*xi*xi+(6.0*xi-12.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*
-                                     eta*eta)*zeta*zeta;
-      case 3: return (-1.0+3.0*xi-2.0*xi*xi+(3.0-9.0*xi+6.0*xi*xi)*eta+(-2.0+
-                                                                       6.0*xi-4.0*xi*xi)*eta*eta)*zeta+(2.0-6.0*xi+4.0*xi*xi+(-6.0+18.0*xi-12.0*xi*xi)
-                                                                                                        *eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 4: return (-1.0+3.0*xi-2.0*xi*xi)*eta+(2.0-6.0*xi+4.0*xi*xi)*eta*
-               eta+((3.0-9.0*xi+6.0*xi*xi)*eta+(-6.0+18.0*xi-12.0*xi*xi)*eta*eta)*zeta+((-2.0+
-                                                                                         6.0*xi-4.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 5: return (xi-2.0*xi*xi)*eta+(-2.0*xi+4.0*xi*xi)*eta*eta+((-3.0*xi
-                                                                     +6.0*xi*xi)*eta+(6.0*xi-12.0*xi*xi)*eta*eta)*zeta+((2.0*xi-4.0*xi*xi)*eta+(-4.0
-                                                                                                                                                *xi+8.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 6: return ((-xi+2.0*xi*xi)*eta+(2.0*xi-4.0*xi*xi)*eta*eta)*zeta+((
-       2.0*xi-4.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 7: return ((1.0-3.0*xi+2.0*xi*xi)*eta+(-2.0+6.0*xi-4.0*xi*xi)*eta*
-                     eta)*zeta+((-2.0+6.0*xi-4.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta*
-               zeta;
-      case 8: return 4.0*xi-4.0*xi*xi+(-12.0*xi+12.0*xi*xi)*eta+(8.0*xi-8.0*
-                                                                xi*xi)*eta*eta+(-12.0*xi+12.0*xi*xi+(36.0*xi-36.0*xi*xi)*eta+(-24.0*xi+24.0*xi*
-                                                                                                                              xi)*eta*eta)*zeta+(8.0*xi-8.0*xi*xi+(-24.0*xi+24.0*xi*xi)*eta+(16.0*xi-16.0*xi*
-                                                                                                                                                                                             xi)*eta*eta)*zeta*zeta;
-      case 9: return (-4.0*xi+8.0*xi*xi+(12.0*xi-24.0*xi*xi)*eta+(-8.0*xi+
-                                                                 16.0*xi*xi)*eta*eta)*zeta+(4.0*xi-8.0*xi*xi+(-12.0*xi+24.0*xi*xi)*eta+(8.0*xi
-                                                                                                                                        -16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 10: return (-4.0*xi+4.0*xi*xi+(12.0*xi-12.0*xi*xi)*eta+(-8.0*xi+
-                                                                  8.0*xi*xi)*eta*eta)*zeta+(8.0*xi-8.0*xi*xi+(-24.0*xi+24.0*xi*xi)*eta+(16.0*xi
-                                                                                                                                        -16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 11: return (4.0-12.0*xi+8.0*xi*xi+(-12.0+36.0*xi-24.0*xi*xi)*eta+(
-       8.0-24.0*xi+16.0*xi*xi)*eta*eta)*zeta+(-4.0+12.0*xi-8.0*xi*xi+(12.0-36.0*xi+
-                                                                      24.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 12: return (-4.0*xi+4.0*xi*xi)*eta+(8.0*xi-8.0*xi*xi)*eta*eta+((
-       12.0*xi-12.0*xi*xi)*eta+(-24.0*xi+24.0*xi*xi)*eta*eta)*zeta+((-8.0*xi+8.0*xi*xi
-       )*eta+(16.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 13: return ((4.0*xi-8.0*xi*xi)*eta+(-8.0*xi+16.0*xi*xi)*eta*eta)*
-                zeta+((-4.0*xi+8.0*xi*xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 14: return ((4.0*xi-4.0*xi*xi)*eta+(-8.0*xi+8.0*xi*xi)*eta*eta)*
-                zeta+((-8.0*xi+8.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 15: return ((-4.0+12.0*xi-8.0*xi*xi)*eta+(8.0-24.0*xi+16.0*xi*xi)*
-                      eta*eta)*zeta+((4.0-12.0*xi+8.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*
-                zeta*zeta;
-      case 16: return (4.0-12.0*xi+8.0*xi*xi)*eta+(-4.0+12.0*xi-8.0*xi*xi)*
-                eta*eta+((-12.0+36.0*xi-24.0*xi*xi)*eta+(12.0-36.0*xi+24.0*xi*xi)*eta*eta)*zeta
-                +((8.0-24.0*xi+16.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 17: return (-4.0*xi+8.0*xi*xi)*eta+(4.0*xi-8.0*xi*xi)*eta*eta+((
-       12.0*xi-24.0*xi*xi)*eta+(-12.0*xi+24.0*xi*xi)*eta*eta)*zeta+((-8.0*xi+16.0*xi*
-                                                                     xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 18: return ((4.0*xi-8.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*
-                zeta+((-8.0*xi+16.0*xi*xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 19: return ((-4.0+12.0*xi-8.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*
-                      eta*eta)*zeta+((8.0-24.0*xi+16.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*
-                zeta*zeta;
-      case 20: return (16.0*xi-16.0*xi*xi+(-48.0*xi+48.0*xi*xi)*eta+(32.0*xi
-                                                                    -32.0*xi*xi)*eta*eta)*zeta+(-16.0*xi+16.0*xi*xi+(48.0*xi-48.0*xi*xi)*eta+(-32.0
-                                                                                                                                              *xi+32.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 21: return ((-16.0*xi+16.0*xi*xi)*eta+(32.0*xi-32.0*xi*xi)*eta*eta
-      )*zeta+((16.0*xi-16.0*xi*xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 22: return (16.0*xi-16.0*xi*xi)*eta+(-16.0*xi+16.0*xi*xi)*eta*eta+
-                ((-48.0*xi+48.0*xi*xi)*eta+(48.0*xi-48.0*xi*xi)*eta*eta)*zeta+((32.0*xi-32.0*xi
-                                                                                *xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 23: return ((-16.0*xi+32.0*xi*xi)*eta+(16.0*xi-32.0*xi*xi)*eta*eta
-      )*zeta+((16.0*xi-32.0*xi*xi)*eta+(-16.0*xi+32.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 24: return ((-16.0*xi+16.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta
-      )*zeta+((32.0*xi-32.0*xi*xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta*zeta;
-      case 25: return ((16.0-48.0*xi+32.0*xi*xi)*eta+(-16.0+48.0*xi-32.0*xi*
-                                                     xi)*eta*eta)*zeta+((-16.0+48.0*xi-32.0*xi*xi)*eta+(16.0-48.0*xi+32.0*xi*xi)*eta
-                                                                        *eta)*zeta*zeta;
-      case 26: return ((64.0*xi-64.0*xi*xi)*eta+(-64.0*xi+64.0*xi*xi)*eta*eta
-      )*zeta+((-64.0*xi+64.0*xi*xi)*eta+(64.0*xi-64.0*xi*xi)*eta*eta)*zeta*zeta;
-    };
-  return 0;
-};
-
-
-
-template <>
-Tensor<1,3>
-FEQ2<3>::shape_grad (const unsigned int i,
-                    const Point<3>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi  = p(0),
-              eta = p(1),
-              zeta=p(2);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<3>(-3.0+4.0*xi+(9.0-12.0*xi)*eta+(-6.0+8.0*xi)*eta*eta+(9.0-12.0*xi+(-27.0+36.0*xi)*eta+(18.0-24.0*xi)*eta*eta)*zeta+(-6.0+8.0*xi+(18.0-24.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             -3.0+9.0*xi-6.0*xi*xi+2.0*(2.0-6.0*xi+4.0*xi*xi)*eta+(9.0-27.0*xi+18.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta)*zeta+(-6.0+18.0*xi-12.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             -3.0+9.0*xi-6.0*xi*xi+(9.0-27.0*xi+18.0*xi*xi)*eta+(-6.0+18.0*xi-12.0*xi*xi)*eta*eta+2.0*(2.0-6.0*xi+4.0*xi*xi+(-6.0+18.0*xi-12.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 1: return Point<3>(-1.0+4.0*xi+(3.0-12.0*xi)*eta+(-2.0+8.0*xi)*eta*eta+(3.0-12.0*xi+(-9.0+36.0*xi)*eta+(6.0-24.0*xi)*eta*eta)*zeta+(-2.0+8.0*xi+(6.0-24.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             3.0*xi-6.0*xi*xi+2.0*(-2.0*xi+4.0*xi*xi)*eta+(-9.0*xi+18.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta)*zeta+(6.0*xi-12.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             3.0*xi-6.0*xi*xi+(-9.0*xi+18.0*xi*xi)*eta+(6.0*xi-12.0*xi*xi)*eta*eta+2.0*(-2.0*xi+4.0*xi*xi+(6.0*xi-12.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 2: return Point<3>((1.0-4.0*xi+(-3.0+12.0*xi)*eta+(2.0-8.0*xi)*eta*eta)*zeta+(-2.0+8.0*xi+(6.0-24.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             (-3.0*xi+6.0*xi*xi+2.0*(2.0*xi-4.0*xi*xi)*eta)*zeta+(6.0*xi-12.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             xi-2.0*xi*xi+(-3.0*xi+6.0*xi*xi)*eta+(2.0*xi-4.0*xi*xi)*eta*eta+2.0*(-2.0*xi+4.0*xi*xi+(6.0*xi-12.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 3: return Point<3>((3.0-4.0*xi+(-9.0+12.0*xi)*eta+(6.0-8.0*xi)*eta*eta)*zeta+(-6.0+8.0*xi+(18.0-24.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             (3.0-9.0*xi+6.0*xi*xi+2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta)*zeta+(-6.0+18.0*xi-12.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             -1.0+3.0*xi-2.0*xi*xi+(3.0-9.0*xi+6.0*xi*xi)*eta+(-2.0+6.0*xi-4.0*xi*xi)*eta*eta+2.0*(2.0-6.0*xi+4.0*xi*xi+(-6.0+18.0*xi-12.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 4: return Point<3>((3.0-4.0*xi)*eta+(-6.0+8.0*xi)*eta*eta+((-9.0+12.0*xi)*eta+(18.0-24.0*xi)*eta*eta)*zeta+((6.0-8.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             -1.0+3.0*xi-2.0*xi*xi+2.0*(2.0-6.0*xi+4.0*xi*xi)*eta+(3.0-9.0*xi+6.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta)*zeta+(-2.0+6.0*xi-4.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             (3.0-9.0*xi+6.0*xi*xi)*eta+(-6.0+18.0*xi-12.0*xi*xi)*eta*eta+2.0*((-2.0+6.0*xi-4.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 5: return Point<3>((1.0-4.0*xi)*eta+(-2.0+8.0*xi)*eta*eta+((-3.0+12.0*xi)*eta+(6.0-24.0*xi)*eta*eta)*zeta+((2.0-8.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             xi-2.0*xi*xi+2.0*(-2.0*xi+4.0*xi*xi)*eta+(-3.0*xi+6.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta)*zeta+(2.0*xi-4.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             (-3.0*xi+6.0*xi*xi)*eta+(6.0*xi-12.0*xi*xi)*eta*eta+2.0*((2.0*xi-4.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 6: return Point<3>(((-1.0+4.0*xi)*eta+(2.0-8.0*xi)*eta*eta)*zeta+((2.0-8.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             (-xi+2.0*xi*xi+2.0*(2.0*xi-4.0*xi*xi)*eta)*zeta+(2.0*xi-4.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             (-xi+2.0*xi*xi)*eta+(2.0*xi-4.0*xi*xi)*eta*eta+2.0*((2.0*xi-4.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 7: return Point<3>(((-3.0+4.0*xi)*eta+(6.0-8.0*xi)*eta*eta)*zeta+((6.0-8.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta*zeta,
-                             (1.0-3.0*xi+2.0*xi*xi+2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta)*zeta+(-2.0+6.0*xi-4.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta*zeta,
-                             (1.0-3.0*xi+2.0*xi*xi)*eta+(-2.0+6.0*xi-4.0*xi*xi)*eta*eta+2.0*((-2.0+6.0*xi-4.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta)*zeta);
-      case 8: return Point<3>(4.0-8.0*xi+(-12.0+24.0*xi)*eta+(8.0-16.0*xi)*eta*eta+(-12.0+24.0*xi+(36.0-72.0*xi)*eta+(-24.0+48.0*xi)*eta*eta)*zeta+(8.0-16.0*xi+(-24.0+48.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta*zeta,
-                             -12.0*xi+12.0*xi*xi+2.0*(8.0*xi-8.0*xi*xi)*eta+(36.0*xi-36.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta)*zeta+(-24.0*xi+24.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                             -12.0*xi+12.0*xi*xi+(36.0*xi-36.0*xi*xi)*eta+(-24.0*xi+24.0*xi*xi)*eta*eta+2.0*(8.0*xi-8.0*xi*xi+(-24.0*xi+24.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 9: return Point<3>((-4.0+16.0*xi+(12.0-48.0*xi)*eta+(-8.0+32.0*xi)*eta*eta)*zeta+(4.0-16.0*xi+(-12.0+48.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta*zeta,
-                             (12.0*xi-24.0*xi*xi+2.0*(-8.0*xi+16.0*xi*xi)*eta)*zeta+(-12.0*xi+24.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                             -4.0*xi+8.0*xi*xi+(12.0*xi-24.0*xi*xi)*eta+(-8.0*xi+16.0*xi*xi)*eta*eta+2.0*(4.0*xi-8.0*xi*xi+(-12.0*xi+24.0*xi*xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 10: return Point<3>((-4.0+8.0*xi+(12.0-24.0*xi)*eta+(-8.0+16.0*xi)*eta*eta)*zeta+(8.0-16.0*xi+(-24.0+48.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (12.0*xi-12.0*xi*xi+2.0*(-8.0*xi+8.0*xi*xi)*eta)*zeta+(-24.0*xi+24.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              -4.0*xi+4.0*xi*xi+(12.0*xi-12.0*xi*xi)*eta+(-8.0*xi+8.0*xi*xi)*eta*eta+2.0*(8.0*xi-8.0*xi*xi+(-24.0*xi+24.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 11: return Point<3>((-12.0+16.0*xi+(36.0-48.0*xi)*eta+(-24.0+32.0*xi)*eta*eta)*zeta+(12.0-16.0*xi+(-36.0+48.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (-12.0+36.0*xi-24.0*xi*xi+2.0*(8.0-24.0*xi+16.0*xi*xi)*eta)*zeta+(12.0-36.0*xi+24.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              4.0-12.0*xi+8.0*xi*xi+(-12.0+36.0*xi-24.0*xi*xi)*eta+(8.0-24.0*xi+16.0*xi*xi)*eta*eta+2.0*(-4.0+12.0*xi-8.0*xi*xi+(12.0-36.0*xi+24.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 12: return Point<3>((-4.0+8.0*xi)*eta+(8.0-16.0*xi)*eta*eta+((12.0-24.0*xi)*eta+(-24.0+48.0*xi)*eta*eta)*zeta+((-8.0+16.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              -4.0*xi+4.0*xi*xi+2.0*(8.0*xi-8.0*xi*xi)*eta+(12.0*xi-12.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta)*zeta+(-8.0*xi+8.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (12.0*xi-12.0*xi*xi)*eta+(-24.0*xi+24.0*xi*xi)*eta*eta+2.0*((-8.0*xi+8.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 13: return Point<3>(((4.0-16.0*xi)*eta+(-8.0+32.0*xi)*eta*eta)*zeta+((-4.0+16.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (4.0*xi-8.0*xi*xi+2.0*(-8.0*xi+16.0*xi*xi)*eta)*zeta+(-4.0*xi+8.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (4.0*xi-8.0*xi*xi)*eta+(-8.0*xi+16.0*xi*xi)*eta*eta+2.0*((-4.0*xi+8.0*xi*xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 14: return Point<3>(((4.0-8.0*xi)*eta+(-8.0+16.0*xi)*eta*eta)*zeta+((-8.0+16.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (4.0*xi-4.0*xi*xi+2.0*(-8.0*xi+8.0*xi*xi)*eta)*zeta+(-8.0*xi+8.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (4.0*xi-4.0*xi*xi)*eta+(-8.0*xi+8.0*xi*xi)*eta*eta+2.0*((-8.0*xi+8.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 15: return Point<3>(((12.0-16.0*xi)*eta+(-24.0+32.0*xi)*eta*eta)*zeta+((-12.0+16.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (-4.0+12.0*xi-8.0*xi*xi+2.0*(8.0-24.0*xi+16.0*xi*xi)*eta)*zeta+(4.0-12.0*xi+8.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (-4.0+12.0*xi-8.0*xi*xi)*eta+(8.0-24.0*xi+16.0*xi*xi)*eta*eta+2.0*((4.0-12.0*xi+8.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 16: return Point<3>((-12.0+16.0*xi)*eta+(12.0-16.0*xi)*eta*eta+((36.0-48.0*xi)*eta+(-36.0+48.0*xi)*eta*eta)*zeta+((-24.0+32.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              4.0-12.0*xi+8.0*xi*xi+2.0*(-4.0+12.0*xi-8.0*xi*xi)*eta+(-12.0+36.0*xi-24.0*xi*xi+2.0*(12.0-36.0*xi+24.0*xi*xi)*eta)*zeta+(8.0-24.0*xi+16.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (-12.0+36.0*xi-24.0*xi*xi)*eta+(12.0-36.0*xi+24.0*xi*xi)*eta*eta+2.0*((8.0-24.0*xi+16.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 17: return Point<3>((-4.0+16.0*xi)*eta+(4.0-16.0*xi)*eta*eta+((12.0-48.0*xi)*eta+(-12.0+48.0*xi)*eta*eta)*zeta+((-8.0+32.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              -4.0*xi+8.0*xi*xi+2.0*(4.0*xi-8.0*xi*xi)*eta+(12.0*xi-24.0*xi*xi+2.0*(-12.0*xi+24.0*xi*xi)*eta)*zeta+(-8.0*xi+16.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (12.0*xi-24.0*xi*xi)*eta+(-12.0*xi+24.0*xi*xi)*eta*eta+2.0*((-8.0*xi+16.0*xi*xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 18: return Point<3>(((4.0-16.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta+((-8.0+32.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (4.0*xi-8.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta+(-8.0*xi+16.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (4.0*xi-8.0*xi*xi)*eta+(-4.0*xi+8.0*xi*xi)*eta*eta+2.0*((-8.0*xi+16.0*xi*xi)*eta+(8.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 19: return Point<3>(((12.0-16.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta+((-24.0+32.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta*zeta,
-                              (-4.0+12.0*xi-8.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta+(8.0-24.0*xi+16.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta*zeta,
-                              (-4.0+12.0*xi-8.0*xi*xi)*eta+(4.0-12.0*xi+8.0*xi*xi)*eta*eta+2.0*((8.0-24.0*xi+16.0*xi*xi)*eta+(-8.0+24.0*xi-16.0*xi*xi)*eta*eta)*zeta);
-      case 20: return Point<3>((16.0-32.0*xi+(-48.0+96.0*xi)*eta+(32.0-64.0*xi)*eta*eta)*zeta+(-16.0+32.0*xi+(48.0-96.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta*zeta,
-                              (-48.0*xi+48.0*xi*xi+2.0*(32.0*xi-32.0*xi*xi)*eta)*zeta+(48.0*xi-48.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta*zeta,
-                              16.0*xi-16.0*xi*xi+(-48.0*xi+48.0*xi*xi)*eta+(32.0*xi-32.0*xi*xi)*eta*eta+2.0*(-16.0*xi+16.0*xi*xi+(48.0*xi-48.0*xi*xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta);
-      case 21: return Point<3>(((-16.0+32.0*xi)*eta+(32.0-64.0*xi)*eta*eta)*zeta+((16.0-32.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta*zeta,
-                              (-16.0*xi+16.0*xi*xi+2.0*(32.0*xi-32.0*xi*xi)*eta)*zeta+(16.0*xi-16.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta*zeta,
-                              (-16.0*xi+16.0*xi*xi)*eta+(32.0*xi-32.0*xi*xi)*eta*eta+2.0*((16.0*xi-16.0*xi*xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta);
-      case 22: return Point<3>((16.0-32.0*xi)*eta+(-16.0+32.0*xi)*eta*eta+((-48.0+96.0*xi)*eta+(48.0-96.0*xi)*eta*eta)*zeta+((32.0-64.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta*zeta,
-                              16.0*xi-16.0*xi*xi+2.0*(-16.0*xi+16.0*xi*xi)*eta+(-48.0*xi+48.0*xi*xi+2.0*(48.0*xi-48.0*xi*xi)*eta)*zeta+(32.0*xi-32.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta*zeta,
-                              (-48.0*xi+48.0*xi*xi)*eta+(48.0*xi-48.0*xi*xi)*eta*eta+2.0*((32.0*xi-32.0*xi*xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta);
-      case 23: return Point<3>(((-16.0+64.0*xi)*eta+(16.0-64.0*xi)*eta*eta)*zeta+((16.0-64.0*xi)*eta+(-16.0+64.0*xi)*eta*eta)*zeta*zeta,
-                              (-16.0*xi+32.0*xi*xi+2.0*(16.0*xi-32.0*xi*xi)*eta)*zeta+(16.0*xi-32.0*xi*xi+2.0*(-16.0*xi+32.0*xi*xi)*eta)*zeta*zeta,
-                              (-16.0*xi+32.0*xi*xi)*eta+(16.0*xi-32.0*xi*xi)*eta*eta+2.0*((16.0*xi-32.0*xi*xi)*eta+(-16.0*xi+32.0*xi*xi)*eta*eta)*zeta);
-      case 24: return Point<3>(((-16.0+32.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta+((32.0-64.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta*zeta,
-                              (-16.0*xi+16.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta+(32.0*xi-32.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta*zeta,
-                              (-16.0*xi+16.0*xi*xi)*eta+(16.0*xi-16.0*xi*xi)*eta*eta+2.0*((32.0*xi-32.0*xi*xi)*eta+(-32.0*xi+32.0*xi*xi)*eta*eta)*zeta);
-      case 25: return Point<3>(((-48.0+64.0*xi)*eta+(48.0-64.0*xi)*eta*eta)*zeta+((48.0-64.0*xi)*eta+(-48.0+64.0*xi)*eta*eta)*zeta*zeta,
-                              (16.0-48.0*xi+32.0*xi*xi+2.0*(-16.0+48.0*xi-32.0*xi*xi)*eta)*zeta+(-16.0+48.0*xi-32.0*xi*xi+2.0*(16.0-48.0*xi+32.0*xi*xi)*eta)*zeta*zeta,
-                              (16.0-48.0*xi+32.0*xi*xi)*eta+(-16.0+48.0*xi-32.0*xi*xi)*eta*eta+2.0*((-16.0+48.0*xi-32.0*xi*xi)*eta+(16.0-48.0*xi+32.0*xi*xi)*eta*eta)*zeta);
-      case 26: return Point<3>(((64.0-128.0*xi)*eta+(-64.0+128.0*xi)*eta*eta)*zeta+((-64.0+128.0*xi)*eta+(64.0-128.0*xi)*eta*eta)*zeta*zeta,
-                              (64.0*xi-64.0*xi*xi+2.0*(-64.0*xi+64.0*xi*xi)*eta)*zeta+(-64.0*xi+64.0*xi*xi+2.0*(64.0*xi-64.0*xi*xi)*eta)*zeta*zeta,
-                              (64.0*xi-64.0*xi*xi)*eta+(-64.0*xi+64.0*xi*xi)*eta*eta+2.0*((-64.0*xi+64.0*xi*xi)*eta+(64.0*xi-64.0*xi*xi)*eta*eta)*zeta);
-    };
-  return Point<3> ();
-};
-
-
-
-template <>
-Tensor<2,3>
-FEQ2<3>::shape_grad_grad (const unsigned int i,
-                         const Point<3>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi  = p(0),
-              eta = p(1),
-              zeta=p(2);
-  Tensor<2,3> return_value;
-  
-  switch (i)
-    {
-      case 0:
-           return_value[0][0] = 4.0-12.0*eta+8.0*eta*eta+(-12.0+36.0*eta-24.0*eta*eta)*zeta+(8.0-24.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = 9.0-12.0*xi+2.0*(-6.0+8.0*xi)*eta+(-27.0+36.0*xi+2.0*(18.0-24.0*xi)*eta)*zeta+(18.0-24.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = 9.0-12.0*xi+(-27.0+36.0*xi)*eta+(18.0-24.0*xi)*eta*eta+2.0*(-6.0+8.0*xi+(18.0-24.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = 9.0-12.0*xi+2.0*(-6.0+8.0*xi)*eta+(-27.0+36.0*xi+2.0*(18.0-24.0*xi)*eta)*zeta+(18.0-24.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = 4.0-12.0*xi+8.0*xi*xi+(-12.0+36.0*xi-24.0*xi*xi)*zeta+(8.0-24.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 9.0-27.0*xi+18.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta+2.0*(-6.0+18.0*xi-12.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = 9.0-12.0*xi+(-27.0+36.0*xi)*eta+(18.0-24.0*xi)*eta*eta+2.0*(-6.0+8.0*xi+(18.0-24.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 9.0-27.0*xi+18.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta+2.0*(-6.0+18.0*xi-12.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 4.0-12.0*xi+8.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 1:
-           return_value[0][0] = 4.0-12.0*eta+8.0*eta*eta+(-12.0+36.0*eta-24.0*eta*eta)*zeta+(8.0-24.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = 3.0-12.0*xi+2.0*(-2.0+8.0*xi)*eta+(-9.0+36.0*xi+2.0*(6.0-24.0*xi)*eta)*zeta+(6.0-24.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = 3.0-12.0*xi+(-9.0+36.0*xi)*eta+(6.0-24.0*xi)*eta*eta+2.0*(-2.0+8.0*xi+(6.0-24.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = 3.0-12.0*xi+2.0*(-2.0+8.0*xi)*eta+(-9.0+36.0*xi+2.0*(6.0-24.0*xi)*eta)*zeta+(6.0-24.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = -4.0*xi+8.0*xi*xi+(12.0*xi-24.0*xi*xi)*zeta+(-8.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -9.0*xi+18.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta+2.0*(6.0*xi-12.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = 3.0-12.0*xi+(-9.0+36.0*xi)*eta+(6.0-24.0*xi)*eta*eta+2.0*(-2.0+8.0*xi+(6.0-24.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -9.0*xi+18.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta+2.0*(6.0*xi-12.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = -4.0*xi+8.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta+2.0*(-4.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 2:
-           return_value[0][0] = (-4.0+12.0*eta-8.0*eta*eta)*zeta+(8.0-24.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-3.0+12.0*xi+2.0*(2.0-8.0*xi)*eta)*zeta+(6.0-24.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = 1.0-4.0*xi+(-3.0+12.0*xi)*eta+(2.0-8.0*xi)*eta*eta+2.0*(-2.0+8.0*xi+(6.0-24.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-3.0+12.0*xi+2.0*(2.0-8.0*xi)*eta)*zeta+(6.0-24.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (4.0*xi-8.0*xi*xi)*zeta+(-8.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -3.0*xi+6.0*xi*xi+2.0*(2.0*xi-4.0*xi*xi)*eta+2.0*(6.0*xi-12.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = 1.0-4.0*xi+(-3.0+12.0*xi)*eta+(2.0-8.0*xi)*eta*eta+2.0*(-2.0+8.0*xi+(6.0-24.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -3.0*xi+6.0*xi*xi+2.0*(2.0*xi-4.0*xi*xi)*eta+2.0*(6.0*xi-12.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = -4.0*xi+8.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta+2.0*(-4.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 3:
-           return_value[0][0] = (-4.0+12.0*eta-8.0*eta*eta)*zeta+(8.0-24.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-9.0+12.0*xi+2.0*(6.0-8.0*xi)*eta)*zeta+(18.0-24.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = 3.0-4.0*xi+(-9.0+12.0*xi)*eta+(6.0-8.0*xi)*eta*eta+2.0*(-6.0+8.0*xi+(18.0-24.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-9.0+12.0*xi+2.0*(6.0-8.0*xi)*eta)*zeta+(18.0-24.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-4.0+12.0*xi-8.0*xi*xi)*zeta+(8.0-24.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 3.0-9.0*xi+6.0*xi*xi+2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta+2.0*(-6.0+18.0*xi-12.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = 3.0-4.0*xi+(-9.0+12.0*xi)*eta+(6.0-8.0*xi)*eta*eta+2.0*(-6.0+8.0*xi+(18.0-24.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 3.0-9.0*xi+6.0*xi*xi+2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta+2.0*(-6.0+18.0*xi-12.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 4.0-12.0*xi+8.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 4:
-           return_value[0][0] = -4.0*eta+8.0*eta*eta+(12.0*eta-24.0*eta*eta)*zeta+(-8.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = 3.0-4.0*xi+2.0*(-6.0+8.0*xi)*eta+(-9.0+12.0*xi+2.0*(18.0-24.0*xi)*eta)*zeta+(6.0-8.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-9.0+12.0*xi)*eta+(18.0-24.0*xi)*eta*eta+2.0*((6.0-8.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = 3.0-4.0*xi+2.0*(-6.0+8.0*xi)*eta+(-9.0+12.0*xi+2.0*(18.0-24.0*xi)*eta)*zeta+(6.0-8.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = 4.0-12.0*xi+8.0*xi*xi+(-12.0+36.0*xi-24.0*xi*xi)*zeta+(8.0-24.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 3.0-9.0*xi+6.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta+2.0*(-2.0+6.0*xi-4.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-9.0+12.0*xi)*eta+(18.0-24.0*xi)*eta*eta+2.0*((6.0-8.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 3.0-9.0*xi+6.0*xi*xi+2.0*(-6.0+18.0*xi-12.0*xi*xi)*eta+2.0*(-2.0+6.0*xi-4.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 5:
-           return_value[0][0] = -4.0*eta+8.0*eta*eta+(12.0*eta-24.0*eta*eta)*zeta+(-8.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = 1.0-4.0*xi+2.0*(-2.0+8.0*xi)*eta+(-3.0+12.0*xi+2.0*(6.0-24.0*xi)*eta)*zeta+(2.0-8.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-3.0+12.0*xi)*eta+(6.0-24.0*xi)*eta*eta+2.0*((2.0-8.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = 1.0-4.0*xi+2.0*(-2.0+8.0*xi)*eta+(-3.0+12.0*xi+2.0*(6.0-24.0*xi)*eta)*zeta+(2.0-8.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = -4.0*xi+8.0*xi*xi+(12.0*xi-24.0*xi*xi)*zeta+(-8.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -3.0*xi+6.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta+2.0*(2.0*xi-4.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-3.0+12.0*xi)*eta+(6.0-24.0*xi)*eta*eta+2.0*((2.0-8.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -3.0*xi+6.0*xi*xi+2.0*(6.0*xi-12.0*xi*xi)*eta+2.0*(2.0*xi-4.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(2.0*xi-4.0*xi*xi)*eta+2.0*(-4.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 6:
-           return_value[0][0] = (4.0*eta-8.0*eta*eta)*zeta+(-8.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-1.0+4.0*xi+2.0*(2.0-8.0*xi)*eta)*zeta+(2.0-8.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-1.0+4.0*xi)*eta+(2.0-8.0*xi)*eta*eta+2.0*((2.0-8.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-1.0+4.0*xi+2.0*(2.0-8.0*xi)*eta)*zeta+(2.0-8.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (4.0*xi-8.0*xi*xi)*zeta+(-8.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -xi+2.0*xi*xi+2.0*(2.0*xi-4.0*xi*xi)*eta+2.0*(2.0*xi-4.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-1.0+4.0*xi)*eta+(2.0-8.0*xi)*eta*eta+2.0*((2.0-8.0*xi)*eta+(-4.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -xi+2.0*xi*xi+2.0*(2.0*xi-4.0*xi*xi)*eta+2.0*(2.0*xi-4.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(2.0*xi-4.0*xi*xi)*eta+2.0*(-4.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 7:
-           return_value[0][0] = (4.0*eta-8.0*eta*eta)*zeta+(-8.0*eta+16.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-3.0+4.0*xi+2.0*(6.0-8.0*xi)*eta)*zeta+(6.0-8.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-3.0+4.0*xi)*eta+(6.0-8.0*xi)*eta*eta+2.0*((6.0-8.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-3.0+4.0*xi+2.0*(6.0-8.0*xi)*eta)*zeta+(6.0-8.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-4.0+12.0*xi-8.0*xi*xi)*zeta+(8.0-24.0*xi+16.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 1.0-3.0*xi+2.0*xi*xi+2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta+2.0*(-2.0+6.0*xi-4.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-3.0+4.0*xi)*eta+(6.0-8.0*xi)*eta*eta+2.0*((6.0-8.0*xi)*eta+(-12.0+16.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 1.0-3.0*xi+2.0*xi*xi+2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta+2.0*(-2.0+6.0*xi-4.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-2.0+6.0*xi-4.0*xi*xi)*eta+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta*eta;
-           break;
-      case 8:
-           return_value[0][0] = -8.0+24.0*eta-16.0*eta*eta+(24.0-72.0*eta+48.0*eta*eta)*zeta+(-16.0+48.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = -12.0+24.0*xi+2.0*(8.0-16.0*xi)*eta+(36.0-72.0*xi+2.0*(-24.0+48.0*xi)*eta)*zeta+(-24.0+48.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = -12.0+24.0*xi+(36.0-72.0*xi)*eta+(-24.0+48.0*xi)*eta*eta+2.0*(8.0-16.0*xi+(-24.0+48.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = -12.0+24.0*xi+2.0*(8.0-16.0*xi)*eta+(36.0-72.0*xi+2.0*(-24.0+48.0*xi)*eta)*zeta+(-24.0+48.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = 16.0*xi-16.0*xi*xi+(-48.0*xi+48.0*xi*xi)*zeta+(32.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 36.0*xi-36.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta+2.0*(-24.0*xi+24.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = -12.0+24.0*xi+(36.0-72.0*xi)*eta+(-24.0+48.0*xi)*eta*eta+2.0*(8.0-16.0*xi+(-24.0+48.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 36.0*xi-36.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta+2.0*(-24.0*xi+24.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 16.0*xi-16.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta+2.0*(16.0*xi-16.0*xi*xi)*eta*eta;
-           break;
-      case 9:
-           return_value[0][0] = (16.0-48.0*eta+32.0*eta*eta)*zeta+(-16.0+48.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (12.0-48.0*xi+2.0*(-8.0+32.0*xi)*eta)*zeta+(-12.0+48.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = -4.0+16.0*xi+(12.0-48.0*xi)*eta+(-8.0+32.0*xi)*eta*eta+2.0*(4.0-16.0*xi+(-12.0+48.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (12.0-48.0*xi+2.0*(-8.0+32.0*xi)*eta)*zeta+(-12.0+48.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-16.0*xi+32.0*xi*xi)*zeta+(16.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 12.0*xi-24.0*xi*xi+2.0*(-8.0*xi+16.0*xi*xi)*eta+2.0*(-12.0*xi+24.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = -4.0+16.0*xi+(12.0-48.0*xi)*eta+(-8.0+32.0*xi)*eta*eta+2.0*(4.0-16.0*xi+(-12.0+48.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 12.0*xi-24.0*xi*xi+2.0*(-8.0*xi+16.0*xi*xi)*eta+2.0*(-12.0*xi+24.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 8.0*xi-16.0*xi*xi+2.0*(-12.0*xi+24.0*xi*xi)*eta+2.0*(8.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (8.0-24.0*eta+16.0*eta*eta)*zeta+(-16.0+48.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (12.0-24.0*xi+2.0*(-8.0+16.0*xi)*eta)*zeta+(-24.0+48.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = -4.0+8.0*xi+(12.0-24.0*xi)*eta+(-8.0+16.0*xi)*eta*eta+2.0*(8.0-16.0*xi+(-24.0+48.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (12.0-24.0*xi+2.0*(-8.0+16.0*xi)*eta)*zeta+(-24.0+48.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-16.0*xi+16.0*xi*xi)*zeta+(32.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 12.0*xi-12.0*xi*xi+2.0*(-8.0*xi+8.0*xi*xi)*eta+2.0*(-24.0*xi+24.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = -4.0+8.0*xi+(12.0-24.0*xi)*eta+(-8.0+16.0*xi)*eta*eta+2.0*(8.0-16.0*xi+(-24.0+48.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 12.0*xi-12.0*xi*xi+2.0*(-8.0*xi+8.0*xi*xi)*eta+2.0*(-24.0*xi+24.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 16.0*xi-16.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta+2.0*(16.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (16.0-48.0*eta+32.0*eta*eta)*zeta+(-16.0+48.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (36.0-48.0*xi+2.0*(-24.0+32.0*xi)*eta)*zeta+(-36.0+48.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = -12.0+16.0*xi+(36.0-48.0*xi)*eta+(-24.0+32.0*xi)*eta*eta+2.0*(12.0-16.0*xi+(-36.0+48.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (36.0-48.0*xi+2.0*(-24.0+32.0*xi)*eta)*zeta+(-36.0+48.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (16.0-48.0*xi+32.0*xi*xi)*zeta+(-16.0+48.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -12.0+36.0*xi-24.0*xi*xi+2.0*(8.0-24.0*xi+16.0*xi*xi)*eta+2.0*(12.0-36.0*xi+24.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = -12.0+16.0*xi+(36.0-48.0*xi)*eta+(-24.0+32.0*xi)*eta*eta+2.0*(12.0-16.0*xi+(-36.0+48.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -12.0+36.0*xi-24.0*xi*xi+2.0*(8.0-24.0*xi+16.0*xi*xi)*eta+2.0*(12.0-36.0*xi+24.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = -8.0+24.0*xi-16.0*xi*xi+2.0*(12.0-36.0*xi+24.0*xi*xi)*eta+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = 8.0*eta-16.0*eta*eta+(-24.0*eta+48.0*eta*eta)*zeta+(16.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = -4.0+8.0*xi+2.0*(8.0-16.0*xi)*eta+(12.0-24.0*xi+2.0*(-24.0+48.0*xi)*eta)*zeta+(-8.0+16.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (12.0-24.0*xi)*eta+(-24.0+48.0*xi)*eta*eta+2.0*((-8.0+16.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = -4.0+8.0*xi+2.0*(8.0-16.0*xi)*eta+(12.0-24.0*xi+2.0*(-24.0+48.0*xi)*eta)*zeta+(-8.0+16.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = 16.0*xi-16.0*xi*xi+(-48.0*xi+48.0*xi*xi)*zeta+(32.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 12.0*xi-12.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta+2.0*(-8.0*xi+8.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (12.0-24.0*xi)*eta+(-24.0+48.0*xi)*eta*eta+2.0*((-8.0+16.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 12.0*xi-12.0*xi*xi+2.0*(-24.0*xi+24.0*xi*xi)*eta+2.0*(-8.0*xi+8.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-8.0*xi+8.0*xi*xi)*eta+2.0*(16.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-16.0*eta+32.0*eta*eta)*zeta+(16.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (4.0-16.0*xi+2.0*(-8.0+32.0*xi)*eta)*zeta+(-4.0+16.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (4.0-16.0*xi)*eta+(-8.0+32.0*xi)*eta*eta+2.0*((-4.0+16.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (4.0-16.0*xi+2.0*(-8.0+32.0*xi)*eta)*zeta+(-4.0+16.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-16.0*xi+32.0*xi*xi)*zeta+(16.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 4.0*xi-8.0*xi*xi+2.0*(-8.0*xi+16.0*xi*xi)*eta+2.0*(-4.0*xi+8.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (4.0-16.0*xi)*eta+(-8.0+32.0*xi)*eta*eta+2.0*((-4.0+16.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 4.0*xi-8.0*xi*xi+2.0*(-8.0*xi+16.0*xi*xi)*eta+2.0*(-4.0*xi+8.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-4.0*xi+8.0*xi*xi)*eta+2.0*(8.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-8.0*eta+16.0*eta*eta)*zeta+(16.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (4.0-8.0*xi+2.0*(-8.0+16.0*xi)*eta)*zeta+(-8.0+16.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (4.0-8.0*xi)*eta+(-8.0+16.0*xi)*eta*eta+2.0*((-8.0+16.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (4.0-8.0*xi+2.0*(-8.0+16.0*xi)*eta)*zeta+(-8.0+16.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-16.0*xi+16.0*xi*xi)*zeta+(32.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 4.0*xi-4.0*xi*xi+2.0*(-8.0*xi+8.0*xi*xi)*eta+2.0*(-8.0*xi+8.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (4.0-8.0*xi)*eta+(-8.0+16.0*xi)*eta*eta+2.0*((-8.0+16.0*xi)*eta+(16.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 4.0*xi-4.0*xi*xi+2.0*(-8.0*xi+8.0*xi*xi)*eta+2.0*(-8.0*xi+8.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-8.0*xi+8.0*xi*xi)*eta+2.0*(16.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-16.0*eta+32.0*eta*eta)*zeta+(16.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (12.0-16.0*xi+2.0*(-24.0+32.0*xi)*eta)*zeta+(-12.0+16.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (12.0-16.0*xi)*eta+(-24.0+32.0*xi)*eta*eta+2.0*((-12.0+16.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (12.0-16.0*xi+2.0*(-24.0+32.0*xi)*eta)*zeta+(-12.0+16.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (16.0-48.0*xi+32.0*xi*xi)*zeta+(-16.0+48.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -4.0+12.0*xi-8.0*xi*xi+2.0*(8.0-24.0*xi+16.0*xi*xi)*eta+2.0*(4.0-12.0*xi+8.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (12.0-16.0*xi)*eta+(-24.0+32.0*xi)*eta*eta+2.0*((-12.0+16.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -4.0+12.0*xi-8.0*xi*xi+2.0*(8.0-24.0*xi+16.0*xi*xi)*eta+2.0*(4.0-12.0*xi+8.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(4.0-12.0*xi+8.0*xi*xi)*eta+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = 16.0*eta-16.0*eta*eta+(-48.0*eta+48.0*eta*eta)*zeta+(32.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = -12.0+16.0*xi+2.0*(12.0-16.0*xi)*eta+(36.0-48.0*xi+2.0*(-36.0+48.0*xi)*eta)*zeta+(-24.0+32.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (36.0-48.0*xi)*eta+(-36.0+48.0*xi)*eta*eta+2.0*((-24.0+32.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = -12.0+16.0*xi+2.0*(12.0-16.0*xi)*eta+(36.0-48.0*xi+2.0*(-36.0+48.0*xi)*eta)*zeta+(-24.0+32.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = -8.0+24.0*xi-16.0*xi*xi+(24.0-72.0*xi+48.0*xi*xi)*zeta+(-16.0+48.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -12.0+36.0*xi-24.0*xi*xi+2.0*(12.0-36.0*xi+24.0*xi*xi)*eta+2.0*(8.0-24.0*xi+16.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (36.0-48.0*xi)*eta+(-36.0+48.0*xi)*eta*eta+2.0*((-24.0+32.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -12.0+36.0*xi-24.0*xi*xi+2.0*(12.0-36.0*xi+24.0*xi*xi)*eta+2.0*(8.0-24.0*xi+16.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(8.0-24.0*xi+16.0*xi*xi)*eta+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = 16.0*eta-16.0*eta*eta+(-48.0*eta+48.0*eta*eta)*zeta+(32.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = -4.0+16.0*xi+2.0*(4.0-16.0*xi)*eta+(12.0-48.0*xi+2.0*(-12.0+48.0*xi)*eta)*zeta+(-8.0+32.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (12.0-48.0*xi)*eta+(-12.0+48.0*xi)*eta*eta+2.0*((-8.0+32.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = -4.0+16.0*xi+2.0*(4.0-16.0*xi)*eta+(12.0-48.0*xi+2.0*(-12.0+48.0*xi)*eta)*zeta+(-8.0+32.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = 8.0*xi-16.0*xi*xi+(-24.0*xi+48.0*xi*xi)*zeta+(16.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 12.0*xi-24.0*xi*xi+2.0*(-12.0*xi+24.0*xi*xi)*eta+2.0*(-8.0*xi+16.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (12.0-48.0*xi)*eta+(-12.0+48.0*xi)*eta*eta+2.0*((-8.0+32.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 12.0*xi-24.0*xi*xi+2.0*(-12.0*xi+24.0*xi*xi)*eta+2.0*(-8.0*xi+16.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-8.0*xi+16.0*xi*xi)*eta+2.0*(8.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-16.0*eta+16.0*eta*eta)*zeta+(32.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (4.0-16.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta+(-8.0+32.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (4.0-16.0*xi)*eta+(-4.0+16.0*xi)*eta*eta+2.0*((-8.0+32.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (4.0-16.0*xi+2.0*(-4.0+16.0*xi)*eta)*zeta+(-8.0+32.0*xi+2.0*(8.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-8.0*xi+16.0*xi*xi)*zeta+(16.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 4.0*xi-8.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta+2.0*(-8.0*xi+16.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (4.0-16.0*xi)*eta+(-4.0+16.0*xi)*eta*eta+2.0*((-8.0+32.0*xi)*eta+(8.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 4.0*xi-8.0*xi*xi+2.0*(-4.0*xi+8.0*xi*xi)*eta+2.0*(-8.0*xi+16.0*xi*xi+2.0*(8.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-8.0*xi+16.0*xi*xi)*eta+2.0*(8.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-16.0*eta+16.0*eta*eta)*zeta+(32.0*eta-32.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (12.0-16.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta+(-24.0+32.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (12.0-16.0*xi)*eta+(-12.0+16.0*xi)*eta*eta+2.0*((-24.0+32.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (12.0-16.0*xi+2.0*(-12.0+16.0*xi)*eta)*zeta+(-24.0+32.0*xi+2.0*(24.0-32.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (8.0-24.0*xi+16.0*xi*xi)*zeta+(-16.0+48.0*xi-32.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -4.0+12.0*xi-8.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta+2.0*(8.0-24.0*xi+16.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (12.0-16.0*xi)*eta+(-12.0+16.0*xi)*eta*eta+2.0*((-24.0+32.0*xi)*eta+(24.0-32.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -4.0+12.0*xi-8.0*xi*xi+2.0*(4.0-12.0*xi+8.0*xi*xi)*eta+2.0*(8.0-24.0*xi+16.0*xi*xi+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(8.0-24.0*xi+16.0*xi*xi)*eta+2.0*(-8.0+24.0*xi-16.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-32.0+96.0*eta-64.0*eta*eta)*zeta+(32.0-96.0*eta+64.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-48.0+96.0*xi+2.0*(32.0-64.0*xi)*eta)*zeta+(48.0-96.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = 16.0-32.0*xi+(-48.0+96.0*xi)*eta+(32.0-64.0*xi)*eta*eta+2.0*(-16.0+32.0*xi+(48.0-96.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-48.0+96.0*xi+2.0*(32.0-64.0*xi)*eta)*zeta+(48.0-96.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (64.0*xi-64.0*xi*xi)*zeta+(-64.0*xi+64.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -48.0*xi+48.0*xi*xi+2.0*(32.0*xi-32.0*xi*xi)*eta+2.0*(48.0*xi-48.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = 16.0-32.0*xi+(-48.0+96.0*xi)*eta+(32.0-64.0*xi)*eta*eta+2.0*(-16.0+32.0*xi+(48.0-96.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -48.0*xi+48.0*xi*xi+2.0*(32.0*xi-32.0*xi*xi)*eta+2.0*(48.0*xi-48.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = -32.0*xi+32.0*xi*xi+2.0*(48.0*xi-48.0*xi*xi)*eta+2.0*(-32.0*xi+32.0*xi*xi)*eta*eta;
-           return_value[0][0] = (32.0*eta-64.0*eta*eta)*zeta+(-32.0*eta+64.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-16.0+32.0*xi+2.0*(32.0-64.0*xi)*eta)*zeta+(16.0-32.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-16.0+32.0*xi)*eta+(32.0-64.0*xi)*eta*eta+2.0*((16.0-32.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-16.0+32.0*xi+2.0*(32.0-64.0*xi)*eta)*zeta+(16.0-32.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (64.0*xi-64.0*xi*xi)*zeta+(-64.0*xi+64.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -16.0*xi+16.0*xi*xi+2.0*(32.0*xi-32.0*xi*xi)*eta+2.0*(16.0*xi-16.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-16.0+32.0*xi)*eta+(32.0-64.0*xi)*eta*eta+2.0*((16.0-32.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -16.0*xi+16.0*xi*xi+2.0*(32.0*xi-32.0*xi*xi)*eta+2.0*(16.0*xi-16.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(16.0*xi-16.0*xi*xi)*eta+2.0*(-32.0*xi+32.0*xi*xi)*eta*eta;
-           return_value[0][0] = -32.0*eta+32.0*eta*eta+(96.0*eta-96.0*eta*eta)*zeta+(-64.0*eta+64.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = 16.0-32.0*xi+2.0*(-16.0+32.0*xi)*eta+(-48.0+96.0*xi+2.0*(48.0-96.0*xi)*eta)*zeta+(32.0-64.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-48.0+96.0*xi)*eta+(48.0-96.0*xi)*eta*eta+2.0*((32.0-64.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = 16.0-32.0*xi+2.0*(-16.0+32.0*xi)*eta+(-48.0+96.0*xi+2.0*(48.0-96.0*xi)*eta)*zeta+(32.0-64.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = -32.0*xi+32.0*xi*xi+(96.0*xi-96.0*xi*xi)*zeta+(-64.0*xi+64.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -48.0*xi+48.0*xi*xi+2.0*(48.0*xi-48.0*xi*xi)*eta+2.0*(32.0*xi-32.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-48.0+96.0*xi)*eta+(48.0-96.0*xi)*eta*eta+2.0*((32.0-64.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -48.0*xi+48.0*xi*xi+2.0*(48.0*xi-48.0*xi*xi)*eta+2.0*(32.0*xi-32.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(32.0*xi-32.0*xi*xi)*eta+2.0*(-32.0*xi+32.0*xi*xi)*eta*eta;
-           return_value[0][0] = (64.0*eta-64.0*eta*eta)*zeta+(-64.0*eta+64.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-16.0+64.0*xi+2.0*(16.0-64.0*xi)*eta)*zeta+(16.0-64.0*xi+2.0*(-16.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-16.0+64.0*xi)*eta+(16.0-64.0*xi)*eta*eta+2.0*((16.0-64.0*xi)*eta+(-16.0+64.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-16.0+64.0*xi+2.0*(16.0-64.0*xi)*eta)*zeta+(16.0-64.0*xi+2.0*(-16.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (32.0*xi-64.0*xi*xi)*zeta+(-32.0*xi+64.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -16.0*xi+32.0*xi*xi+2.0*(16.0*xi-32.0*xi*xi)*eta+2.0*(16.0*xi-32.0*xi*xi+2.0*(-16.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-16.0+64.0*xi)*eta+(16.0-64.0*xi)*eta*eta+2.0*((16.0-64.0*xi)*eta+(-16.0+64.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -16.0*xi+32.0*xi*xi+2.0*(16.0*xi-32.0*xi*xi)*eta+2.0*(16.0*xi-32.0*xi*xi+2.0*(-16.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(16.0*xi-32.0*xi*xi)*eta+2.0*(-16.0*xi+32.0*xi*xi)*eta*eta;
-           return_value[0][0] = (32.0*eta-32.0*eta*eta)*zeta+(-64.0*eta+64.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-16.0+32.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta+(32.0-64.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-16.0+32.0*xi)*eta+(16.0-32.0*xi)*eta*eta+2.0*((32.0-64.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-16.0+32.0*xi+2.0*(16.0-32.0*xi)*eta)*zeta+(32.0-64.0*xi+2.0*(-32.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (32.0*xi-32.0*xi*xi)*zeta+(-64.0*xi+64.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = -16.0*xi+16.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta+2.0*(32.0*xi-32.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-16.0+32.0*xi)*eta+(16.0-32.0*xi)*eta*eta+2.0*((32.0-64.0*xi)*eta+(-32.0+64.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = -16.0*xi+16.0*xi*xi+2.0*(16.0*xi-16.0*xi*xi)*eta+2.0*(32.0*xi-32.0*xi*xi+2.0*(-32.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(32.0*xi-32.0*xi*xi)*eta+2.0*(-32.0*xi+32.0*xi*xi)*eta*eta;
-           return_value[0][0] = (64.0*eta-64.0*eta*eta)*zeta+(-64.0*eta+64.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (-48.0+64.0*xi+2.0*(48.0-64.0*xi)*eta)*zeta+(48.0-64.0*xi+2.0*(-48.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (-48.0+64.0*xi)*eta+(48.0-64.0*xi)*eta*eta+2.0*((48.0-64.0*xi)*eta+(-48.0+64.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (-48.0+64.0*xi+2.0*(48.0-64.0*xi)*eta)*zeta+(48.0-64.0*xi+2.0*(-48.0+64.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-32.0+96.0*xi-64.0*xi*xi)*zeta+(32.0-96.0*xi+64.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 16.0-48.0*xi+32.0*xi*xi+2.0*(-16.0+48.0*xi-32.0*xi*xi)*eta+2.0*(-16.0+48.0*xi-32.0*xi*xi+2.0*(16.0-48.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (-48.0+64.0*xi)*eta+(48.0-64.0*xi)*eta*eta+2.0*((48.0-64.0*xi)*eta+(-48.0+64.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 16.0-48.0*xi+32.0*xi*xi+2.0*(-16.0+48.0*xi-32.0*xi*xi)*eta+2.0*(-16.0+48.0*xi-32.0*xi*xi+2.0*(16.0-48.0*xi+32.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-16.0+48.0*xi-32.0*xi*xi)*eta+2.0*(16.0-48.0*xi+32.0*xi*xi)*eta*eta;
-           return_value[0][0] = (-128.0*eta+128.0*eta*eta)*zeta+(128.0*eta-128.0*eta*eta)*zeta*zeta;
-           return_value[0][1] = (64.0-128.0*xi+2.0*(-64.0+128.0*xi)*eta)*zeta+(-64.0+128.0*xi+2.0*(64.0-128.0*xi)*eta)*zeta*zeta;
-           return_value[0][2] = (64.0-128.0*xi)*eta+(-64.0+128.0*xi)*eta*eta+2.0*((-64.0+128.0*xi)*eta+(64.0-128.0*xi)*eta*eta)*zeta;
-           return_value[1][0] = (64.0-128.0*xi+2.0*(-64.0+128.0*xi)*eta)*zeta+(-64.0+128.0*xi+2.0*(64.0-128.0*xi)*eta)*zeta*zeta;
-           return_value[1][1] = (-128.0*xi+128.0*xi*xi)*zeta+(128.0*xi-128.0*xi*xi)*zeta*zeta;
-           return_value[1][2] = 64.0*xi-64.0*xi*xi+2.0*(-64.0*xi+64.0*xi*xi)*eta+2.0*(-64.0*xi+64.0*xi*xi+2.0*(64.0*xi-64.0*xi*xi)*eta)*zeta;
-           return_value[2][0] = (64.0-128.0*xi)*eta+(-64.0+128.0*xi)*eta*eta+2.0*((-64.0+128.0*xi)*eta+(64.0-128.0*xi)*eta*eta)*zeta;
-           return_value[2][1] = 64.0*xi-64.0*xi*xi+2.0*(-64.0*xi+64.0*xi*xi)*eta+2.0*(-64.0*xi+64.0*xi*xi+2.0*(64.0*xi-64.0*xi*xi)*eta)*zeta;
-           return_value[2][2] = 2.0*(-64.0*xi+64.0*xi*xi)*eta+2.0*(64.0*xi-64.0*xi*xi)*eta*eta;
-           break;
-    };
-  return return_value;
-};
-
-
-
-template <>
-void FEQ2<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                                    FullMatrix<double> &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-  throw ExcComputationNotUseful(3);
-};
-
-
-
-template <>
-void FEQ2<3>::get_unit_support_points (std::vector<Point<3> > &unit_points) const
-{
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-  
-  unit_points[0] = Point<3>(0, 0, 0);
-  unit_points[1] = Point<3>(1, 0, 0);
-  unit_points[2] = Point<3>(1, 0, 1);
-  unit_points[3] = Point<3>(0, 0, 1);
-  unit_points[4] = Point<3>(0, 1, 0);
-  unit_points[5] = Point<3>(1, 1, 0);
-  unit_points[6] = Point<3>(1, 1, 1);
-  unit_points[7] = Point<3>(0, 1, 1);
-  unit_points[8] = Point<3>(1/2, 0, 0);
-  unit_points[9] = Point<3>(1, 0, 1/2);
-  unit_points[10] = Point<3>(1/2, 0, 1);
-  unit_points[11] = Point<3>(0, 0, 1/2);
-  unit_points[12] = Point<3>(1/2, 1, 0);
-  unit_points[13] = Point<3>(1, 1, 1/2);
-  unit_points[14] = Point<3>(1/2, 1, 1);
-  unit_points[15] = Point<3>(0, 1, 1/2);
-  unit_points[16] = Point<3>(0, 1/2, 0);
-  unit_points[17] = Point<3>(1, 1/2, 0);
-  unit_points[18] = Point<3>(1, 1/2, 1);
-  unit_points[19] = Point<3>(0, 1/2, 1);
-  unit_points[20] = Point<3>(1/2, 0, 1/2);
-  unit_points[21] = Point<3>(1/2, 1, 1/2);
-  unit_points[22] = Point<3>(1/2, 1/2, 0);
-  unit_points[23] = Point<3>(1, 1/2, 1/2);
-  unit_points[24] = Point<3>(1/2, 1/2, 1);
-  unit_points[25] = Point<3>(0, 1/2, 1/2);
-  unit_points[26] = Point<3>(1/2, 1/2, 1/2);
-};
-
-
-
-template <>
-void FEQ2<3>::get_support_points (const DoFHandler<3>::cell_iterator &cell,
-                                 std::vector<Point<3> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<3>::ExcWrongFieldDimension (support_points.size(),
-                                                       dofs_per_cell));
-
-  const Point<3> vertices[8] = { cell->vertex(0),
-                                  cell->vertex(1),
-                                  cell->vertex(2),
-                                  cell->vertex(3),
-                                  cell->vertex(4),
-                                  cell->vertex(5),
-                                  cell->vertex(6),
-                                  cell->vertex(7)  };
-  
-  support_points[0](0) = vertices[0](0);
-  support_points[0](1) = vertices[0](1);
-  support_points[0](2) = vertices[0](2);
-  support_points[1](0) = vertices[1](0);
-  support_points[1](1) = vertices[1](1);
-  support_points[1](2) = vertices[1](2);
-  support_points[2](0) = vertices[2](0);
-  support_points[2](1) = vertices[2](1);
-  support_points[2](2) = vertices[2](2);
-  support_points[3](0) = vertices[3](0);
-  support_points[3](1) = vertices[3](1);
-  support_points[3](2) = vertices[3](2);
-  support_points[4](0) = vertices[4](0);
-  support_points[4](1) = vertices[4](1);
-  support_points[4](2) = vertices[4](2);
-  support_points[5](0) = vertices[5](0);
-  support_points[5](1) = vertices[5](1);
-  support_points[5](2) = vertices[5](2);
-  support_points[6](0) = vertices[6](0);
-  support_points[6](1) = vertices[6](1);
-  support_points[6](2) = vertices[6](2);
-  support_points[7](0) = vertices[7](0);
-  support_points[7](1) = vertices[7](1);
-  support_points[7](2) = vertices[7](2);
-  support_points[8](0) = vertices[0](0)/2.0+vertices[1](0)/2.0;
-  support_points[8](1) = vertices[0](1)/2.0+vertices[1](1)/2.0;
-  support_points[8](2) = vertices[0](2)/2.0+vertices[1](2)/2.0;
-  support_points[9](0) = vertices[1](0)/2.0+vertices[2](0)/2.0;
-  support_points[9](1) = vertices[1](1)/2.0+vertices[2](1)/2.0;
-  support_points[9](2) = vertices[1](2)/2.0+vertices[2](2)/2.0;
-  support_points[10](0) = vertices[2](0)/2.0+vertices[3](0)/2.0;
-  support_points[10](1) = vertices[2](1)/2.0+vertices[3](1)/2.0;
-  support_points[10](2) = vertices[2](2)/2.0+vertices[3](2)/2.0;
-  support_points[11](0) = vertices[0](0)/2.0+vertices[3](0)/2.0;
-  support_points[11](1) = vertices[0](1)/2.0+vertices[3](1)/2.0;
-  support_points[11](2) = vertices[0](2)/2.0+vertices[3](2)/2.0;
-  support_points[12](0) = vertices[4](0)/2.0+vertices[5](0)/2.0;
-  support_points[12](1) = vertices[4](1)/2.0+vertices[5](1)/2.0;
-  support_points[12](2) = vertices[4](2)/2.0+vertices[5](2)/2.0;
-  support_points[13](0) = vertices[5](0)/2.0+vertices[6](0)/2.0;
-  support_points[13](1) = vertices[5](1)/2.0+vertices[6](1)/2.0;
-  support_points[13](2) = vertices[5](2)/2.0+vertices[6](2)/2.0;
-  support_points[14](0) = vertices[6](0)/2.0+vertices[7](0)/2.0;
-  support_points[14](1) = vertices[6](1)/2.0+vertices[7](1)/2.0;
-  support_points[14](2) = vertices[6](2)/2.0+vertices[7](2)/2.0;
-  support_points[15](0) = vertices[4](0)/2.0+vertices[7](0)/2.0;
-  support_points[15](1) = vertices[4](1)/2.0+vertices[7](1)/2.0;
-  support_points[15](2) = vertices[4](2)/2.0+vertices[7](2)/2.0;
-  support_points[16](0) = vertices[0](0)/2.0+vertices[4](0)/2.0;
-  support_points[16](1) = vertices[0](1)/2.0+vertices[4](1)/2.0;
-  support_points[16](2) = vertices[0](2)/2.0+vertices[4](2)/2.0;
-  support_points[17](0) = vertices[1](0)/2.0+vertices[5](0)/2.0;
-  support_points[17](1) = vertices[1](1)/2.0+vertices[5](1)/2.0;
-  support_points[17](2) = vertices[1](2)/2.0+vertices[5](2)/2.0;
-  support_points[18](0) = vertices[2](0)/2.0+vertices[6](0)/2.0;
-  support_points[18](1) = vertices[2](1)/2.0+vertices[6](1)/2.0;
-  support_points[18](2) = vertices[2](2)/2.0+vertices[6](2)/2.0;
-  support_points[19](0) = vertices[3](0)/2.0+vertices[7](0)/2.0;
-  support_points[19](1) = vertices[3](1)/2.0+vertices[7](1)/2.0;
-  support_points[19](2) = vertices[3](2)/2.0+vertices[7](2)/2.0;
-  support_points[20](0) = vertices[0](0)/4.0+vertices[1](0)/4.0+vertices[2](0)/4.0+vertices[3](0)/4.0;
-  support_points[20](1) = vertices[0](1)/4.0+vertices[1](1)/4.0+vertices[2](1)/4.0+vertices[3](1)/4.0;
-  support_points[20](2) = vertices[0](2)/4.0+vertices[1](2)/4.0+vertices[2](2)/4.0+vertices[3](2)/4.0;
-  support_points[21](0) = vertices[4](0)/4.0+vertices[5](0)/4.0+vertices[6](0)/4.0+vertices[7](0)/4.0;
-  support_points[21](1) = vertices[4](1)/4.0+vertices[5](1)/4.0+vertices[6](1)/4.0+vertices[7](1)/4.0;
-  support_points[21](2) = vertices[4](2)/4.0+vertices[5](2)/4.0+vertices[6](2)/4.0+vertices[7](2)/4.0;
-  support_points[22](0) = vertices[0](0)/4.0+vertices[1](0)/4.0+vertices[4](0)/4.0+vertices[5](0)/4.0;
-  support_points[22](1) = vertices[0](1)/4.0+vertices[1](1)/4.0+vertices[4](1)/4.0+vertices[5](1)/4.0;
-  support_points[22](2) = vertices[0](2)/4.0+vertices[1](2)/4.0+vertices[4](2)/4.0+vertices[5](2)/4.0;
-  support_points[23](0) = vertices[1](0)/4.0+vertices[2](0)/4.0+vertices[5](0)/4.0+vertices[6](0)/4.0;
-  support_points[23](1) = vertices[1](1)/4.0+vertices[2](1)/4.0+vertices[5](1)/4.0+vertices[6](1)/4.0;
-  support_points[23](2) = vertices[1](2)/4.0+vertices[2](2)/4.0+vertices[5](2)/4.0+vertices[6](2)/4.0;
-  support_points[24](0) = vertices[2](0)/4.0+vertices[3](0)/4.0+vertices[6](0)/4.0+vertices[7](0)/4.0;
-  support_points[24](1) = vertices[2](1)/4.0+vertices[3](1)/4.0+vertices[6](1)/4.0+vertices[7](1)/4.0;
-  support_points[24](2) = vertices[2](2)/4.0+vertices[3](2)/4.0+vertices[6](2)/4.0+vertices[7](2)/4.0;
-  support_points[25](0) = vertices[0](0)/4.0+vertices[3](0)/4.0+vertices[4](0)/4.0+vertices[7](0)/4.0;
-  support_points[25](1) = vertices[0](1)/4.0+vertices[3](1)/4.0+vertices[4](1)/4.0+vertices[7](1)/4.0;
-  support_points[25](2) = vertices[0](2)/4.0+vertices[3](2)/4.0+vertices[4](2)/4.0+vertices[7](2)/4.0;
-  support_points[26](0) = vertices[0](0)/8.0+vertices[1](0)/8.0+vertices[2](0)/8.0+vertices[3](0)/8.0+vertices[4](0)/8.0+vertices[5](0)/8.0+vertices[6](0)/8.0+vertices[7](0)/8.0;
-  support_points[26](1) = vertices[0](1)/8.0+vertices[1](1)/8.0+vertices[2](1)/8.0+vertices[3](1)/8.0+vertices[4](1)/8.0+vertices[5](1)/8.0+vertices[6](1)/8.0+vertices[7](1)/8.0;
-  support_points[26](2) = vertices[0](2)/8.0+vertices[1](2)/8.0+vertices[2](2)/8.0+vertices[3](2)/8.0+vertices[4](2)/8.0+vertices[5](2)/8.0+vertices[6](2)/8.0+vertices[7](2)/8.0;
-};
-
-
-
-template <>
-void FEQ2<3>::get_face_support_points (const DoFHandler<3>::face_iterator &face,
-                                      std::vector<Point<3> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_face,
-         FiniteElementBase<3>::ExcWrongFieldDimension (support_points.size(),
-                                                       dofs_per_face));
-
-  for (unsigned int vertex=0; vertex<4; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-  for (unsigned int line=0; line<4; ++line)
-    support_points[4+line] = (support_points[line] + support_points[(line+4)%4]) / 2;
-  support_points[8] = (support_points[0] +
-                      support_points[1] +
-                      support_points[2] +
-                      support_points[3]) / 4;
-};
-
-#endif
-
-
-// explicit instantiations
-
-template class FEQ2<deal_II_dimension>;
-
diff --git a/deal.II/deal.II/source/fe/fe_lib.quartic.cc b/deal.II/deal.II/source/fe/fe_lib.quartic.cc
deleted file mode 100644 (file)
index 07f3799..0000000
+++ /dev/null
@@ -1,2867 +0,0 @@
-//----------------------------  fe_lib.quartic.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  fe_lib.quartic.cc  ---------------------------
-
-
-#include <fe/fe_lib.lagrange.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-#include <grid/geometry_info.h>
-#include <algorithm>
-
-
-// declare explicit specializations before use:
-template <> void FEQ4<deal_II_dimension>::initialize_matrices ();
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEQ4<1>::FEQ4 () :
-               FEQ1Mapping<1> (1, 3, 0, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ4<1>::FEQ4 (const int) :
-               FEQ1Mapping<1> (0, 5, 0, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ4<1>::initialize_matrices ()
-{
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,3) = 1.0;
-  prolongation[0](2,0) = 35.0/128.0;
-  prolongation[0](2,1) = -5.0/128.0;
-  prolongation[0](2,2) = 35.0/32.0;
-  prolongation[0](2,3) = -35.0/64.0;
-  prolongation[0](2,4) = 7.0/32.0;
-  prolongation[0](3,2) = 1.0;
-  prolongation[0](4,0) = -5.0/128.0;
-  prolongation[0](4,1) = 3.0/128.0;
-  prolongation[0](4,2) = 15.0/32.0;
-  prolongation[0](4,3) = 45.0/64.0;
-  prolongation[0](4,4) = -5.0/32.0;
-  prolongation[1](0,3) = 1.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,0) = 3.0/128.0;
-  prolongation[1](2,1) = -5.0/128.0;
-  prolongation[1](2,2) = -5.0/32.0;
-  prolongation[1](2,3) = 45.0/64.0;
-  prolongation[1](2,4) = 15.0/32.0;
-  prolongation[1](3,4) = 1.0;
-  prolongation[1](4,0) = -5.0/128.0;
-  prolongation[1](4,1) = 35.0/128.0;
-  prolongation[1](4,2) = 7.0/32.0;
-  prolongation[1](4,3) = -35.0/64.0;
-  prolongation[1](4,4) = 35.0/32.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](2,3) = 1.0;
-  restriction[0](3,1) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](3,0) = 1.0;
-  restriction[1](4,3) = 1.0;
-};
-
-
-template <>
-double
-FEQ4<1>::shape_value(const unsigned int i,
-                    const Point<1>     &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  const double xi = p(0);
-  switch (i)
-    {
-      case 0: return 32.0/3.0*xi*xi*xi*xi-80.0/3.0*xi*xi*xi+70.0/3.0*xi*xi-25.0/3.0*xi+1.0;
-      case 1: return 32.0/3.0*xi*xi*xi*xi-16.0*xi*xi*xi+22.0/3.0*xi*xi-xi;
-      case 2: return -128.0/3.0*xi*xi*xi*xi+96.0*xi*xi*xi-208.0/3.0*xi*xi+16.0*xi;
-      case 3: return 64.0*xi*xi*xi*xi-128.0*xi*xi*xi+76.0*xi*xi-12.0*xi;
-      case 4: return -128.0/3.0*xi*xi*xi*xi+224.0/3.0*xi*xi*xi-112.0/3.0*xi*xi+16.0/3.0*xi;
-    };
-  return 0.;
-};
-
-
-template <>
-Tensor<1,1>
-FEQ4<1>::shape_grad(const unsigned int i,
-                   const Point<1>    &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-  const double xi = p(0);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<1>(128.0/3.0*xi*xi*xi-80.0*xi*xi+140.0/3.0*xi-25.0/3.0);
-      case 1: return Point<1>(128.0/3.0*xi*xi*xi-48.0*xi*xi+44.0/3.0*xi-1.0);
-      case 2: return Point<1>(-512.0/3.0*xi*xi*xi+288.0*xi*xi-416.0/3.0*xi+16.0);
-      case 3: return Point<1>(256.0*xi*xi*xi-384.0*xi*xi+152.0*xi-12.0);
-      case 4: return Point<1>(-512.0/3.0*xi*xi*xi+224.0*xi*xi-224.0/3.0*xi+16.0/3.0);
-    };
-  return Point<1>();
-};
-
-
-template <>
-Tensor<2,1>
-FEQ4<1>::shape_grad_grad (const unsigned int i,
-                         const Point<1>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0);
-  Tensor<2,1> return_value;
-  switch (i) 
-    {
-      case 0: return_value[0][0] = 128.0*xi*xi-160.0*xi+140.0/3.0;
-      case 1: return_value[0][0] = 128.0*xi*xi-96.0*xi+44.0/3.0;
-      case 2: return_value[0][0] = -512.0*xi*xi+576.0*xi-416.0/3.0;
-      case 3: return_value[0][0] = 768.0*xi*xi-768.0*xi+152.0;
-      case 4: return_value[0][0] = -512.0*xi*xi+448.0*xi-224.0/3.0;
-    };
-
-  return return_value;
-};
-
-
-template <>
-void FEQ4<1>::get_unit_support_points (std::vector<Point<1> > &unit_points) const {
-  FiniteElement<1>::get_unit_support_points (unit_points);
-};
-
-
-template <>
-void FEQ4<1>::get_support_points (const DoFHandler<1>::cell_iterator &cell,
-                                 std::vector<Point<1> >  &support_points) const {
-  FiniteElement<1>::get_support_points (cell, support_points);
-};
-
-
-template <>
-void FEQ4<1>::get_face_support_points (const DoFHandler<1>::face_iterator &,
-                                      std::vector<Point<1> >  &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ4<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.n(),dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         ExcWrongFieldDimension(local_mass_matrix.m(),dofs_per_cell));
-
-  const double h = cell->vertex(1)(0) - cell->vertex(0)(0);
-  Assert (h>0, ExcJacobiDeterminantHasWrongSign());
-
-  const double t1 = 146.0/2835.0*h;
-  const double t2 = 29.0/5670.0*h;
-  const double t3 = 148.0/2835.0*h;
-  const double t4 = 29.0/945.0*h;
-  const double t5 = 4.0/405.0*h;
-  const double t6 = 128.0/405.0*h;
-  const double t7 = 64.0/945.0*h;
-  const double t8 = 128.0/2835.0*h;
-  local_mass_matrix(0,0) = t1;
-  local_mass_matrix(0,1) = -t2;
-  local_mass_matrix(0,2) = t3;
-  local_mass_matrix(0,3) = -t4;
-  local_mass_matrix(0,4) = t5;
-  local_mass_matrix(1,0) = -t2;
-  local_mass_matrix(1,1) = t1;
-  local_mass_matrix(1,2) = t5;
-  local_mass_matrix(1,3) = -t4;
-  local_mass_matrix(1,4) = t3;
-  local_mass_matrix(2,0) = t3;
-  local_mass_matrix(2,1) = t5;
-  local_mass_matrix(2,2) = t6;
-  local_mass_matrix(2,3) = -t7;
-  local_mass_matrix(2,4) = t8;
-  local_mass_matrix(3,0) = -t4;
-  local_mass_matrix(3,1) = -t4;
-  local_mass_matrix(3,2) = -t7;
-  local_mass_matrix(3,3) = 104.0/315.0*h;
-  local_mass_matrix(3,4) = -t7;
-  local_mass_matrix(4,0) = t5;
-  local_mass_matrix(4,1) = t3;
-  local_mass_matrix(4,2) = t8;
-  local_mass_matrix(4,3) = -t7;
-  local_mass_matrix(4,4) = t6;
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEQ4<2>::FEQ4 () :
-               FEQ1Mapping<2> (1, 3, 9, 0, 1,
-                               std::vector<bool> (1, false))
-{
-  interface_constraints(0,3) = 1.0;
-  interface_constraints(1,0) = 35.0/128.0;
-  interface_constraints(1,1) = -5.0/128.0;
-  interface_constraints(1,2) = 35.0/32.0;
-  interface_constraints(1,3) = -35.0/64.0;
-  interface_constraints(1,4) = 7.0/32.0;
-  interface_constraints(2,2) = 1.0;
-  interface_constraints(3,0) = -5.0/128.0;
-  interface_constraints(3,1) = 3.0/128.0;
-  interface_constraints(3,2) = 15.0/32.0;
-  interface_constraints(3,3) = 45.0/64.0;
-  interface_constraints(3,4) = -5.0/32.0;
-  interface_constraints(4,0) = 3.0/128.0;
-  interface_constraints(4,1) = -5.0/128.0;
-  interface_constraints(4,2) = -5.0/32.0;
-  interface_constraints(4,3) = 45.0/64.0;
-  interface_constraints(4,4) = 15.0/32.0;
-  interface_constraints(5,4) = 1.0;
-  interface_constraints(6,0) = -5.0/128.0;
-  interface_constraints(6,1) = 35.0/128.0;
-  interface_constraints(6,2) = 7.0/32.0;
-  interface_constraints(6,3) = -35.0/64.0;
-  interface_constraints(6,4) = 35.0/32.0;
-
-  initialize_matrices ();
-};
-
-
-template <>
-FEQ4<2>::FEQ4 (const int) :
-               FEQ1Mapping<2> (0, 0, 25, 0, 1,
-                               std::vector<bool> (1, true))
-{
-  initialize_matrices ();
-};
-
-
-template <>
-void FEQ4<2>::initialize_matrices ()
-{
-  prolongation[0](0,0) = 1.0;
-  prolongation[0](1,5) = 1.0;
-  prolongation[0](2,24) = 1.0;
-  prolongation[0](3,14) = 1.0;
-  prolongation[0](4,0) = 35.0/128.0;
-  prolongation[0](4,1) = -5.0/128.0;
-  prolongation[0](4,4) = 35.0/32.0;
-  prolongation[0](4,5) = -35.0/64.0;
-  prolongation[0](4,6) = 7.0/32.0;
-  prolongation[0](5,4) = 1.0;
-  prolongation[0](6,0) = -5.0/128.0;
-  prolongation[0](6,1) = 3.0/128.0;
-  prolongation[0](6,4) = 15.0/32.0;
-  prolongation[0](6,5) = 45.0/64.0;
-  prolongation[0](6,6) = -5.0/32.0;
-  prolongation[0](7,5) = 35.0/128.0;
-  prolongation[0](7,11) = -5.0/128.0;
-  prolongation[0](7,20) = 35.0/32.0;
-  prolongation[0](7,22) = 7.0/32.0;
-  prolongation[0](7,24) = -35.0/64.0;
-  prolongation[0](8,20) = 1.0;
-  prolongation[0](9,5) = -5.0/128.0;
-  prolongation[0](9,11) = 3.0/128.0;
-  prolongation[0](9,20) = 15.0/32.0;
-  prolongation[0](9,22) = -5.0/32.0;
-  prolongation[0](9,24) = 45.0/64.0;
-  prolongation[0](10,8) = -5.0/128.0;
-  prolongation[0](10,14) = 35.0/128.0;
-  prolongation[0](10,21) = 7.0/32.0;
-  prolongation[0](10,23) = 35.0/32.0;
-  prolongation[0](10,24) = -35.0/64.0;
-  prolongation[0](11,23) = 1.0;
-  prolongation[0](12,8) = 3.0/128.0;
-  prolongation[0](12,14) = -5.0/128.0;
-  prolongation[0](12,21) = -5.0/32.0;
-  prolongation[0](12,23) = 15.0/32.0;
-  prolongation[0](12,24) = 45.0/64.0;
-  prolongation[0](13,0) = 35.0/128.0;
-  prolongation[0](13,3) = -5.0/128.0;
-  prolongation[0](13,13) = 35.0/32.0;
-  prolongation[0](13,14) = -35.0/64.0;
-  prolongation[0](13,15) = 7.0/32.0;
-  prolongation[0](14,13) = 1.0;
-  prolongation[0](15,0) = -5.0/128.0;
-  prolongation[0](15,3) = 3.0/128.0;
-  prolongation[0](15,13) = 15.0/32.0;
-  prolongation[0](15,14) = 45.0/64.0;
-  prolongation[0](15,15) = -5.0/32.0;
-  prolongation[0](16,0) = 1225.0/16384.0;
-  prolongation[0](16,1) = -175.0/16384.0;
-  prolongation[0](16,2) = 25.0/16384.0;
-  prolongation[0](16,3) = -175.0/16384.0;
-  prolongation[0](16,4) = 1225.0/4096.0;
-  prolongation[0](16,5) = -1225.0/8192.0;
-  prolongation[0](16,6) = 245.0/4096.0;
-  prolongation[0](16,7) = -175.0/4096.0;
-  prolongation[0](16,8) = 175.0/8192.0;
-  prolongation[0](16,9) = -35.0/4096.0;
-  prolongation[0](16,10) = -175.0/4096.0;
-  prolongation[0](16,11) = 175.0/8192.0;
-  prolongation[0](16,12) = -35.0/4096.0;
-  prolongation[0](16,13) = 1225.0/4096.0;
-  prolongation[0](16,14) = -1225.0/8192.0;
-  prolongation[0](16,15) = 245.0/4096.0;
-  prolongation[0](16,16) = 1225.0/1024.0;
-  prolongation[0](16,17) = 245.0/1024.0;
-  prolongation[0](16,18) = 49.0/1024.0;
-  prolongation[0](16,19) = 245.0/1024.0;
-  prolongation[0](16,20) = -1225.0/2048.0;
-  prolongation[0](16,21) = -245.0/2048.0;
-  prolongation[0](16,22) = -245.0/2048.0;
-  prolongation[0](16,23) = -1225.0/2048.0;
-  prolongation[0](16,24) = 1225.0/4096.0;
-  prolongation[0](17,0) = -175.0/16384.0;
-  prolongation[0](17,1) = 105.0/16384.0;
-  prolongation[0](17,2) = -15.0/16384.0;
-  prolongation[0](17,3) = 25.0/16384.0;
-  prolongation[0](17,4) = 525.0/4096.0;
-  prolongation[0](17,5) = 1575.0/8192.0;
-  prolongation[0](17,6) = -175.0/4096.0;
-  prolongation[0](17,7) = 105.0/4096.0;
-  prolongation[0](17,8) = -105.0/8192.0;
-  prolongation[0](17,9) = 21.0/4096.0;
-  prolongation[0](17,10) = -75.0/4096.0;
-  prolongation[0](17,11) = -225.0/8192.0;
-  prolongation[0](17,12) = 25.0/4096.0;
-  prolongation[0](17,13) = -175.0/4096.0;
-  prolongation[0](17,14) = 175.0/8192.0;
-  prolongation[0](17,15) = -35.0/4096.0;
-  prolongation[0](17,16) = 525.0/1024.0;
-  prolongation[0](17,17) = -175.0/1024.0;
-  prolongation[0](17,18) = -35.0/1024.0;
-  prolongation[0](17,19) = 105.0/1024.0;
-  prolongation[0](17,20) = 1575.0/2048.0;
-  prolongation[0](17,21) = 175.0/2048.0;
-  prolongation[0](17,22) = 315.0/2048.0;
-  prolongation[0](17,23) = -525.0/2048.0;
-  prolongation[0](17,24) = -1575.0/4096.0;
-  prolongation[0](18,0) = 25.0/16384.0;
-  prolongation[0](18,1) = -15.0/16384.0;
-  prolongation[0](18,2) = 9.0/16384.0;
-  prolongation[0](18,3) = -15.0/16384.0;
-  prolongation[0](18,4) = -75.0/4096.0;
-  prolongation[0](18,5) = -225.0/8192.0;
-  prolongation[0](18,6) = 25.0/4096.0;
-  prolongation[0](18,7) = 45.0/4096.0;
-  prolongation[0](18,8) = 135.0/8192.0;
-  prolongation[0](18,9) = -15.0/4096.0;
-  prolongation[0](18,10) = 45.0/4096.0;
-  prolongation[0](18,11) = 135.0/8192.0;
-  prolongation[0](18,12) = -15.0/4096.0;
-  prolongation[0](18,13) = -75.0/4096.0;
-  prolongation[0](18,14) = -225.0/8192.0;
-  prolongation[0](18,15) = 25.0/4096.0;
-  prolongation[0](18,16) = 225.0/1024.0;
-  prolongation[0](18,17) = -75.0/1024.0;
-  prolongation[0](18,18) = 25.0/1024.0;
-  prolongation[0](18,19) = -75.0/1024.0;
-  prolongation[0](18,20) = 675.0/2048.0;
-  prolongation[0](18,21) = -225.0/2048.0;
-  prolongation[0](18,22) = -225.0/2048.0;
-  prolongation[0](18,23) = 675.0/2048.0;
-  prolongation[0](18,24) = 2025.0/4096.0;
-  prolongation[0](19,0) = -175.0/16384.0;
-  prolongation[0](19,1) = 25.0/16384.0;
-  prolongation[0](19,2) = -15.0/16384.0;
-  prolongation[0](19,3) = 105.0/16384.0;
-  prolongation[0](19,4) = -175.0/4096.0;
-  prolongation[0](19,5) = 175.0/8192.0;
-  prolongation[0](19,6) = -35.0/4096.0;
-  prolongation[0](19,7) = -75.0/4096.0;
-  prolongation[0](19,8) = -225.0/8192.0;
-  prolongation[0](19,9) = 25.0/4096.0;
-  prolongation[0](19,10) = 105.0/4096.0;
-  prolongation[0](19,11) = -105.0/8192.0;
-  prolongation[0](19,12) = 21.0/4096.0;
-  prolongation[0](19,13) = 525.0/4096.0;
-  prolongation[0](19,14) = 1575.0/8192.0;
-  prolongation[0](19,15) = -175.0/4096.0;
-  prolongation[0](19,16) = 525.0/1024.0;
-  prolongation[0](19,17) = 105.0/1024.0;
-  prolongation[0](19,18) = -35.0/1024.0;
-  prolongation[0](19,19) = -175.0/1024.0;
-  prolongation[0](19,20) = -525.0/2048.0;
-  prolongation[0](19,21) = 315.0/2048.0;
-  prolongation[0](19,22) = 175.0/2048.0;
-  prolongation[0](19,23) = 1575.0/2048.0;
-  prolongation[0](19,24) = -1575.0/4096.0;
-  prolongation[0](20,4) = 35.0/128.0;
-  prolongation[0](20,10) = -5.0/128.0;
-  prolongation[0](20,16) = 35.0/32.0;
-  prolongation[0](20,19) = 7.0/32.0;
-  prolongation[0](20,23) = -35.0/64.0;
-  prolongation[0](21,7) = 3.0/128.0;
-  prolongation[0](21,13) = -5.0/128.0;
-  prolongation[0](21,16) = 15.0/32.0;
-  prolongation[0](21,17) = -5.0/32.0;
-  prolongation[0](21,20) = 45.0/64.0;
-  prolongation[0](22,4) = -5.0/128.0;
-  prolongation[0](22,10) = 3.0/128.0;
-  prolongation[0](22,16) = 15.0/32.0;
-  prolongation[0](22,19) = -5.0/32.0;
-  prolongation[0](22,23) = 45.0/64.0;
-  prolongation[0](23,7) = -5.0/128.0;
-  prolongation[0](23,13) = 35.0/128.0;
-  prolongation[0](23,16) = 35.0/32.0;
-  prolongation[0](23,17) = 7.0/32.0;
-  prolongation[0](23,20) = -35.0/64.0;
-  prolongation[0](24,16) = 1.0;
-  prolongation[1](0,5) = 1.0;
-  prolongation[1](1,1) = 1.0;
-  prolongation[1](2,8) = 1.0;
-  prolongation[1](3,24) = 1.0;
-  prolongation[1](4,0) = 3.0/128.0;
-  prolongation[1](4,1) = -5.0/128.0;
-  prolongation[1](4,4) = -5.0/32.0;
-  prolongation[1](4,5) = 45.0/64.0;
-  prolongation[1](4,6) = 15.0/32.0;
-  prolongation[1](5,6) = 1.0;
-  prolongation[1](6,0) = -5.0/128.0;
-  prolongation[1](6,1) = 35.0/128.0;
-  prolongation[1](6,4) = 7.0/32.0;
-  prolongation[1](6,5) = -35.0/64.0;
-  prolongation[1](6,6) = 35.0/32.0;
-  prolongation[1](7,1) = 35.0/128.0;
-  prolongation[1](7,2) = -5.0/128.0;
-  prolongation[1](7,7) = 35.0/32.0;
-  prolongation[1](7,8) = -35.0/64.0;
-  prolongation[1](7,9) = 7.0/32.0;
-  prolongation[1](8,7) = 1.0;
-  prolongation[1](9,1) = -5.0/128.0;
-  prolongation[1](9,2) = 3.0/128.0;
-  prolongation[1](9,7) = 15.0/32.0;
-  prolongation[1](9,8) = 45.0/64.0;
-  prolongation[1](9,9) = -5.0/32.0;
-  prolongation[1](10,8) = -5.0/128.0;
-  prolongation[1](10,14) = 3.0/128.0;
-  prolongation[1](10,21) = 15.0/32.0;
-  prolongation[1](10,23) = -5.0/32.0;
-  prolongation[1](10,24) = 45.0/64.0;
-  prolongation[1](11,21) = 1.0;
-  prolongation[1](12,8) = 35.0/128.0;
-  prolongation[1](12,14) = -5.0/128.0;
-  prolongation[1](12,21) = 35.0/32.0;
-  prolongation[1](12,23) = 7.0/32.0;
-  prolongation[1](12,24) = -35.0/64.0;
-  prolongation[1](13,5) = 35.0/128.0;
-  prolongation[1](13,11) = -5.0/128.0;
-  prolongation[1](13,20) = 35.0/32.0;
-  prolongation[1](13,22) = 7.0/32.0;
-  prolongation[1](13,24) = -35.0/64.0;
-  prolongation[1](14,20) = 1.0;
-  prolongation[1](15,5) = -5.0/128.0;
-  prolongation[1](15,11) = 3.0/128.0;
-  prolongation[1](15,20) = 15.0/32.0;
-  prolongation[1](15,22) = -5.0/32.0;
-  prolongation[1](15,24) = 45.0/64.0;
-  prolongation[1](16,0) = 105.0/16384.0;
-  prolongation[1](16,1) = -175.0/16384.0;
-  prolongation[1](16,2) = 25.0/16384.0;
-  prolongation[1](16,3) = -15.0/16384.0;
-  prolongation[1](16,4) = -175.0/4096.0;
-  prolongation[1](16,5) = 1575.0/8192.0;
-  prolongation[1](16,6) = 525.0/4096.0;
-  prolongation[1](16,7) = -175.0/4096.0;
-  prolongation[1](16,8) = 175.0/8192.0;
-  prolongation[1](16,9) = -35.0/4096.0;
-  prolongation[1](16,10) = 25.0/4096.0;
-  prolongation[1](16,11) = -225.0/8192.0;
-  prolongation[1](16,12) = -75.0/4096.0;
-  prolongation[1](16,13) = 105.0/4096.0;
-  prolongation[1](16,14) = -105.0/8192.0;
-  prolongation[1](16,15) = 21.0/4096.0;
-  prolongation[1](16,16) = -175.0/1024.0;
-  prolongation[1](16,17) = 525.0/1024.0;
-  prolongation[1](16,18) = 105.0/1024.0;
-  prolongation[1](16,19) = -35.0/1024.0;
-  prolongation[1](16,20) = 1575.0/2048.0;
-  prolongation[1](16,21) = -525.0/2048.0;
-  prolongation[1](16,22) = 315.0/2048.0;
-  prolongation[1](16,23) = 175.0/2048.0;
-  prolongation[1](16,24) = -1575.0/4096.0;
-  prolongation[1](17,0) = -175.0/16384.0;
-  prolongation[1](17,1) = 1225.0/16384.0;
-  prolongation[1](17,2) = -175.0/16384.0;
-  prolongation[1](17,3) = 25.0/16384.0;
-  prolongation[1](17,4) = 245.0/4096.0;
-  prolongation[1](17,5) = -1225.0/8192.0;
-  prolongation[1](17,6) = 1225.0/4096.0;
-  prolongation[1](17,7) = 1225.0/4096.0;
-  prolongation[1](17,8) = -1225.0/8192.0;
-  prolongation[1](17,9) = 245.0/4096.0;
-  prolongation[1](17,10) = -35.0/4096.0;
-  prolongation[1](17,11) = 175.0/8192.0;
-  prolongation[1](17,12) = -175.0/4096.0;
-  prolongation[1](17,13) = -175.0/4096.0;
-  prolongation[1](17,14) = 175.0/8192.0;
-  prolongation[1](17,15) = -35.0/4096.0;
-  prolongation[1](17,16) = 245.0/1024.0;
-  prolongation[1](17,17) = 1225.0/1024.0;
-  prolongation[1](17,18) = 245.0/1024.0;
-  prolongation[1](17,19) = 49.0/1024.0;
-  prolongation[1](17,20) = -1225.0/2048.0;
-  prolongation[1](17,21) = -1225.0/2048.0;
-  prolongation[1](17,22) = -245.0/2048.0;
-  prolongation[1](17,23) = -245.0/2048.0;
-  prolongation[1](17,24) = 1225.0/4096.0;
-  prolongation[1](18,0) = 25.0/16384.0;
-  prolongation[1](18,1) = -175.0/16384.0;
-  prolongation[1](18,2) = 105.0/16384.0;
-  prolongation[1](18,3) = -15.0/16384.0;
-  prolongation[1](18,4) = -35.0/4096.0;
-  prolongation[1](18,5) = 175.0/8192.0;
-  prolongation[1](18,6) = -175.0/4096.0;
-  prolongation[1](18,7) = 525.0/4096.0;
-  prolongation[1](18,8) = 1575.0/8192.0;
-  prolongation[1](18,9) = -175.0/4096.0;
-  prolongation[1](18,10) = 21.0/4096.0;
-  prolongation[1](18,11) = -105.0/8192.0;
-  prolongation[1](18,12) = 105.0/4096.0;
-  prolongation[1](18,13) = -75.0/4096.0;
-  prolongation[1](18,14) = -225.0/8192.0;
-  prolongation[1](18,15) = 25.0/4096.0;
-  prolongation[1](18,16) = 105.0/1024.0;
-  prolongation[1](18,17) = 525.0/1024.0;
-  prolongation[1](18,18) = -175.0/1024.0;
-  prolongation[1](18,19) = -35.0/1024.0;
-  prolongation[1](18,20) = -525.0/2048.0;
-  prolongation[1](18,21) = 1575.0/2048.0;
-  prolongation[1](18,22) = 175.0/2048.0;
-  prolongation[1](18,23) = 315.0/2048.0;
-  prolongation[1](18,24) = -1575.0/4096.0;
-  prolongation[1](19,0) = -15.0/16384.0;
-  prolongation[1](19,1) = 25.0/16384.0;
-  prolongation[1](19,2) = -15.0/16384.0;
-  prolongation[1](19,3) = 9.0/16384.0;
-  prolongation[1](19,4) = 25.0/4096.0;
-  prolongation[1](19,5) = -225.0/8192.0;
-  prolongation[1](19,6) = -75.0/4096.0;
-  prolongation[1](19,7) = -75.0/4096.0;
-  prolongation[1](19,8) = -225.0/8192.0;
-  prolongation[1](19,9) = 25.0/4096.0;
-  prolongation[1](19,10) = -15.0/4096.0;
-  prolongation[1](19,11) = 135.0/8192.0;
-  prolongation[1](19,12) = 45.0/4096.0;
-  prolongation[1](19,13) = 45.0/4096.0;
-  prolongation[1](19,14) = 135.0/8192.0;
-  prolongation[1](19,15) = -15.0/4096.0;
-  prolongation[1](19,16) = -75.0/1024.0;
-  prolongation[1](19,17) = 225.0/1024.0;
-  prolongation[1](19,18) = -75.0/1024.0;
-  prolongation[1](19,19) = 25.0/1024.0;
-  prolongation[1](19,20) = 675.0/2048.0;
-  prolongation[1](19,21) = 675.0/2048.0;
-  prolongation[1](19,22) = -225.0/2048.0;
-  prolongation[1](19,23) = -225.0/2048.0;
-  prolongation[1](19,24) = 2025.0/4096.0;
-  prolongation[1](20,6) = 35.0/128.0;
-  prolongation[1](20,12) = -5.0/128.0;
-  prolongation[1](20,17) = 35.0/32.0;
-  prolongation[1](20,18) = 7.0/32.0;
-  prolongation[1](20,21) = -35.0/64.0;
-  prolongation[1](21,7) = 35.0/128.0;
-  prolongation[1](21,13) = -5.0/128.0;
-  prolongation[1](21,16) = 7.0/32.0;
-  prolongation[1](21,17) = 35.0/32.0;
-  prolongation[1](21,20) = -35.0/64.0;
-  prolongation[1](22,6) = -5.0/128.0;
-  prolongation[1](22,12) = 3.0/128.0;
-  prolongation[1](22,17) = 15.0/32.0;
-  prolongation[1](22,18) = -5.0/32.0;
-  prolongation[1](22,21) = 45.0/64.0;
-  prolongation[1](23,7) = -5.0/128.0;
-  prolongation[1](23,13) = 3.0/128.0;
-  prolongation[1](23,16) = -5.0/32.0;
-  prolongation[1](23,17) = 15.0/32.0;
-  prolongation[1](23,20) = 45.0/64.0;
-  prolongation[1](24,17) = 1.0;
-  prolongation[2](0,24) = 1.0;
-  prolongation[2](1,8) = 1.0;
-  prolongation[2](2,2) = 1.0;
-  prolongation[2](3,11) = 1.0;
-  prolongation[2](4,8) = -5.0/128.0;
-  prolongation[2](4,14) = 3.0/128.0;
-  prolongation[2](4,21) = 15.0/32.0;
-  prolongation[2](4,23) = -5.0/32.0;
-  prolongation[2](4,24) = 45.0/64.0;
-  prolongation[2](5,21) = 1.0;
-  prolongation[2](6,8) = 35.0/128.0;
-  prolongation[2](6,14) = -5.0/128.0;
-  prolongation[2](6,21) = 35.0/32.0;
-  prolongation[2](6,23) = 7.0/32.0;
-  prolongation[2](6,24) = -35.0/64.0;
-  prolongation[2](7,1) = 3.0/128.0;
-  prolongation[2](7,2) = -5.0/128.0;
-  prolongation[2](7,7) = -5.0/32.0;
-  prolongation[2](7,8) = 45.0/64.0;
-  prolongation[2](7,9) = 15.0/32.0;
-  prolongation[2](8,9) = 1.0;
-  prolongation[2](9,1) = -5.0/128.0;
-  prolongation[2](9,2) = 35.0/128.0;
-  prolongation[2](9,7) = 7.0/32.0;
-  prolongation[2](9,8) = -35.0/64.0;
-  prolongation[2](9,9) = 35.0/32.0;
-  prolongation[2](10,2) = -5.0/128.0;
-  prolongation[2](10,3) = 3.0/128.0;
-  prolongation[2](10,10) = -5.0/32.0;
-  prolongation[2](10,11) = 45.0/64.0;
-  prolongation[2](10,12) = 15.0/32.0;
-  prolongation[2](11,12) = 1.0;
-  prolongation[2](12,2) = 35.0/128.0;
-  prolongation[2](12,3) = -5.0/128.0;
-  prolongation[2](12,10) = 7.0/32.0;
-  prolongation[2](12,11) = -35.0/64.0;
-  prolongation[2](12,12) = 35.0/32.0;
-  prolongation[2](13,5) = 3.0/128.0;
-  prolongation[2](13,11) = -5.0/128.0;
-  prolongation[2](13,20) = -5.0/32.0;
-  prolongation[2](13,22) = 15.0/32.0;
-  prolongation[2](13,24) = 45.0/64.0;
-  prolongation[2](14,22) = 1.0;
-  prolongation[2](15,5) = -5.0/128.0;
-  prolongation[2](15,11) = 35.0/128.0;
-  prolongation[2](15,20) = 7.0/32.0;
-  prolongation[2](15,22) = 35.0/32.0;
-  prolongation[2](15,24) = -35.0/64.0;
-  prolongation[2](16,0) = 9.0/16384.0;
-  prolongation[2](16,1) = -15.0/16384.0;
-  prolongation[2](16,2) = 25.0/16384.0;
-  prolongation[2](16,3) = -15.0/16384.0;
-  prolongation[2](16,4) = -15.0/4096.0;
-  prolongation[2](16,5) = 135.0/8192.0;
-  prolongation[2](16,6) = 45.0/4096.0;
-  prolongation[2](16,7) = 25.0/4096.0;
-  prolongation[2](16,8) = -225.0/8192.0;
-  prolongation[2](16,9) = -75.0/4096.0;
-  prolongation[2](16,10) = 25.0/4096.0;
-  prolongation[2](16,11) = -225.0/8192.0;
-  prolongation[2](16,12) = -75.0/4096.0;
-  prolongation[2](16,13) = -15.0/4096.0;
-  prolongation[2](16,14) = 135.0/8192.0;
-  prolongation[2](16,15) = 45.0/4096.0;
-  prolongation[2](16,16) = 25.0/1024.0;
-  prolongation[2](16,17) = -75.0/1024.0;
-  prolongation[2](16,18) = 225.0/1024.0;
-  prolongation[2](16,19) = -75.0/1024.0;
-  prolongation[2](16,20) = -225.0/2048.0;
-  prolongation[2](16,21) = 675.0/2048.0;
-  prolongation[2](16,22) = 675.0/2048.0;
-  prolongation[2](16,23) = -225.0/2048.0;
-  prolongation[2](16,24) = 2025.0/4096.0;
-  prolongation[2](17,0) = -15.0/16384.0;
-  prolongation[2](17,1) = 105.0/16384.0;
-  prolongation[2](17,2) = -175.0/16384.0;
-  prolongation[2](17,3) = 25.0/16384.0;
-  prolongation[2](17,4) = 21.0/4096.0;
-  prolongation[2](17,5) = -105.0/8192.0;
-  prolongation[2](17,6) = 105.0/4096.0;
-  prolongation[2](17,7) = -175.0/4096.0;
-  prolongation[2](17,8) = 1575.0/8192.0;
-  prolongation[2](17,9) = 525.0/4096.0;
-  prolongation[2](17,10) = -35.0/4096.0;
-  prolongation[2](17,11) = 175.0/8192.0;
-  prolongation[2](17,12) = -175.0/4096.0;
-  prolongation[2](17,13) = 25.0/4096.0;
-  prolongation[2](17,14) = -225.0/8192.0;
-  prolongation[2](17,15) = -75.0/4096.0;
-  prolongation[2](17,16) = -35.0/1024.0;
-  prolongation[2](17,17) = -175.0/1024.0;
-  prolongation[2](17,18) = 525.0/1024.0;
-  prolongation[2](17,19) = 105.0/1024.0;
-  prolongation[2](17,20) = 175.0/2048.0;
-  prolongation[2](17,21) = 1575.0/2048.0;
-  prolongation[2](17,22) = -525.0/2048.0;
-  prolongation[2](17,23) = 315.0/2048.0;
-  prolongation[2](17,24) = -1575.0/4096.0;
-  prolongation[2](18,0) = 25.0/16384.0;
-  prolongation[2](18,1) = -175.0/16384.0;
-  prolongation[2](18,2) = 1225.0/16384.0;
-  prolongation[2](18,3) = -175.0/16384.0;
-  prolongation[2](18,4) = -35.0/4096.0;
-  prolongation[2](18,5) = 175.0/8192.0;
-  prolongation[2](18,6) = -175.0/4096.0;
-  prolongation[2](18,7) = 245.0/4096.0;
-  prolongation[2](18,8) = -1225.0/8192.0;
-  prolongation[2](18,9) = 1225.0/4096.0;
-  prolongation[2](18,10) = 245.0/4096.0;
-  prolongation[2](18,11) = -1225.0/8192.0;
-  prolongation[2](18,12) = 1225.0/4096.0;
-  prolongation[2](18,13) = -35.0/4096.0;
-  prolongation[2](18,14) = 175.0/8192.0;
-  prolongation[2](18,15) = -175.0/4096.0;
-  prolongation[2](18,16) = 49.0/1024.0;
-  prolongation[2](18,17) = 245.0/1024.0;
-  prolongation[2](18,18) = 1225.0/1024.0;
-  prolongation[2](18,19) = 245.0/1024.0;
-  prolongation[2](18,20) = -245.0/2048.0;
-  prolongation[2](18,21) = -1225.0/2048.0;
-  prolongation[2](18,22) = -1225.0/2048.0;
-  prolongation[2](18,23) = -245.0/2048.0;
-  prolongation[2](18,24) = 1225.0/4096.0;
-  prolongation[2](19,0) = -15.0/16384.0;
-  prolongation[2](19,1) = 25.0/16384.0;
-  prolongation[2](19,2) = -175.0/16384.0;
-  prolongation[2](19,3) = 105.0/16384.0;
-  prolongation[2](19,4) = 25.0/4096.0;
-  prolongation[2](19,5) = -225.0/8192.0;
-  prolongation[2](19,6) = -75.0/4096.0;
-  prolongation[2](19,7) = -35.0/4096.0;
-  prolongation[2](19,8) = 175.0/8192.0;
-  prolongation[2](19,9) = -175.0/4096.0;
-  prolongation[2](19,10) = -175.0/4096.0;
-  prolongation[2](19,11) = 1575.0/8192.0;
-  prolongation[2](19,12) = 525.0/4096.0;
-  prolongation[2](19,13) = 21.0/4096.0;
-  prolongation[2](19,14) = -105.0/8192.0;
-  prolongation[2](19,15) = 105.0/4096.0;
-  prolongation[2](19,16) = -35.0/1024.0;
-  prolongation[2](19,17) = 105.0/1024.0;
-  prolongation[2](19,18) = 525.0/1024.0;
-  prolongation[2](19,19) = -175.0/1024.0;
-  prolongation[2](19,20) = 315.0/2048.0;
-  prolongation[2](19,21) = -525.0/2048.0;
-  prolongation[2](19,22) = 1575.0/2048.0;
-  prolongation[2](19,23) = 175.0/2048.0;
-  prolongation[2](19,24) = -1575.0/4096.0;
-  prolongation[2](20,6) = 3.0/128.0;
-  prolongation[2](20,12) = -5.0/128.0;
-  prolongation[2](20,17) = -5.0/32.0;
-  prolongation[2](20,18) = 15.0/32.0;
-  prolongation[2](20,21) = 45.0/64.0;
-  prolongation[2](21,9) = 35.0/128.0;
-  prolongation[2](21,15) = -5.0/128.0;
-  prolongation[2](21,18) = 35.0/32.0;
-  prolongation[2](21,19) = 7.0/32.0;
-  prolongation[2](21,22) = -35.0/64.0;
-  prolongation[2](22,6) = -5.0/128.0;
-  prolongation[2](22,12) = 35.0/128.0;
-  prolongation[2](22,17) = 7.0/32.0;
-  prolongation[2](22,18) = 35.0/32.0;
-  prolongation[2](22,21) = -35.0/64.0;
-  prolongation[2](23,9) = -5.0/128.0;
-  prolongation[2](23,15) = 3.0/128.0;
-  prolongation[2](23,18) = 15.0/32.0;
-  prolongation[2](23,19) = -5.0/32.0;
-  prolongation[2](23,22) = 45.0/64.0;
-  prolongation[2](24,18) = 1.0;
-  prolongation[3](0,14) = 1.0;
-  prolongation[3](1,24) = 1.0;
-  prolongation[3](2,11) = 1.0;
-  prolongation[3](3,3) = 1.0;
-  prolongation[3](4,8) = -5.0/128.0;
-  prolongation[3](4,14) = 35.0/128.0;
-  prolongation[3](4,21) = 7.0/32.0;
-  prolongation[3](4,23) = 35.0/32.0;
-  prolongation[3](4,24) = -35.0/64.0;
-  prolongation[3](5,23) = 1.0;
-  prolongation[3](6,8) = 3.0/128.0;
-  prolongation[3](6,14) = -5.0/128.0;
-  prolongation[3](6,21) = -5.0/32.0;
-  prolongation[3](6,23) = 15.0/32.0;
-  prolongation[3](6,24) = 45.0/64.0;
-  prolongation[3](7,5) = 3.0/128.0;
-  prolongation[3](7,11) = -5.0/128.0;
-  prolongation[3](7,20) = -5.0/32.0;
-  prolongation[3](7,22) = 15.0/32.0;
-  prolongation[3](7,24) = 45.0/64.0;
-  prolongation[3](8,22) = 1.0;
-  prolongation[3](9,5) = -5.0/128.0;
-  prolongation[3](9,11) = 35.0/128.0;
-  prolongation[3](9,20) = 7.0/32.0;
-  prolongation[3](9,22) = 35.0/32.0;
-  prolongation[3](9,24) = -35.0/64.0;
-  prolongation[3](10,2) = -5.0/128.0;
-  prolongation[3](10,3) = 35.0/128.0;
-  prolongation[3](10,10) = 35.0/32.0;
-  prolongation[3](10,11) = -35.0/64.0;
-  prolongation[3](10,12) = 7.0/32.0;
-  prolongation[3](11,10) = 1.0;
-  prolongation[3](12,2) = 3.0/128.0;
-  prolongation[3](12,3) = -5.0/128.0;
-  prolongation[3](12,10) = 15.0/32.0;
-  prolongation[3](12,11) = 45.0/64.0;
-  prolongation[3](12,12) = -5.0/32.0;
-  prolongation[3](13,0) = 3.0/128.0;
-  prolongation[3](13,3) = -5.0/128.0;
-  prolongation[3](13,13) = -5.0/32.0;
-  prolongation[3](13,14) = 45.0/64.0;
-  prolongation[3](13,15) = 15.0/32.0;
-  prolongation[3](14,15) = 1.0;
-  prolongation[3](15,0) = -5.0/128.0;
-  prolongation[3](15,3) = 35.0/128.0;
-  prolongation[3](15,13) = 7.0/32.0;
-  prolongation[3](15,14) = -35.0/64.0;
-  prolongation[3](15,15) = 35.0/32.0;
-  prolongation[3](16,0) = 105.0/16384.0;
-  prolongation[3](16,1) = -15.0/16384.0;
-  prolongation[3](16,2) = 25.0/16384.0;
-  prolongation[3](16,3) = -175.0/16384.0;
-  prolongation[3](16,4) = 105.0/4096.0;
-  prolongation[3](16,5) = -105.0/8192.0;
-  prolongation[3](16,6) = 21.0/4096.0;
-  prolongation[3](16,7) = 25.0/4096.0;
-  prolongation[3](16,8) = -225.0/8192.0;
-  prolongation[3](16,9) = -75.0/4096.0;
-  prolongation[3](16,10) = -175.0/4096.0;
-  prolongation[3](16,11) = 175.0/8192.0;
-  prolongation[3](16,12) = -35.0/4096.0;
-  prolongation[3](16,13) = -175.0/4096.0;
-  prolongation[3](16,14) = 1575.0/8192.0;
-  prolongation[3](16,15) = 525.0/4096.0;
-  prolongation[3](16,16) = -175.0/1024.0;
-  prolongation[3](16,17) = -35.0/1024.0;
-  prolongation[3](16,18) = 105.0/1024.0;
-  prolongation[3](16,19) = 525.0/1024.0;
-  prolongation[3](16,20) = 175.0/2048.0;
-  prolongation[3](16,21) = 315.0/2048.0;
-  prolongation[3](16,22) = -525.0/2048.0;
-  prolongation[3](16,23) = 1575.0/2048.0;
-  prolongation[3](16,24) = -1575.0/4096.0;
-  prolongation[3](17,0) = -15.0/16384.0;
-  prolongation[3](17,1) = 9.0/16384.0;
-  prolongation[3](17,2) = -15.0/16384.0;
-  prolongation[3](17,3) = 25.0/16384.0;
-  prolongation[3](17,4) = 45.0/4096.0;
-  prolongation[3](17,5) = 135.0/8192.0;
-  prolongation[3](17,6) = -15.0/4096.0;
-  prolongation[3](17,7) = -15.0/4096.0;
-  prolongation[3](17,8) = 135.0/8192.0;
-  prolongation[3](17,9) = 45.0/4096.0;
-  prolongation[3](17,10) = -75.0/4096.0;
-  prolongation[3](17,11) = -225.0/8192.0;
-  prolongation[3](17,12) = 25.0/4096.0;
-  prolongation[3](17,13) = 25.0/4096.0;
-  prolongation[3](17,14) = -225.0/8192.0;
-  prolongation[3](17,15) = -75.0/4096.0;
-  prolongation[3](17,16) = -75.0/1024.0;
-  prolongation[3](17,17) = 25.0/1024.0;
-  prolongation[3](17,18) = -75.0/1024.0;
-  prolongation[3](17,19) = 225.0/1024.0;
-  prolongation[3](17,20) = -225.0/2048.0;
-  prolongation[3](17,21) = -225.0/2048.0;
-  prolongation[3](17,22) = 675.0/2048.0;
-  prolongation[3](17,23) = 675.0/2048.0;
-  prolongation[3](17,24) = 2025.0/4096.0;
-  prolongation[3](18,0) = 25.0/16384.0;
-  prolongation[3](18,1) = -15.0/16384.0;
-  prolongation[3](18,2) = 105.0/16384.0;
-  prolongation[3](18,3) = -175.0/16384.0;
-  prolongation[3](18,4) = -75.0/4096.0;
-  prolongation[3](18,5) = -225.0/8192.0;
-  prolongation[3](18,6) = 25.0/4096.0;
-  prolongation[3](18,7) = 21.0/4096.0;
-  prolongation[3](18,8) = -105.0/8192.0;
-  prolongation[3](18,9) = 105.0/4096.0;
-  prolongation[3](18,10) = 525.0/4096.0;
-  prolongation[3](18,11) = 1575.0/8192.0;
-  prolongation[3](18,12) = -175.0/4096.0;
-  prolongation[3](18,13) = -35.0/4096.0;
-  prolongation[3](18,14) = 175.0/8192.0;
-  prolongation[3](18,15) = -175.0/4096.0;
-  prolongation[3](18,16) = 105.0/1024.0;
-  prolongation[3](18,17) = -35.0/1024.0;
-  prolongation[3](18,18) = -175.0/1024.0;
-  prolongation[3](18,19) = 525.0/1024.0;
-  prolongation[3](18,20) = 315.0/2048.0;
-  prolongation[3](18,21) = 175.0/2048.0;
-  prolongation[3](18,22) = 1575.0/2048.0;
-  prolongation[3](18,23) = -525.0/2048.0;
-  prolongation[3](18,24) = -1575.0/4096.0;
-  prolongation[3](19,0) = -175.0/16384.0;
-  prolongation[3](19,1) = 25.0/16384.0;
-  prolongation[3](19,2) = -175.0/16384.0;
-  prolongation[3](19,3) = 1225.0/16384.0;
-  prolongation[3](19,4) = -175.0/4096.0;
-  prolongation[3](19,5) = 175.0/8192.0;
-  prolongation[3](19,6) = -35.0/4096.0;
-  prolongation[3](19,7) = -35.0/4096.0;
-  prolongation[3](19,8) = 175.0/8192.0;
-  prolongation[3](19,9) = -175.0/4096.0;
-  prolongation[3](19,10) = 1225.0/4096.0;
-  prolongation[3](19,11) = -1225.0/8192.0;
-  prolongation[3](19,12) = 245.0/4096.0;
-  prolongation[3](19,13) = 245.0/4096.0;
-  prolongation[3](19,14) = -1225.0/8192.0;
-  prolongation[3](19,15) = 1225.0/4096.0;
-  prolongation[3](19,16) = 245.0/1024.0;
-  prolongation[3](19,17) = 49.0/1024.0;
-  prolongation[3](19,18) = 245.0/1024.0;
-  prolongation[3](19,19) = 1225.0/1024.0;
-  prolongation[3](19,20) = -245.0/2048.0;
-  prolongation[3](19,21) = -245.0/2048.0;
-  prolongation[3](19,22) = -1225.0/2048.0;
-  prolongation[3](19,23) = -1225.0/2048.0;
-  prolongation[3](19,24) = 1225.0/4096.0;
-  prolongation[3](20,4) = 3.0/128.0;
-  prolongation[3](20,10) = -5.0/128.0;
-  prolongation[3](20,16) = -5.0/32.0;
-  prolongation[3](20,19) = 15.0/32.0;
-  prolongation[3](20,23) = 45.0/64.0;
-  prolongation[3](21,9) = 3.0/128.0;
-  prolongation[3](21,15) = -5.0/128.0;
-  prolongation[3](21,18) = -5.0/32.0;
-  prolongation[3](21,19) = 15.0/32.0;
-  prolongation[3](21,22) = 45.0/64.0;
-  prolongation[3](22,4) = -5.0/128.0;
-  prolongation[3](22,10) = 35.0/128.0;
-  prolongation[3](22,16) = 7.0/32.0;
-  prolongation[3](22,19) = 35.0/32.0;
-  prolongation[3](22,23) = -35.0/64.0;
-  prolongation[3](23,9) = -5.0/128.0;
-  prolongation[3](23,15) = 35.0/128.0;
-  prolongation[3](23,18) = 7.0/32.0;
-  prolongation[3](23,19) = 35.0/32.0;
-  prolongation[3](23,22) = -35.0/64.0;
-  prolongation[3](24,19) = 1.0;
-
-  restriction[0](0,0) = 1.0;
-  restriction[0](4,5) = 1.0;
-  restriction[0](5,1) = 1.0;
-  restriction[0](13,14) = 1.0;
-  restriction[0](14,3) = 1.0;
-  restriction[0](16,24) = 1.0;
-  restriction[0](20,8) = 1.0;
-  restriction[0](23,11) = 1.0;
-  restriction[0](24,2) = 1.0;
-  restriction[1](1,1) = 1.0;
-  restriction[1](5,0) = 1.0;
-  restriction[1](6,5) = 1.0;
-  restriction[1](7,8) = 1.0;
-  restriction[1](8,2) = 1.0;
-  restriction[1](17,24) = 1.0;
-  restriction[1](20,14) = 1.0;
-  restriction[1](21,11) = 1.0;
-  restriction[1](24,3) = 1.0;
-  restriction[2](2,2) = 1.0;
-  restriction[2](8,1) = 1.0;
-  restriction[2](9,8) = 1.0;
-  restriction[2](11,3) = 1.0;
-  restriction[2](12,11) = 1.0;
-  restriction[2](18,24) = 1.0;
-  restriction[2](21,5) = 1.0;
-  restriction[2](22,14) = 1.0;
-  restriction[2](24,0) = 1.0;
-  restriction[3](3,3) = 1.0;
-  restriction[3](10,11) = 1.0;
-  restriction[3](11,2) = 1.0;
-  restriction[3](14,0) = 1.0;
-  restriction[3](15,14) = 1.0;
-  restriction[3](19,24) = 1.0;
-  restriction[3](22,8) = 1.0;
-  restriction[3](23,5) = 1.0;
-  restriction[3](24,1) = 1.0;
-};
-
-
-template <>
-double
-FEQ4<2>::shape_value (const unsigned int i,
-                     const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0),
-              eta= p(1);
-  switch (i)
-    {
-      case 0: return 1.0-25.0/3.0*xi+70.0/3.0*xi*xi-80.0/3.0*xi*xi*xi+32.0/
-               3.0*xi*xi*xi*xi+(-25.0/3.0+625.0/9.0*xi-1750.0/9.0*xi*xi+2000.0/9.0*xi*xi*xi
-                                -800.0/9.0*xi*xi*xi*xi)*eta+(70.0/3.0-1750.0/9.0*xi+4900.0/9.0*xi*xi-5600.0/9.0
-                                                             *xi*xi*xi+2240.0/9.0*xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta
-               *eta;
-      case 1: return -xi+22.0/3.0*xi*xi-16.0*xi*xi*xi+32.0/3.0*xi*xi*xi*xi+(
-       25.0/3.0*xi-550.0/9.0*xi*xi+400.0/3.0*xi*xi*xi-800.0/9.0*xi*xi*xi*xi)*eta+(
-         -70.0/3.0*xi+1540.0/9.0*xi*xi-1120.0/3.0*xi*xi*xi+2240.0/9.0*xi*xi*xi*xi)*eta*
-               eta+(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*eta*eta+(-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*eta*eta;
-      case 2: return (xi-22.0/3.0*xi*xi+16.0*xi*xi*xi-32.0/3.0*xi*xi*xi*xi)*
-               eta+(-22.0/3.0*xi+484.0/9.0*xi*xi-352.0/3.0*xi*xi*xi+704.0/9.0*xi*xi*xi*xi)*eta
-               *eta+(16.0*xi-352.0/3.0*xi*xi+256.0*xi*xi*xi-512.0/3.0*xi*xi*xi*xi)*eta*eta*eta
-               +(-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*eta*eta;
-      case 3: return (-1.0+25.0/3.0*xi-70.0/3.0*xi*xi+80.0/3.0*xi*xi*xi-32.0/
-                     3.0*xi*xi*xi*xi)*eta+(22.0/3.0-550.0/9.0*xi+1540.0/9.0*xi*xi-1760.0/9.0*xi*xi*
-                                           xi+704.0/9.0*xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 4: return 16.0*xi-208.0/3.0*xi*xi+96.0*xi*xi*xi-128.0/3.0*xi*xi*xi
-               *xi+(-400.0/3.0*xi+5200.0/9.0*xi*xi-800.0*xi*xi*xi+3200.0/9.0*xi*xi*xi*xi)*eta+
-               (1120.0/3.0*xi-14560.0/9.0*xi*xi+2240.0*xi*xi*xi-8960.0/9.0*xi*xi*xi*xi)*eta*
-               eta+(-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*eta*eta+(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*eta*eta;
-      case 5: return -12.0*xi+76.0*xi*xi-128.0*xi*xi*xi+64.0*xi*xi*xi*xi+(
-       100.0*xi-1900.0/3.0*xi*xi+3200.0/3.0*xi*xi*xi-1600.0/3.0*xi*xi*xi*xi)*eta+(
-         -280.0*xi+5320.0/3.0*xi*xi-8960.0/3.0*xi*xi*xi+4480.0/3.0*xi*xi*xi*xi)*eta*eta+
-               (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*eta
-               *eta+(-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*eta*eta;
-      case 6: return 16.0/3.0*xi-112.0/3.0*xi*xi+224.0/3.0*xi*xi*xi-128.0/3.0
-               *xi*xi*xi*xi+(-400.0/9.0*xi+2800.0/9.0*xi*xi-5600.0/9.0*xi*xi*xi+3200.0/9.0*xi*
-                             xi*xi*xi)*eta+(1120.0/9.0*xi-7840.0/9.0*xi*xi+15680.0/9.0*xi*xi*xi-8960.0/9.0*
-                                            xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 7: return (-16.0*xi+352.0/3.0*xi*xi-256.0*xi*xi*xi+512.0/3.0*xi*xi
-                     *xi*xi)*eta+(208.0/3.0*xi-4576.0/9.0*xi*xi+3328.0/3.0*xi*xi*xi-6656.0/9.0*xi*xi
-                                  *xi*xi)*eta*eta+(-96.0*xi+704.0*xi*xi-1536.0*xi*xi*xi+1024.0*xi*xi*xi*xi)*eta*
-               eta*eta+(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*eta*eta;
-      case 8: return (12.0*xi-88.0*xi*xi+192.0*xi*xi*xi-128.0*xi*xi*xi*xi)*
-               eta+(-76.0*xi+1672.0/3.0*xi*xi-1216.0*xi*xi*xi+2432.0/3.0*xi*xi*xi*xi)*eta*eta+
-               (128.0*xi-2816.0/3.0*xi*xi+2048.0*xi*xi*xi-4096.0/3.0*xi*xi*xi*xi)*eta*eta*eta+
-               (-64.0*xi+1408.0/3.0*xi*xi-1024.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta*eta*eta*
-               eta;
-      case 9: return (-16.0/3.0*xi+352.0/9.0*xi*xi-256.0/3.0*xi*xi*xi+512.0/
-                     9.0*xi*xi*xi*xi)*eta+(112.0/3.0*xi-2464.0/9.0*xi*xi+1792.0/3.0*xi*xi*xi-3584.0/
-                                           9.0*xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 10: return (-16.0*xi+208.0/3.0*xi*xi-96.0*xi*xi*xi+128.0/3.0*xi*xi
-                      *xi*xi)*eta+(352.0/3.0*xi-4576.0/9.0*xi*xi+704.0*xi*xi*xi-2816.0/9.0*xi*xi*xi*
-                                   xi)*eta*eta+(-256.0*xi+3328.0/3.0*xi*xi-1536.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)
-                *eta*eta*eta+(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*eta*eta;
-      case 11: return (12.0*xi-76.0*xi*xi+128.0*xi*xi*xi-64.0*xi*xi*xi*xi)*
-                eta+(-88.0*xi+1672.0/3.0*xi*xi-2816.0/3.0*xi*xi*xi+1408.0/3.0*xi*xi*xi*xi)*eta*
-                eta+(192.0*xi-1216.0*xi*xi+2048.0*xi*xi*xi-1024.0*xi*xi*xi*xi)*eta*eta*eta+(
-                  -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*
-                eta*eta;
-      case 12: return (-16.0/3.0*xi+112.0/3.0*xi*xi-224.0/3.0*xi*xi*xi+128.0/
-                      3.0*xi*xi*xi*xi)*eta+(352.0/9.0*xi-2464.0/9.0*xi*xi+4928.0/9.0*xi*xi*xi-2816.0/
-                                            9.0*xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 13: return (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+(-208.0/3.0+5200.0/9.0*xi-14560.0/9.0*xi*xi+16640.0
-                                                   /9.0*xi*xi*xi-6656.0/9.0*xi*xi*xi*xi)*eta*eta+(96.0-800.0*xi+2240.0*xi*xi
-                                                                                                  -2560.0*xi*xi*xi+1024.0*xi*xi*xi*xi)*eta*eta*eta+(-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*eta*eta;
-      case 14: return (-12.0+100.0*xi-280.0*xi*xi+320.0*xi*xi*xi-128.0*xi*xi*
-                      xi*xi)*eta+(76.0-1900.0/3.0*xi+5320.0/3.0*xi*xi-6080.0/3.0*xi*xi*xi+2432.0/3.0*
-                                  xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 15: return (16.0/3.0-400.0/9.0*xi+1120.0/9.0*xi*xi-1280.0/9.0*xi*
-                      xi*xi+512.0/9.0*xi*xi*xi*xi)*eta+(-112.0/3.0+2800.0/9.0*xi-7840.0/9.0*xi*xi+
-                                                        8960.0/9.0*xi*xi*xi-3584.0/9.0*xi*xi*xi*xi)*eta*eta+(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*eta*eta+(
-                                                                                                               -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*eta*eta;
-      case 16: return (256.0*xi-3328.0/3.0*xi*xi+1536.0*xi*xi*xi-2048.0/3.0*
-                      xi*xi*xi*xi)*eta+(-3328.0/3.0*xi+43264.0/9.0*xi*xi-6656.0*xi*xi*xi+26624.0/9.0*
-                                        xi*xi*xi*xi)*eta*eta+(1536.0*xi-6656.0*xi*xi+9216.0*xi*xi*xi-4096.0*xi*xi*xi*xi
-                                        )*eta*eta*eta+(-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*eta*eta;
-      case 17: return (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+(-3328.0/9.0*xi+23296.0/9.0*xi*xi-46592.0/9.0*xi*
-                                                    xi*xi+26624.0/9.0*xi*xi*xi*xi)*eta*eta+(512.0*xi-3584.0*xi*xi+7168.0*xi*xi*xi
-                                                                                            -4096.0*xi*xi*xi*xi)*eta*eta*eta+(-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*eta*eta;
-      case 18: return (256.0/9.0*xi-1792.0/9.0*xi*xi+3584.0/9.0*xi*xi*xi
-                      -2048.0/9.0*xi*xi*xi*xi)*eta+(-1792.0/9.0*xi+12544.0/9.0*xi*xi-25088.0/9.0*xi*
-                                                    xi*xi+14336.0/9.0*xi*xi*xi*xi)*eta*eta+(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*eta*eta+(-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*eta*eta;
-      case 19: return (256.0/3.0*xi-3328.0/9.0*xi*xi+512.0*xi*xi*xi-2048.0/
-                      9.0*xi*xi*xi*xi)*eta+(-1792.0/3.0*xi+23296.0/9.0*xi*xi-3584.0*xi*xi*xi+14336.0/
-                                            9.0*xi*xi*xi*xi)*eta*eta+(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*eta*eta+(-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*eta*eta;
-      case 20: return (-192.0*xi+1216.0*xi*xi-2048.0*xi*xi*xi+1024.0*xi*xi*xi
-                      *xi)*eta+(832.0*xi-15808.0/3.0*xi*xi+26624.0/3.0*xi*xi*xi-13312.0/3.0*xi*xi*xi*
-                                xi)*eta*eta+(-1152.0*xi+7296.0*xi*xi-12288.0*xi*xi*xi+6144.0*xi*xi*xi*xi)*eta*
-                eta*eta+(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*eta*eta;
-      case 21: return (-64.0*xi+448.0*xi*xi-896.0*xi*xi*xi+512.0*xi*xi*xi*xi)
-                *eta+(1216.0/3.0*xi-8512.0/3.0*xi*xi+17024.0/3.0*xi*xi*xi-9728.0/3.0*xi*xi*xi*
-                      xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 22: return (-64.0*xi+1216.0/3.0*xi*xi-2048.0/3.0*xi*xi*xi+1024.0/
-                      3.0*xi*xi*xi*xi)*eta+(448.0*xi-8512.0/3.0*xi*xi+14336.0/3.0*xi*xi*xi-7168.0/3.0
-                                            *xi*xi*xi*xi)*eta*eta+(-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*eta*eta+(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*eta*eta;
-      case 23: return (-192.0*xi+832.0*xi*xi-1152.0*xi*xi*xi+512.0*xi*xi*xi*
-                      xi)*eta+(1216.0*xi-15808.0/3.0*xi*xi+7296.0*xi*xi*xi-9728.0/3.0*xi*xi*xi*xi)*
-                eta*eta+(-2048.0*xi+26624.0/3.0*xi*xi-12288.0*xi*xi*xi+16384.0/3.0*xi*xi*xi*xi)
-                *eta*eta*eta+(1024.0*xi-13312.0/3.0*xi*xi+6144.0*xi*xi*xi-8192.0/3.0*xi*xi*xi*
-                              xi)*eta*eta*eta*eta;
-      case 24: return (144.0*xi-912.0*xi*xi+1536.0*xi*xi*xi-768.0*xi*xi*xi*xi
-      )*eta+(-912.0*xi+5776.0*xi*xi-9728.0*xi*xi*xi+4864.0*xi*xi*xi*xi)*eta*eta+(
-       1536.0*xi-9728.0*xi*xi+16384.0*xi*xi*xi-8192.0*xi*xi*xi*xi)*eta*eta*eta+(-768.0
-                                                                                *xi+4864.0*xi*xi-8192.0*xi*xi*xi+4096.0*xi*xi*xi*xi)*eta*eta*eta*eta;
-    };
-  return 0;
-};
-
-
-template <>
-Tensor<1,2>
-FEQ4<2>::shape_grad (const unsigned int i,
-                    const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  const double xi = p(0),
-              eta= p(1);
-                                  // originally, the return type of the
-                                  // function was Point<dim>, so we
-                                  // still construct it as that. it should
-                                  // make no difference in practice,
-                                  // however
-  switch (i)
-    {
-      case 0: return Point<2>(-25.0/3.0+140.0/3.0*xi-80.0*xi*xi+128.0/3.0*xi*xi*xi+(625.0/9.0-3500.0/9.0*xi+2000.0/3.0*xi*xi-3200.0/9.0*xi*xi*xi)*eta+(-1750.0/9.0+9800.0/9.0*xi-5600.0/3.0*xi*xi+8960.0/9.0*xi*xi*xi)*eta*eta+(2000.0/9.0-11200.0/9.0*xi+6400.0/3.0*xi*xi-10240.0/9.0*xi*xi*xi)*eta*eta*eta+(-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*eta,
-                             -25.0/3.0+625.0/9.0*xi-1750.0/9.0*xi*xi+2000.0/9.0*xi*xi*xi-800.0/9.0*xi*xi*xi*xi+2.0*(70.0/3.0-1750.0/9.0*xi+4900.0/9.0*xi*xi-5600.0/9.0*xi*xi*xi+2240.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 1: return Point<2>(-1.0+44.0/3.0*xi-48.0*xi*xi+128.0/3.0*xi*xi*xi+(25.0/3.0-1100.0/9.0*xi+400.0*xi*xi-3200.0/9.0*xi*xi*xi)*eta+(-70.0/3.0+3080.0/9.0*xi-1120.0*xi*xi+8960.0/9.0*xi*xi*xi)*eta*eta+(80.0/3.0-3520.0/9.0*xi+1280.0*xi*xi-10240.0/9.0*xi*xi*xi)*eta*eta*eta+(-32.0/3.0+1408.0/9.0*xi-512.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                             25.0/3.0*xi-550.0/9.0*xi*xi+400.0/3.0*xi*xi*xi-800.0/9.0*xi*xi*xi*xi+2.0*(-70.0/3.0*xi+1540.0/9.0*xi*xi-1120.0/3.0*xi*xi*xi+2240.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 2: return Point<2>((1.0-44.0/3.0*xi+48.0*xi*xi-128.0/3.0*xi*xi*xi)*eta+(-22.0/3.0+968.0/9.0*xi-352.0*xi*xi+2816.0/9.0*xi*xi*xi)*eta*eta+(16.0-704.0/3.0*xi+768.0*xi*xi-2048.0/3.0*xi*xi*xi)*eta*eta*eta+(-32.0/3.0+1408.0/9.0*xi-512.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                             xi-22.0/3.0*xi*xi+16.0*xi*xi*xi-32.0/3.0*xi*xi*xi*xi+2.0*(-22.0/3.0*xi+484.0/9.0*xi*xi-352.0/3.0*xi*xi*xi+704.0/9.0*xi*xi*xi*xi)*eta+3.0*(16.0*xi-352.0/3.0*xi*xi+256.0*xi*xi*xi-512.0/3.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 3: return Point<2>((25.0/3.0-140.0/3.0*xi+80.0*xi*xi-128.0/3.0*xi*xi*xi)*eta+(-550.0/9.0+3080.0/9.0*xi-1760.0/3.0*xi*xi+2816.0/9.0*xi*xi*xi)*eta*eta+(400.0/3.0-2240.0/3.0*xi+1280.0*xi*xi-2048.0/3.0*xi*xi*xi)*eta*eta*eta+(-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*eta,
-                             -1.0+25.0/3.0*xi-70.0/3.0*xi*xi+80.0/3.0*xi*xi*xi-32.0/3.0*xi*xi*xi*xi+2.0*(22.0/3.0-550.0/9.0*xi+1540.0/9.0*xi*xi-1760.0/9.0*xi*xi*xi+704.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 4: return Point<2>(16.0-416.0/3.0*xi+288.0*xi*xi-512.0/3.0*xi*xi*xi+(-400.0/3.0+10400.0/9.0*xi-2400.0*xi*xi+12800.0/9.0*xi*xi*xi)*eta+(1120.0/3.0-29120.0/9.0*xi+6720.0*xi*xi-35840.0/9.0*xi*xi*xi)*eta*eta+(-1280.0/3.0+33280.0/9.0*xi-7680.0*xi*xi+40960.0/9.0*xi*xi*xi)*eta*eta*eta+(512.0/3.0-13312.0/9.0*xi+3072.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                             -400.0/3.0*xi+5200.0/9.0*xi*xi-800.0*xi*xi*xi+3200.0/9.0*xi*xi*xi*xi+2.0*(1120.0/3.0*xi-14560.0/9.0*xi*xi+2240.0*xi*xi*xi-8960.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 5: return Point<2>(-12.0+152.0*xi-384.0*xi*xi+256.0*xi*xi*xi+(100.0-3800.0/3.0*xi+3200.0*xi*xi-6400.0/3.0*xi*xi*xi)*eta+(-280.0+10640.0/3.0*xi-8960.0*xi*xi+17920.0/3.0*xi*xi*xi)*eta*eta+(320.0-12160.0/3.0*xi+10240.0*xi*xi-20480.0/3.0*xi*xi*xi)*eta*eta*eta+(-128.0+4864.0/3.0*xi-4096.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                             100.0*xi-1900.0/3.0*xi*xi+3200.0/3.0*xi*xi*xi-1600.0/3.0*xi*xi*xi*xi+2.0*(-280.0*xi+5320.0/3.0*xi*xi-8960.0/3.0*xi*xi*xi+4480.0/3.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 6: return Point<2>(16.0/3.0-224.0/3.0*xi+224.0*xi*xi-512.0/3.0*xi*xi*xi+(-400.0/9.0+5600.0/9.0*xi-5600.0/3.0*xi*xi+12800.0/9.0*xi*xi*xi)*eta+(1120.0/9.0-15680.0/9.0*xi+15680.0/3.0*xi*xi-35840.0/9.0*xi*xi*xi)*eta*eta+(-1280.0/9.0+17920.0/9.0*xi-17920.0/3.0*xi*xi+40960.0/9.0*xi*xi*xi)*eta*eta*eta+(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*eta,
-                             -400.0/9.0*xi+2800.0/9.0*xi*xi-5600.0/9.0*xi*xi*xi+3200.0/9.0*xi*xi*xi*xi+2.0*(1120.0/9.0*xi-7840.0/9.0*xi*xi+15680.0/9.0*xi*xi*xi-8960.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 7: return Point<2>((-16.0+704.0/3.0*xi-768.0*xi*xi+2048.0/3.0*xi*xi*xi)*eta+(208.0/3.0-9152.0/9.0*xi+3328.0*xi*xi-26624.0/9.0*xi*xi*xi)*eta*eta+(-96.0+1408.0*xi-4608.0*xi*xi+4096.0*xi*xi*xi)*eta*eta*eta+(128.0/3.0-5632.0/9.0*xi+2048.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                             -16.0*xi+352.0/3.0*xi*xi-256.0*xi*xi*xi+512.0/3.0*xi*xi*xi*xi+2.0*(208.0/3.0*xi-4576.0/9.0*xi*xi+3328.0/3.0*xi*xi*xi-6656.0/9.0*xi*xi*xi*xi)*eta+3.0*(-96.0*xi+704.0*xi*xi-1536.0*xi*xi*xi+1024.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 8: return Point<2>((12.0-176.0*xi+576.0*xi*xi-512.0*xi*xi*xi)*eta+(-76.0+3344.0/3.0*xi-3648.0*xi*xi+9728.0/3.0*xi*xi*xi)*eta*eta+(128.0-5632.0/3.0*xi+6144.0*xi*xi-16384.0/3.0*xi*xi*xi)*eta*eta*eta+(-64.0+2816.0/3.0*xi-3072.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                             12.0*xi-88.0*xi*xi+192.0*xi*xi*xi-128.0*xi*xi*xi*xi+2.0*(-76.0*xi+1672.0/3.0*xi*xi-1216.0*xi*xi*xi+2432.0/3.0*xi*xi*xi*xi)*eta+3.0*(128.0*xi-2816.0/3.0*xi*xi+2048.0*xi*xi*xi-4096.0/3.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 9: return Point<2>((-16.0/3.0+704.0/9.0*xi-256.0*xi*xi+2048.0/9.0*xi*xi*xi)*eta+(112.0/3.0-4928.0/9.0*xi+1792.0*xi*xi-14336.0/9.0*xi*xi*xi)*eta*eta+(-224.0/3.0+9856.0/9.0*xi-3584.0*xi*xi+28672.0/9.0*xi*xi*xi)*eta*eta*eta+(128.0/3.0-5632.0/9.0*xi+2048.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                             -16.0/3.0*xi+352.0/9.0*xi*xi-256.0/3.0*xi*xi*xi+512.0/9.0*xi*xi*xi*xi+2.0*(112.0/3.0*xi-2464.0/9.0*xi*xi+1792.0/3.0*xi*xi*xi-3584.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 10: return Point<2>((-16.0+416.0/3.0*xi-288.0*xi*xi+512.0/3.0*xi*xi*xi)*eta+(352.0/3.0-9152.0/9.0*xi+2112.0*xi*xi-11264.0/9.0*xi*xi*xi)*eta*eta+(-256.0+6656.0/3.0*xi-4608.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta+(512.0/3.0-13312.0/9.0*xi+3072.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                              -16.0*xi+208.0/3.0*xi*xi-96.0*xi*xi*xi+128.0/3.0*xi*xi*xi*xi+2.0*(352.0/3.0*xi-4576.0/9.0*xi*xi+704.0*xi*xi*xi-2816.0/9.0*xi*xi*xi*xi)*eta+3.0*(-256.0*xi+3328.0/3.0*xi*xi-1536.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 11: return Point<2>((12.0-152.0*xi+384.0*xi*xi-256.0*xi*xi*xi)*eta+(-88.0+3344.0/3.0*xi-2816.0*xi*xi+5632.0/3.0*xi*xi*xi)*eta*eta+(192.0-2432.0*xi+6144.0*xi*xi-4096.0*xi*xi*xi)*eta*eta*eta+(-128.0+4864.0/3.0*xi-4096.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                              12.0*xi-76.0*xi*xi+128.0*xi*xi*xi-64.0*xi*xi*xi*xi+2.0*(-88.0*xi+1672.0/3.0*xi*xi-2816.0/3.0*xi*xi*xi+1408.0/3.0*xi*xi*xi*xi)*eta+3.0*(192.0*xi-1216.0*xi*xi+2048.0*xi*xi*xi-1024.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 12: return Point<2>((-16.0/3.0+224.0/3.0*xi-224.0*xi*xi+512.0/3.0*xi*xi*xi)*eta+(352.0/9.0-4928.0/9.0*xi+4928.0/3.0*xi*xi-11264.0/9.0*xi*xi*xi)*eta*eta+(-256.0/3.0+3584.0/3.0*xi-3584.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta+(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*eta,
-                              -16.0/3.0*xi+112.0/3.0*xi*xi-224.0/3.0*xi*xi*xi+128.0/3.0*xi*xi*xi*xi+2.0*(352.0/9.0*xi-2464.0/9.0*xi*xi+4928.0/9.0*xi*xi*xi-2816.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 13: return Point<2>((-400.0/3.0+2240.0/3.0*xi-1280.0*xi*xi+2048.0/3.0*xi*xi*xi)*eta+(5200.0/9.0-29120.0/9.0*xi+16640.0/3.0*xi*xi-26624.0/9.0*xi*xi*xi)*eta*eta+(-800.0+4480.0*xi-7680.0*xi*xi+4096.0*xi*xi*xi)*eta*eta*eta+(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*eta,
-                              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+2.0*(-208.0/3.0+5200.0/9.0*xi-14560.0/9.0*xi*xi+16640.0/9.0*xi*xi*xi-6656.0/9.0*xi*xi*xi*xi)*eta+3.0*(96.0-800.0*xi+2240.0*xi*xi-2560.0*xi*xi*xi+1024.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 14: return Point<2>((100.0-560.0*xi+960.0*xi*xi-512.0*xi*xi*xi)*eta+(-1900.0/3.0+10640.0/3.0*xi-6080.0*xi*xi+9728.0/3.0*xi*xi*xi)*eta*eta+(3200.0/3.0-17920.0/3.0*xi+10240.0*xi*xi-16384.0/3.0*xi*xi*xi)*eta*eta*eta+(-1600.0/3.0+8960.0/3.0*xi-5120.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                              -12.0+100.0*xi-280.0*xi*xi+320.0*xi*xi*xi-128.0*xi*xi*xi*xi+2.0*(76.0-1900.0/3.0*xi+5320.0/3.0*xi*xi-6080.0/3.0*xi*xi*xi+2432.0/3.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 15: return Point<2>((-400.0/9.0+2240.0/9.0*xi-1280.0/3.0*xi*xi+2048.0/9.0*xi*xi*xi)*eta+(2800.0/9.0-15680.0/9.0*xi+8960.0/3.0*xi*xi-14336.0/9.0*xi*xi*xi)*eta*eta+(-5600.0/9.0+31360.0/9.0*xi-17920.0/3.0*xi*xi+28672.0/9.0*xi*xi*xi)*eta*eta*eta+(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*eta,
-                              16.0/3.0-400.0/9.0*xi+1120.0/9.0*xi*xi-1280.0/9.0*xi*xi*xi+512.0/9.0*xi*xi*xi*xi+2.0*(-112.0/3.0+2800.0/9.0*xi-7840.0/9.0*xi*xi+8960.0/9.0*xi*xi*xi-3584.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 16: return Point<2>((256.0-6656.0/3.0*xi+4608.0*xi*xi-8192.0/3.0*xi*xi*xi)*eta+(-3328.0/3.0+86528.0/9.0*xi-19968.0*xi*xi+106496.0/9.0*xi*xi*xi)*eta*eta+(1536.0-13312.0*xi+27648.0*xi*xi-16384.0*xi*xi*xi)*eta*eta*eta+(-2048.0/3.0+53248.0/9.0*xi-12288.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                              256.0*xi-3328.0/3.0*xi*xi+1536.0*xi*xi*xi-2048.0/3.0*xi*xi*xi*xi+2.0*(-3328.0/3.0*xi+43264.0/9.0*xi*xi-6656.0*xi*xi*xi+26624.0/9.0*xi*xi*xi*xi)*eta+3.0*(1536.0*xi-6656.0*xi*xi+9216.0*xi*xi*xi-4096.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 17: return Point<2>((256.0/3.0-3584.0/3.0*xi+3584.0*xi*xi-8192.0/3.0*xi*xi*xi)*eta+(-3328.0/9.0+46592.0/9.0*xi-46592.0/3.0*xi*xi+106496.0/9.0*xi*xi*xi)*eta*eta+(512.0-7168.0*xi+21504.0*xi*xi-16384.0*xi*xi*xi)*eta*eta*eta+(-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*eta,
-                              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+2.0*(-3328.0/9.0*xi+23296.0/9.0*xi*xi-46592.0/9.0*xi*xi*xi+26624.0/9.0*xi*xi*xi*xi)*eta+3.0*(512.0*xi-3584.0*xi*xi+7168.0*xi*xi*xi-4096.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 18: return Point<2>((256.0/9.0-3584.0/9.0*xi+3584.0/3.0*xi*xi-8192.0/9.0*xi*xi*xi)*eta+(-1792.0/9.0+25088.0/9.0*xi-25088.0/3.0*xi*xi+57344.0/9.0*xi*xi*xi)*eta*eta+(3584.0/9.0-50176.0/9.0*xi+50176.0/3.0*xi*xi-114688.0/9.0*xi*xi*xi)*eta*eta*eta+(-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*eta,
-                              256.0/9.0*xi-1792.0/9.0*xi*xi+3584.0/9.0*xi*xi*xi-2048.0/9.0*xi*xi*xi*xi+2.0*(-1792.0/9.0*xi+12544.0/9.0*xi*xi-25088.0/9.0*xi*xi*xi+14336.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 19: return Point<2>((256.0/3.0-6656.0/9.0*xi+1536.0*xi*xi-8192.0/9.0*xi*xi*xi)*eta+(-1792.0/3.0+46592.0/9.0*xi-10752.0*xi*xi+57344.0/9.0*xi*xi*xi)*eta*eta+(3584.0/3.0-93184.0/9.0*xi+21504.0*xi*xi-114688.0/9.0*xi*xi*xi)*eta*eta*eta+(-2048.0/3.0+53248.0/9.0*xi-12288.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta*eta,
-                              256.0/3.0*xi-3328.0/9.0*xi*xi+512.0*xi*xi*xi-2048.0/9.0*xi*xi*xi*xi+2.0*(-1792.0/3.0*xi+23296.0/9.0*xi*xi-3584.0*xi*xi*xi+14336.0/9.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 20: return Point<2>((-192.0+2432.0*xi-6144.0*xi*xi+4096.0*xi*xi*xi)*eta+(832.0-31616.0/3.0*xi+26624.0*xi*xi-53248.0/3.0*xi*xi*xi)*eta*eta+(-1152.0+14592.0*xi-36864.0*xi*xi+24576.0*xi*xi*xi)*eta*eta*eta+(512.0-19456.0/3.0*xi+16384.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                              -192.0*xi+1216.0*xi*xi-2048.0*xi*xi*xi+1024.0*xi*xi*xi*xi+2.0*(832.0*xi-15808.0/3.0*xi*xi+26624.0/3.0*xi*xi*xi-13312.0/3.0*xi*xi*xi*xi)*eta+3.0*(-1152.0*xi+7296.0*xi*xi-12288.0*xi*xi*xi+6144.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 21: return Point<2>((-64.0+896.0*xi-2688.0*xi*xi+2048.0*xi*xi*xi)*eta+(1216.0/3.0-17024.0/3.0*xi+17024.0*xi*xi-38912.0/3.0*xi*xi*xi)*eta*eta+(-2048.0/3.0+28672.0/3.0*xi-28672.0*xi*xi+65536.0/3.0*xi*xi*xi)*eta*eta*eta+(1024.0/3.0-14336.0/3.0*xi+14336.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                              -64.0*xi+448.0*xi*xi-896.0*xi*xi*xi+512.0*xi*xi*xi*xi+2.0*(1216.0/3.0*xi-8512.0/3.0*xi*xi+17024.0/3.0*xi*xi*xi-9728.0/3.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 22: return Point<2>((-64.0+2432.0/3.0*xi-2048.0*xi*xi+4096.0/3.0*xi*xi*xi)*eta+(448.0-17024.0/3.0*xi+14336.0*xi*xi-28672.0/3.0*xi*xi*xi)*eta*eta+(-896.0+34048.0/3.0*xi-28672.0*xi*xi+57344.0/3.0*xi*xi*xi)*eta*eta*eta+(512.0-19456.0/3.0*xi+16384.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                              -64.0*xi+1216.0/3.0*xi*xi-2048.0/3.0*xi*xi*xi+1024.0/3.0*xi*xi*xi*xi+2.0*(448.0*xi-8512.0/3.0*xi*xi+14336.0/3.0*xi*xi*xi-7168.0/3.0*xi*xi*xi*xi)*eta+3.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*eta+4.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*eta);
-      case 23: return Point<2>((-192.0+1664.0*xi-3456.0*xi*xi+2048.0*xi*xi*xi)*eta+(1216.0-31616.0/3.0*xi+21888.0*xi*xi-38912.0/3.0*xi*xi*xi)*eta*eta+(-2048.0+53248.0/3.0*xi-36864.0*xi*xi+65536.0/3.0*xi*xi*xi)*eta*eta*eta+(1024.0-26624.0/3.0*xi+18432.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta*eta,
-                              -192.0*xi+832.0*xi*xi-1152.0*xi*xi*xi+512.0*xi*xi*xi*xi+2.0*(1216.0*xi-15808.0/3.0*xi*xi+7296.0*xi*xi*xi-9728.0/3.0*xi*xi*xi*xi)*eta+3.0*(-2048.0*xi+26624.0/3.0*xi*xi-12288.0*xi*xi*xi+16384.0/3.0*xi*xi*xi*xi)*eta*eta+4.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*eta);
-      case 24: return Point<2>((144.0-1824.0*xi+4608.0*xi*xi-3072.0*xi*xi*xi)*eta+(-912.0+11552.0*xi-29184.0*xi*xi+19456.0*xi*xi*xi)*eta*eta+(1536.0-19456.0*xi+49152.0*xi*xi-32768.0*xi*xi*xi)*eta*eta*eta+(-768.0+9728.0*xi-24576.0*xi*xi+16384.0*xi*xi*xi)*eta*eta*eta*eta,
-                              144.0*xi-912.0*xi*xi+1536.0*xi*xi*xi-768.0*xi*xi*xi*xi+2.0*(-912.0*xi+5776.0*xi*xi-9728.0*xi*xi*xi+4864.0*xi*xi*xi*xi)*eta+3.0*(1536.0*xi-9728.0*xi*xi+16384.0*xi*xi*xi-8192.0*xi*xi*xi*xi)*eta*eta+4.0*(-768.0*xi+4864.0*xi*xi-8192.0*xi*xi*xi+4096.0*xi*xi*xi*xi)*eta*eta*eta);
-    };
-  return Point<2> ();
-};
-
-
-template <>
-Tensor<2,2>
-FEQ4<2>::shape_grad_grad (const unsigned int i,
-                         const Point<2>    &p) const
-{
-  Assert (i<dofs_per_cell, ExcIndexRange(i, 0, dofs_per_cell));
-
-  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 FEQ4<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
-                                    FullMatrix<double> &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.n(),
-                                                      dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension(local_mass_matrix.m(),
-                                                      dofs_per_cell));
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-  
-/* check that the Jacobi determinant
-
-   t0 = (-x[0]*(1.0-eta)+x[1]*(1.0-eta)+x[2]*eta-x[3]*eta) *
-   (-y[0]*(1.0-xi)-y[1]*xi+y[2]*xi+y[3]*(1.0-xi))        -
-   (-x[0]*(1.0-xi)-x[1]*xi+x[2]*xi+x[3]*(1.0-xi)) *
-   (-y[0]*(1.0-eta)+y[1]*(1.0-eta)+y[2]*eta-y[3]*eta)
-
-   has the right sign.  
-        
-   We do not attempt to check its (hopefully) positive sign at all points
-   on the unit cell, but we check that it is positive in the four corners,
-   which is sufficient since $det J$ is a bilinear function.
-*/
-  Assert ((-x[0]+x[1])*(-y[0]+y[3])-(-x[0]+x[3])*(-y[0]+y[1]),  // xi=eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[0]+y[3])-(-x[0]+x[3])*(y[2]-y[3]),    // xi=0, eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((x[2]-x[3])*(-y[1]+y[2])-(-x[1]+x[2])*(y[2]-y[3]),    // xi=eta=1
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-  Assert ((-x[0]+x[1])*(-y[1]+y[2])-(-x[1]+x[2])*(-y[0]+y[1]),  // xi=1, eta=0
-         FiniteElement<2>::ExcJacobiDeterminantHasWrongSign());
-
-  const double t1 = -x[0]+x[1];
-  const double t2 = y[0]-y[1]+y[2]-y[3];
-  const double t3 = t1*t2;
-  const double t4 = 2117.0/16074450.0*t3;
-  const double t5 = x[0]-x[1]+x[2]-x[3];
-  const double t6 = -y[0]+y[1];
-  const double t7 = t5*t6;
-  const double t8 = 2117.0/16074450.0*t7;
-  const double t9 = -y[0]+y[3];
-  const double t10 = t1*t9;
-  const double t11 = 21316.0/8037225.0*t10;
-  const double t12 = t5*t9;
-  const double t13 = 2117.0/16074450.0*t12;
-  const double t14 = -x[0]+x[3];
-  const double t15 = t14*t6;
-  const double t16 = 21316.0/8037225.0*t15;
-  const double t17 = t14*t2;
-  const double t18 = 2117.0/16074450.0*t17;
-  const double t20 = 2117.0/8037225.0*t10;
-  const double t21 = 841.0/64297800.0*t12;
-  const double t22 = 2117.0/8037225.0*t15;
-  const double t23 = 841.0/64297800.0*t17;
-  const double t24 = -t4+t8-t20-t21+t22+t23;
-  const double t25 = 841.0/64297800.0*t3;
-  const double t26 = 841.0/64297800.0*t7;
-  const double t29 = t25-t26+841.0/32148900.0*t10+t21-841.0/32148900.0*t15-t23;
-  const double t30 = -t25+t26-t20-t13+t22+t18;
-  const double t31 = 1168.0/8037225.0*t3;
-  const double t32 = 1168.0/8037225.0*t7;
-  const double t33 = 21608.0/8037225.0*t10;
-  const double t34 = 1073.0/8037225.0*t12;
-  const double t35 = 21608.0/8037225.0*t15;
-  const double t36 = 1073.0/8037225.0*t17;
-  const double t37 = t31-t32+t33+t34-t35-t36;
-  const double t38 = 4234.0/2679075.0*t10;
-  const double t39 = 841.0/10716300.0*t12;
-  const double t40 = 4234.0/2679075.0*t15;
-  const double t41 = 841.0/10716300.0*t17;
-  const double t42 = -t38-t39+t40+t41;
-  const double t43 = 584.0/1148175.0*t10;
-  const double t44 = 29.0/1148175.0*t12;
-  const double t45 = 584.0/1148175.0*t15;
-  const double t46 = 29.0/1148175.0*t17;
-  const double t47 = -t31+t32+t43+t44-t45-t46;
-  const double t48 = 1073.0/8037225.0*t3;
-  const double t49 = 1073.0/8037225.0*t7;
-  const double t50 = 2146.0/8037225.0*t10;
-  const double t51 = 116.0/8037225.0*t12;
-  const double t52 = 2146.0/8037225.0*t15;
-  const double t53 = 116.0/8037225.0*t17;
-  const double t54 = -t48+t49-t50-t51+t52+t53;
-  const double t55 = 841.0/10716300.0*t3;
-  const double t56 = 841.0/10716300.0*t7;
-  const double t57 = 841.0/5358150.0*t10;
-  const double t58 = 841.0/5358150.0*t15;
-  const double t59 = t55-t56+t57-t58;
-  const double t60 = 29.0/1148175.0*t3;
-  const double t61 = 29.0/1148175.0*t7;
-  const double t62 = 58.0/1148175.0*t10;
-  const double t63 = 58.0/1148175.0*t15;
-  const double t64 = -t60+t61-t62+t51+t63-t53;
-  const double t65 = 116.0/8037225.0*t3;
-  const double t66 = 116.0/8037225.0*t7;
-  const double t67 = -t65+t66-t50-t34+t52+t36;
-  const double t68 = t57+t39-t58-t41;
-  const double t69 = t65-t66-t62-t44+t63+t46;
-  const double t70 = 1168.0/8037225.0*t12;
-  const double t71 = 1168.0/8037225.0*t17;
-  const double t72 = t48-t49+t33+t70-t35-t71;
-  const double t73 = -t55+t56-t38+t40;
-  const double t74 = t60-t61+t43-t70-t45+t71;
-  const double t75 = 1184.0/8037225.0*t3;
-  const double t76 = 1184.0/8037225.0*t7;
-  const double t77 = 21904.0/8037225.0*t10;
-  const double t78 = 1184.0/8037225.0*t12;
-  const double t79 = 21904.0/8037225.0*t15;
-  const double t80 = 1184.0/8037225.0*t17;
-  const double t81 = t75-t76+t77+t78-t79-t80;
-  const double t82 = 592.0/1148175.0*t10;
-  const double t83 = 32.0/1148175.0*t12;
-  const double t84 = 592.0/1148175.0*t15;
-  const double t85 = 32.0/1148175.0*t17;
-  const double t86 = -t75+t76+t82+t83-t84-t85;
-  const double t87 = 32.0/1148175.0*t3;
-  const double t88 = 32.0/1148175.0*t7;
-  const double t89 = 16.0/164025.0*t10;
-  const double t90 = 16.0/164025.0*t15;
-  const double t91 = -t87+t88+t89-t83-t90+t85;
-  const double t92 = t87-t88+t82-t78-t84+t80;
-  const double t93 = 4292.0/2679075.0*t10;
-  const double t94 = 232.0/2679075.0*t12;
-  const double t95 = 4292.0/2679075.0*t15;
-  const double t96 = 232.0/2679075.0*t17;
-  const double t97 = -t93-t94+t95+t96;
-  const double t98 = 232.0/2679075.0*t3;
-  const double t99 = 232.0/2679075.0*t7;
-  const double t100 = 116.0/382725.0*t10;
-  const double t101 = 116.0/382725.0*t15;
-  const double t102 = t98-t99-t100+t101;
-  const double t103 = -t100+t94+t101-t96;
-  const double t104 = -t98+t99-t93+t95;
-  const double t105 = t10-t15;
-  const double t106 = 2701.0/1071630.0*t3;
-  const double t107 = 2701.0/1071630.0*t7;
-  const double t111 = -1073.0/4286520.0*t3+1073.0/4286520.0*t7-t20-t13+t22+t18;
-  const double t112 = 584.0/893025.0*t3;
-  const double t113 = 584.0/893025.0*t7;
-  const double t114 = t112-t113+t43+t44-t45-t46;
-  const double t115 = 4234.0/2679075.0*t3;
-  const double t116 = 4234.0/2679075.0*t7;
-  const double t117 = -t115+t116-t38-t39+t40+t41;
-  const double t118 = 584.0/229635.0*t3;
-  const double t119 = 584.0/229635.0*t7;
-  const double t120 = t118-t119+t33+t34-t35-t36;
-  const double t121 = 1369.0/535815.0*t3;
-  const double t122 = 1369.0/535815.0*t7;
-  const double t123 = t121-t122+t33+t70-t35-t71;
-  const double t124 = 1073.0/714420.0*t3;
-  const double t125 = 1073.0/714420.0*t7;
-  const double t126 = -t124+t125-t38+t40;
-  const double t127 = 37.0/76545.0*t3;
-  const double t128 = 37.0/76545.0*t7;
-  const double t129 = t127-t128+t43-t70-t45+t71;
-  const double t132 = -58.0/893025.0*t3+58.0/893025.0*t7-t62-t44+t63+t46;
-  const double t135 = 841.0/5358150.0*t3-841.0/5358150.0*t7+t57+t39-t58-t41;
-  const double t138 = -58.0/229635.0*t3+58.0/229635.0*t7-t50-t34+t52+t36;
-  const double t139 = 592.0/893025.0*t3;
-  const double t140 = 592.0/893025.0*t7;
-  const double t141 = t139-t140+t82+t83-t84-t85;
-  const double t142 = 592.0/229635.0*t3;
-  const double t143 = 592.0/229635.0*t7;
-  const double t144 = t142-t143+t77+t78-t79-t80;
-  const double t145 = 16.0/32805.0*t3;
-  const double t146 = 16.0/32805.0*t7;
-  const double t147 = t145-t146+t82-t78-t84+t80;
-  const double t148 = 16.0/127575.0*t3;
-  const double t149 = 16.0/127575.0*t7;
-  const double t150 = t148-t149+t89-t83-t90+t85;
-  const double t151 = 4292.0/2679075.0*t3;
-  const double t152 = 4292.0/2679075.0*t7;
-  const double t153 = -t151+t152-t93-t94+t95+t96;
-  const double t154 = 116.0/76545.0*t3;
-  const double t155 = 116.0/76545.0*t7;
-  const double t156 = -t154+t155-t93+t95;
-  const double t157 = 116.0/382725.0*t3;
-  const double t158 = 116.0/382725.0*t7;
-  const double t159 = -t157+t158-t100+t94+t101-t96;
-  const double t160 = 116.0/297675.0*t3;
-  const double t161 = 116.0/297675.0*t7;
-  const double t162 = -t160+t161-t100+t101;
-  const double t163 = t3-t7+t10-t15;
-  const double t164 = 2701.0/1071630.0*t12;
-  const double t165 = 2701.0/1071630.0*t17;
-  const double t169 = -t4+t8-t20-1073.0/4286520.0*t12+t22+1073.0/4286520.0*t17;
-  const double t170 = 584.0/893025.0*t12;
-  const double t171 = 584.0/893025.0*t17;
-  const double t172 = t127-t128+t43+t170-t45-t171;
-  const double t173 = 4234.0/2679075.0*t12;
-  const double t174 = 4234.0/2679075.0*t17;
-  const double t175 = -t124+t125-t38-t173+t40+t174;
-  const double t176 = 584.0/229635.0*t12;
-  const double t177 = 584.0/229635.0*t17;
-  const double t178 = t121-t122+t33+t176-t35-t177;
-  const double t179 = 37.0/76545.0*t12;
-  const double t180 = 37.0/76545.0*t17;
-  const double t181 = t112-t113+t43+t179-t45-t180;
-  const double t182 = 1073.0/714420.0*t12;
-  const double t183 = 1073.0/714420.0*t17;
-  const double t184 = -t115+t116-t38-t182+t40+t183;
-  const double t185 = 1369.0/535815.0*t12;
-  const double t186 = 1369.0/535815.0*t17;
-  const double t187 = t118-t119+t33+t185-t35-t186;
-  const double t190 = -t60+t61-t62-58.0/893025.0*t12+t63+58.0/893025.0*t17;
-  const double t193 = t55-t56+t57+841.0/5358150.0*t12-t58-841.0/5358150.0*t17;
-  const double t196 = -t48+t49-t50-58.0/229635.0*t12+t52+58.0/229635.0*t17;
-  const double t197 = 16.0/127575.0*t12;
-  const double t198 = 16.0/127575.0*t17;
-  const double t199 = t148-t149+t89+t197-t90-t198;
-  const double t200 = 592.0/893025.0*t12;
-  const double t201 = 592.0/893025.0*t17;
-  const double t202 = t145-t146+t82+t200-t84-t201;
-  const double t203 = 592.0/229635.0*t12;
-  const double t204 = 592.0/229635.0*t17;
-  const double t205 = t142-t143+t77+t203-t79-t204;
-  const double t206 = 16.0/32805.0*t12;
-  const double t207 = 16.0/32805.0*t17;
-  const double t208 = t139-t140+t82+t206-t84-t207;
-  const double t209 = 116.0/297675.0*t12;
-  const double t210 = 116.0/297675.0*t17;
-  const double t211 = -t157+t158-t100-t209+t101+t210;
-  const double t212 = 4292.0/2679075.0*t12;
-  const double t213 = 4292.0/2679075.0*t17;
-  const double t214 = -t154+t155-t93-t212+t95+t213;
-  const double t215 = 116.0/76545.0*t12;
-  const double t216 = 116.0/76545.0*t17;
-  const double t217 = -t151+t152-t93-t215+t95+t216;
-  const double t218 = 116.0/382725.0*t12;
-  const double t219 = 116.0/382725.0*t17;
-  const double t220 = -t160+t161-t100-t218+t101+t219;
-  const double t221 = t3-t7+t10+t12-t15-t17;
-  const double t223 = t31-t32+t33+t185-t35-t186;
-  const double t224 = -t38-t182+t40+t183;
-  const double t225 = -t31+t32+t43+t179-t45-t180;
-  const double t226 = t60-t61+t43+t170-t45-t171;
-  const double t227 = -t55+t56-t38-t173+t40+t174;
-  const double t228 = t48-t49+t33+t176-t35-t177;
-  const double t229 = t87-t88+t82+t200-t84-t201;
-  const double t230 = -t87+t88+t89+t197-t90-t198;
-  const double t231 = -t75+t76+t82+t206-t84-t207;
-  const double t232 = t75-t76+t77+t203-t79-t204;
-  const double t233 = -t100-t209+t101+t210;
-  const double t234 = t98-t99-t100-t218+t101+t219;
-  const double t235 = -t93-t215+t95+t216;
-  const double t236 = -t98+t99-t93-t212+t95+t213;
-  const double t237 = t10+t12-t15-t17;
-  const double t238 = 9344.0/2679075.0*t3;
-  const double t239 = 9344.0/2679075.0*t7;
-  const double t240 = 18688.0/1148175.0*t10;
-  const double t241 = 928.0/1148175.0*t12;
-  const double t242 = 18688.0/1148175.0*t15;
-  const double t243 = 928.0/1148175.0*t17;
-  const double t245 = 2336.0/2679075.0*t3;
-  const double t246 = 2336.0/2679075.0*t7;
-  const double t247 = 9344.0/2679075.0*t10;
-  const double t248 = 464.0/2679075.0*t12;
-  const double t249 = 9344.0/2679075.0*t15;
-  const double t250 = 464.0/2679075.0*t17;
-  const double t251 = -t245+t246-t247-t248+t249+t250;
-  const double t252 = 9344.0/8037225.0*t3;
-  const double t253 = 9344.0/8037225.0*t7;
-  const double t254 = 18688.0/8037225.0*t10;
-  const double t255 = 928.0/8037225.0*t12;
-  const double t256 = 18688.0/8037225.0*t15;
-  const double t257 = 928.0/8037225.0*t17;
-  const double t258 = t252-t253+t254+t255-t256-t257;
-  const double t261 = 1856.0/1148175.0*t10;
-  const double t262 = 1856.0/1148175.0*t15;
-  const double t263 = -928.0/2679075.0*t3+928.0/2679075.0*t7-t261-t241+t262+t243;
-  const double t264 = 928.0/2679075.0*t10;
-  const double t265 = 928.0/2679075.0*t15;
-  const double t266 = t98-t99+t264+t248-t265-t250;
-  const double t267 = 928.0/8037225.0*t3;
-  const double t268 = 928.0/8037225.0*t7;
-  const double t271 = -t267+t268-1856.0/8037225.0*t10-t255+1856.0/8037225.0*t15+t257;
-  const double t272 = 9472.0/2679075.0*t3;
-  const double t273 = 9472.0/2679075.0*t7;
-  const double t274 = 18944.0/1148175.0*t10;
-  const double t275 = 1024.0/1148175.0*t12;
-  const double t276 = 18944.0/1148175.0*t15;
-  const double t277 = 1024.0/1148175.0*t17;
-  const double t278 = t272-t273+t274+t275-t276-t277;
-  const double t279 = 9472.0/8037225.0*t3;
-  const double t280 = 9472.0/8037225.0*t7;
-  const double t281 = 18944.0/8037225.0*t10;
-  const double t282 = 1024.0/8037225.0*t12;
-  const double t283 = 18944.0/8037225.0*t15;
-  const double t284 = 1024.0/8037225.0*t17;
-  const double t285 = t279-t280+t281+t282-t283-t284;
-  const double t286 = 256.0/1148175.0*t3;
-  const double t287 = 256.0/1148175.0*t7;
-  const double t288 = 512.0/1148175.0*t10;
-  const double t289 = 512.0/1148175.0*t15;
-  const double t290 = t286-t287+t288-t282-t289+t284;
-  const double t291 = 256.0/382725.0*t3;
-  const double t292 = 256.0/382725.0*t7;
-  const double t293 = 512.0/164025.0*t10;
-  const double t294 = 512.0/164025.0*t15;
-  const double t295 = t291-t292+t293-t275-t294+t277;
-  const double t296 = 2368.0/2679075.0*t3;
-  const double t297 = 2368.0/2679075.0*t7;
-  const double t298 = 9472.0/2679075.0*t10;
-  const double t299 = 512.0/2679075.0*t12;
-  const double t300 = 9472.0/2679075.0*t15;
-  const double t301 = 512.0/2679075.0*t17;
-  const double t302 = -t296+t297-t298-t299+t300+t301;
-  const double t303 = 1856.0/2679075.0*t3;
-  const double t304 = 1856.0/2679075.0*t7;
-  const double t305 = 3712.0/2679075.0*t10;
-  const double t306 = 3712.0/2679075.0*t15;
-  const double t307 = -t303+t304-t305+t306;
-  const double t308 = 64.0/382725.0*t3;
-  const double t309 = 64.0/382725.0*t7;
-  const double t310 = 256.0/382725.0*t10;
-  const double t311 = 256.0/382725.0*t15;
-  const double t312 = -t308+t309-t310+t299+t311-t301;
-  const double t313 = 1856.0/893025.0*t3;
-  const double t314 = 1856.0/893025.0*t7;
-  const double t315 = 3712.0/382725.0*t10;
-  const double t316 = 3712.0/382725.0*t15;
-  const double t317 = -t313+t314-t315+t316;
-  const double t318 = 464.0/893025.0*t3;
-  const double t319 = 464.0/893025.0*t7;
-  const double t320 = 1856.0/893025.0*t10;
-  const double t321 = 1856.0/893025.0*t15;
-  const double t322 = t318-t319+t320-t321;
-  const double t323 = 7592.0/893025.0*t3;
-  const double t324 = 7592.0/893025.0*t7;
-  const double t325 = 15184.0/893025.0*t10;
-  const double t326 = 754.0/893025.0*t12;
-  const double t327 = 15184.0/893025.0*t15;
-  const double t328 = 754.0/893025.0*t17;
-  const double t330 = 2336.0/893025.0*t3;
-  const double t331 = 2336.0/893025.0*t7;
-  const double t332 = -t330+t331-t247-t248+t249+t250;
-  const double t333 = 754.0/893025.0*t3;
-  const double t334 = 754.0/893025.0*t7;
-  const double t337 = -t333+t334-1508.0/893025.0*t10-t326+1508.0/893025.0*t15+t328;
-  const double t340 = 232.0/893025.0*t3-232.0/893025.0*t7+t264+t248-t265-t250;
-  const double t341 = 2368.0/893025.0*t3;
-  const double t342 = 2368.0/893025.0*t7;
-  const double t343 = -t341+t342-t298-t299+t300+t301;
-  const double t344 = 64.0/127575.0*t3;
-  const double t345 = 64.0/127575.0*t7;
-  const double t346 = -t344+t345-t310+t299+t311-t301;
-  const double t347 = 7696.0/893025.0*t3;
-  const double t348 = 7696.0/893025.0*t7;
-  const double t349 = 15392.0/893025.0*t10;
-  const double t350 = 832.0/893025.0*t12;
-  const double t351 = 15392.0/893025.0*t15;
-  const double t352 = 832.0/893025.0*t17;
-  const double t353 = t347-t348+t349+t350-t351-t352;
-  const double t354 = 464.0/297675.0*t3;
-  const double t355 = 464.0/297675.0*t7;
-  const double t356 = t354-t355+t320-t321;
-  const double t357 = 208.0/127575.0*t3;
-  const double t358 = 208.0/127575.0*t7;
-  const double t359 = 416.0/127575.0*t10;
-  const double t360 = 416.0/127575.0*t15;
-  const double t361 = t357-t358+t359-t350-t360+t352;
-  const double t362 = 1508.0/297675.0*t3;
-  const double t363 = 1508.0/297675.0*t7;
-  const double t364 = 3016.0/297675.0*t10;
-  const double t365 = 3016.0/297675.0*t15;
-  const double t366 = -t362+t363-t364+t365;
-  const double t367 = 102784.0/8037225.0*t3;
-  const double t368 = 102784.0/8037225.0*t7;
-  const double t372 = -10208.0/8037225.0*t3+10208.0/8037225.0*t7-t261-t241+t262+t243;
-  const double t373 = 104192.0/8037225.0*t3;
-  const double t374 = 104192.0/8037225.0*t7;
-  const double t375 = t373-t374+t274+t275-t276-t277;
-  const double t376 = 2816.0/1148175.0*t3;
-  const double t377 = 2816.0/1148175.0*t7;
-  const double t378 = t376-t377+t293-t275-t294+t277;
-  const double t379 = 20416.0/2679075.0*t3;
-  const double t380 = 20416.0/2679075.0*t7;
-  const double t381 = -t379+t380-t315+t316;
-  const double t382 = 1184.0/76545.0*t3;
-  const double t383 = 1184.0/76545.0*t7;
-  const double t384 = 9344.0/2679075.0*t12;
-  const double t385 = 9344.0/2679075.0*t17;
-  const double t387 = 592.0/178605.0*t3;
-  const double t388 = 592.0/178605.0*t7;
-  const double t389 = 2336.0/2679075.0*t12;
-  const double t390 = 2336.0/2679075.0*t17;
-  const double t391 = -t387+t388-t247-t389+t249+t390;
-  const double t394 = 9344.0/8037225.0*t12;
-  const double t395 = 9344.0/8037225.0*t17;
-  const double t396 = 1184.0/535815.0*t3-1184.0/535815.0*t7+t254+t394-t256-t395;
-  const double t397 = 928.0/1148175.0*t3;
-  const double t398 = 928.0/1148175.0*t7;
-  const double t401 = -t397+t398-t261-928.0/2679075.0*t12+t262+928.0/2679075.0*t17;
-  const double t402 = 464.0/2679075.0*t3;
-  const double t403 = 464.0/2679075.0*t7;
-  const double t404 = t402-t403+t264+t94-t265-t96;
-  const double t405 = 512.0/127575.0*t3;
-  const double t406 = 512.0/127575.0*t7;
-  const double t407 = 256.0/382725.0*t12;
-  const double t408 = 256.0/382725.0*t17;
-  const double t409 = t405-t406+t293+t407-t294-t408;
-  const double t410 = 512.0/32805.0*t3;
-  const double t411 = 512.0/32805.0*t7;
-  const double t412 = 9472.0/2679075.0*t12;
-  const double t413 = 9472.0/2679075.0*t17;
-  const double t414 = t410-t411+t274+t412-t276-t413;
-  const double t417 = 9472.0/8037225.0*t12;
-  const double t418 = 9472.0/8037225.0*t17;
-  const double t419 = 512.0/229635.0*t3-512.0/229635.0*t7+t281+t417-t283-t418;
-  const double t422 = 256.0/1148175.0*t12;
-  const double t423 = 256.0/1148175.0*t17;
-  const double t424 = 512.0/893025.0*t3-512.0/893025.0*t7+t288+t422-t289-t423;
-  const double t425 = 3712.0/382725.0*t3;
-  const double t426 = 3712.0/382725.0*t7;
-  const double t427 = 1856.0/893025.0*t12;
-  const double t428 = 1856.0/893025.0*t17;
-  const double t429 = -t425+t426-t315-t427+t316+t428;
-  const double t430 = 256.0/76545.0*t3;
-  const double t431 = 256.0/76545.0*t7;
-  const double t432 = 2368.0/2679075.0*t12;
-  const double t433 = 2368.0/2679075.0*t17;
-  const double t434 = -t430+t431-t298-t432+t300+t433;
-  const double t437 = 1856.0/2679075.0*t12;
-  const double t438 = 1856.0/2679075.0*t17;
-  const double t439 = -3712.0/2679075.0*t3+3712.0/2679075.0*t7-t305-t437+t306+t438;
-  const double t440 = 256.0/297675.0*t3;
-  const double t441 = 256.0/297675.0*t7;
-  const double t442 = 64.0/382725.0*t12;
-  const double t443 = 64.0/382725.0*t17;
-  const double t444 = -t440+t441-t310-t442+t311+t443;
-  const double t445 = 464.0/893025.0*t12;
-  const double t446 = 464.0/893025.0*t17;
-  const double t447 = t313-t314+t320+t445-t321-t446;
-  const double t450 = 7592.0/893025.0*t12;
-  const double t451 = 7592.0/893025.0*t17;
-  const double t453 = 2336.0/893025.0*t12;
-  const double t454 = 2336.0/893025.0*t17;
-  const double t455 = -t387+t388-t247-t453+t249+t454;
-  const double t458 = t402-t403+t264+232.0/893025.0*t12-t265-232.0/893025.0*t17;
-  const double t459 = 2368.0/893025.0*t12;
-  const double t460 = 2368.0/893025.0*t17;
-  const double t461 = -t430+t431-t298-t459+t300+t460;
-  const double t462 = 64.0/127575.0*t12;
-  const double t463 = 64.0/127575.0*t17;
-  const double t464 = -t440+t441-t310-t462+t311+t463;
-  const double t467 = 7696.0/893025.0*t12;
-  const double t468 = 7696.0/893025.0*t17;
-  const double t469 = 416.0/25515.0*t3-416.0/25515.0*t7+t349+t467-t351-t468;
-  const double t470 = 464.0/297675.0*t12;
-  const double t471 = 464.0/297675.0*t17;
-  const double t472 = t313-t314+t320+t470-t321-t471;
-  const double t475 = 208.0/127575.0*t12;
-  const double t476 = 208.0/127575.0*t17;
-  const double t477 = 416.0/99225.0*t3-416.0/99225.0*t7+t359+t475-t360-t476;
-  const double t480 = 1508.0/297675.0*t12;
-  const double t481 = 1508.0/297675.0*t17;
-  const double t482 = -3016.0/297675.0*t3+3016.0/297675.0*t7-t364-t480+t365+t481;
-  const double t483 = 102784.0/8037225.0*t12;
-  const double t484 = 102784.0/8037225.0*t17;
-  const double t488 = -t397+t398-t261-10208.0/8037225.0*t12+t262+10208.0/8037225.0*t17;
-  const double t489 = 104192.0/8037225.0*t12;
-  const double t490 = 104192.0/8037225.0*t17;
-  const double t491 = t410-t411+t274+t489-t276-t490;
-  const double t492 = 2816.0/1148175.0*t12;
-  const double t493 = 2816.0/1148175.0*t17;
-  const double t494 = t405-t406+t293+t492-t294-t493;
-  const double t495 = 20416.0/2679075.0*t12;
-  const double t496 = 20416.0/2679075.0*t17;
-  const double t497 = -t425+t426-t315-t495+t316+t496;
-  const double t498 = 1184.0/76545.0*t12;
-  const double t499 = 1184.0/76545.0*t17;
-  const double t501 = 592.0/178605.0*t12;
-  const double t502 = 592.0/178605.0*t17;
-  const double t503 = -t245+t246-t247-t501+t249+t502;
-  const double t506 = t252-t253+t254+1184.0/535815.0*t12-t256-1184.0/535815.0*t17;
-  const double t507 = 512.0/127575.0*t12;
-  const double t508 = 512.0/127575.0*t17;
-  const double t509 = t291-t292+t293+t507-t294-t508;
-  const double t512 = t286-t287+t288+512.0/893025.0*t12-t289-512.0/893025.0*t17;
-  const double t515 = t279-t280+t281+512.0/229635.0*t12-t283-512.0/229635.0*t17;
-  const double t516 = 512.0/32805.0*t12;
-  const double t517 = 512.0/32805.0*t17;
-  const double t518 = t272-t273+t274+t516-t276-t517;
-  const double t519 = 256.0/297675.0*t12;
-  const double t520 = 256.0/297675.0*t17;
-  const double t521 = -t308+t309-t310-t519+t311+t520;
-  const double t524 = -t303+t304-t305-3712.0/2679075.0*t12+t306+3712.0/2679075.0*t17;
-  const double t525 = 256.0/76545.0*t12;
-  const double t526 = 256.0/76545.0*t17;
-  const double t527 = -t296+t297-t298-t525+t300+t526;
-  const double t528 = 3712.0/382725.0*t12;
-  const double t529 = 3712.0/382725.0*t17;
-  const double t530 = -t313+t314-t315-t528+t316+t529;
-  const double t531 = t318-t319+t320+t427-t321-t428;
-  const double t535 = -t330+t331-t247-t501+t249+t502;
-  const double t536 = -t344+t345-t310-t519+t311+t520;
-  const double t537 = -t341+t342-t298-t525+t300+t526;
-  const double t540 = t357-t358+t359+416.0/99225.0*t12-t360-416.0/99225.0*t17;
-  const double t541 = t354-t355+t320+t427-t321-t428;
-  const double t544 = t347-t348+t349+416.0/25515.0*t12-t351-416.0/25515.0*t17;
-  const double t547 = -t362+t363-t364-3016.0/297675.0*t12+t365+3016.0/297675.0*t17;
-  const double t549 = t376-t377+t293+t507-t294-t508;
-  const double t550 = t373-t374+t274+t516-t276-t517;
-  const double t551 = -t379+t380-t315-t528+t316+t529;
-  const double t553 = -t402+t403-t247-t389+t249+t390;
-  const double t554 = t267-t268+t254+t394-t256-t395;
-  const double t555 = 1024.0/1148175.0*t3;
-  const double t556 = 1024.0/1148175.0*t7;
-  const double t557 = t555-t556+t274+t412-t276-t413;
-  const double t558 = -t555+t556+t293+t407-t294-t408;
-  const double t559 = 1024.0/8037225.0*t3;
-  const double t560 = 1024.0/8037225.0*t7;
-  const double t561 = -t559+t560+t288+t422-t289-t423;
-  const double t562 = t559-t560+t281+t417-t283-t418;
-  const double t563 = -t315-t427+t316+t428;
-  const double t564 = 512.0/2679075.0*t3;
-  const double t565 = 512.0/2679075.0*t7;
-  const double t566 = t564-t565-t310-t442+t311+t443;
-  const double t567 = -t305-t437+t306+t438;
-  const double t568 = -t564+t565-t298-t432+t300+t433;
-  const double t569 = t320+t445-t321-t446;
-  const double t571 = -t402+t403-t247-t453+t249+t454;
-  const double t572 = t564-t565-t310-t462+t311+t463;
-  const double t573 = -t564+t565-t298-t459+t300+t460;
-  const double t574 = 832.0/893025.0*t3;
-  const double t575 = 832.0/893025.0*t7;
-  const double t576 = -t574+t575+t359+t475-t360-t476;
-  const double t577 = t320+t470-t321-t471;
-  const double t578 = t574-t575+t349+t467-t351-t468;
-  const double t579 = -t364-t480+t365+t481;
-  const double t581 = -t555+t556+t293+t492-t294-t493;
-  const double t582 = t555-t556+t274+t489-t276-t490;
-  const double t583 = -t315-t495+t316+t496;
-  const double t584 = 8192.0/382725.0*t3;
-  const double t585 = 8192.0/382725.0*t7;
-  const double t586 = 16384.0/164025.0*t10;
-  const double t587 = 8192.0/382725.0*t12;
-  const double t588 = 16384.0/164025.0*t15;
-  const double t589 = 8192.0/382725.0*t17;
-  const double t591 = 8192.0/1148175.0*t3;
-  const double t592 = 8192.0/1148175.0*t7;
-  const double t593 = 16384.0/1148175.0*t10;
-  const double t595 = 16384.0/1148175.0*t15;
-  const double t597 = t591-t592+t593+8192.0/2679075.0*t12-t595-8192.0/2679075.0*t17;
-  const double t604 = 8192.0/8037225.0*t3-8192.0/8037225.0*t7+16384.0/8037225.0*t10+
-                     8192.0/8037225.0*t12-16384.0/8037225.0*t15-8192.0/8037225.0*t17;
-  const double t607 = 8192.0/1148175.0*t12;
-  const double t608 = 8192.0/1148175.0*t17;
-  const double t609 = 8192.0/2679075.0*t3-8192.0/2679075.0*t7+t593+t607-t595-t608;
-  const double t610 = 2048.0/382725.0*t3;
-  const double t611 = 2048.0/382725.0*t7;
-  const double t612 = 8192.0/382725.0*t10;
-  const double t613 = 4096.0/893025.0*t12;
-  const double t614 = 8192.0/382725.0*t15;
-  const double t615 = 4096.0/893025.0*t17;
-  const double t616 = -t610+t611-t612-t613+t614+t615;
-  const double t617 = 4096.0/2679075.0*t3;
-  const double t618 = 4096.0/2679075.0*t7;
-  const double t619 = 8192.0/2679075.0*t10;
-  const double t621 = 8192.0/2679075.0*t15;
-  const double t623 = -t617+t618-t619-2048.0/2679075.0*t12+t621+2048.0/2679075.0*t17;
-  const double t626 = 4096.0/2679075.0*t12;
-  const double t627 = 4096.0/2679075.0*t17;
-  const double t628 = -2048.0/2679075.0*t3+2048.0/2679075.0*t7-t619-t626+t621+t627;
-  const double t629 = 4096.0/893025.0*t3;
-  const double t630 = 4096.0/893025.0*t7;
-  const double t631 = 2048.0/382725.0*t12;
-  const double t632 = 2048.0/382725.0*t17;
-  const double t633 = -t629+t630-t612-t631+t614+t632;
-  const double t634 = 1024.0/893025.0*t3;
-  const double t635 = 1024.0/893025.0*t7;
-  const double t636 = 4096.0/893025.0*t10;
-  const double t637 = 1024.0/893025.0*t12;
-  const double t638 = 4096.0/893025.0*t15;
-  const double t639 = 1024.0/893025.0*t17;
-  const double t640 = t634-t635+t636+t637-t638-t639;
-  const double t641 = 90112.0/1148175.0*t3;
-  const double t642 = 90112.0/1148175.0*t7;
-  const double t646 = 90112.0/8037225.0*t3-90112.0/8037225.0*t7+t593+t607-t595-t608;
-  const double t647 = 2048.0/127575.0*t3;
-  const double t648 = 2048.0/127575.0*t7;
-  const double t649 = -t647+t648-t612-t613+t614+t615;
-  const double t650 = 45056.0/2679075.0*t3;
-  const double t651 = 45056.0/2679075.0*t7;
-  const double t652 = -t650+t651-t612-t631+t614+t632;
-  const double t655 = -2048.0/893025.0*t3+2048.0/893025.0*t7-t619-t626+t621+t627;
-  const double t656 = 1024.0/297675.0*t3;
-  const double t657 = 1024.0/297675.0*t7;
-  const double t658 = t656-t657+t636+t637-t638-t639;
-  const double t659 = 90112.0/1148175.0*t12;
-  const double t660 = 90112.0/1148175.0*t17;
-  const double t664 = t591-t592+t593+90112.0/8037225.0*t12-t595-90112.0/8037225.0*t17;
-  const double t665 = 2048.0/127575.0*t12;
-  const double t666 = 2048.0/127575.0*t17;
-  const double t667 = -t650+t651-t612-t665+t614+t666;
-  const double t668 = 45056.0/2679075.0*t12;
-  const double t669 = 45056.0/2679075.0*t17;
-  const double t670 = -t647+t648-t612-t668+t614+t669;
-  const double t673 = -t617+t618-t619-2048.0/893025.0*t12+t621+2048.0/893025.0*t17;
-  const double t674 = 1024.0/297675.0*t12;
-  const double t675 = 1024.0/297675.0*t17;
-  const double t676 = t656-t657+t636+t674-t638-t675;
-  const double t678 = -t610+t611-t612-t668+t614+t669;
-  const double t679 = -t629+t630-t612-t665+t614+t666;
-  const double t680 = t634-t635+t636+t674-t638-t675;
-  const double t681 = 6656.0/127575.0*t3;
-  const double t682 = 6656.0/127575.0*t7;
-  const double t683 = 13312.0/127575.0*t10;
-  const double t685 = 13312.0/127575.0*t15;
-  const double t694 = 6656.0/893025.0*t3-6656.0/893025.0*t7+13312.0/893025.0*t10+6656.0/
-                     893025.0*t12-13312.0/893025.0*t15-6656.0/893025.0*t17;
-  const double t695 = 3328.0/297675.0*t3;
-  const double t696 = 3328.0/297675.0*t7;
-  const double t697 = 6656.0/297675.0*t10;
-  const double t699 = 6656.0/297675.0*t15;
-  const double t701 = -t695+t696-t697-1664.0/297675.0*t12+t699+1664.0/297675.0*t17;
-  const double t704 = 6656.0/127575.0*t12;
-  const double t705 = 6656.0/127575.0*t17;
-  const double t709 = 3328.0/297675.0*t12;
-  const double t710 = 3328.0/297675.0*t17;
-  const double t711 = -1664.0/99225.0*t3+1664.0/99225.0*t7-t697-t709+t699+t710;
-  const double t717 = -t695+t696-t697-1664.0/99225.0*t12+t699+1664.0/99225.0*t17;
-  const double t723 = -1664.0/297675.0*t3+1664.0/297675.0*t7-t697-t709+t699+t710;
-  local_mass_matrix(0,0) = t4-t8+t11+t13-t16-t18;
-  local_mass_matrix(0,1) = t24;
-  local_mass_matrix(0,2) = t29;
-  local_mass_matrix(0,3) = t30;
-  local_mass_matrix(0,4) = t37;
-  local_mass_matrix(0,5) = t42;
-  local_mass_matrix(0,6) = t47;
-  local_mass_matrix(0,7) = t54;
-  local_mass_matrix(0,8) = t59;
-  local_mass_matrix(0,9) = t64;
-  local_mass_matrix(0,10) = t67;
-  local_mass_matrix(0,11) = t68;
-  local_mass_matrix(0,12) = t69;
-  local_mass_matrix(0,13) = t72;
-  local_mass_matrix(0,14) = t73;
-  local_mass_matrix(0,15) = t74;
-  local_mass_matrix(0,16) = t81;
-  local_mass_matrix(0,17) = t86;
-  local_mass_matrix(0,18) = t91;
-  local_mass_matrix(0,19) = t92;
-  local_mass_matrix(0,20) = t97;
-  local_mass_matrix(0,21) = t102;
-  local_mass_matrix(0,22) = t103;
-  local_mass_matrix(0,23) = t104;
-  local_mass_matrix(0,24) = 841.0/893025.0*t105;
-  local_mass_matrix(1,0) = t24;
-  local_mass_matrix(1,1) = t106-t107+t11+t13-t16-t18;
-  local_mass_matrix(1,2) = t111;
-  local_mass_matrix(1,3) = t29;
-  local_mass_matrix(1,4) = t114;
-  local_mass_matrix(1,5) = t117;
-  local_mass_matrix(1,6) = t120;
-  local_mass_matrix(1,7) = t123;
-  local_mass_matrix(1,8) = t126;
-  local_mass_matrix(1,9) = t129;
-  local_mass_matrix(1,10) = t132;
-  local_mass_matrix(1,11) = t135;
-  local_mass_matrix(1,12) = t138;
-  local_mass_matrix(1,13) = t54;
-  local_mass_matrix(1,14) = t59;
-  local_mass_matrix(1,15) = t64;
-  local_mass_matrix(1,16) = t141;
-  local_mass_matrix(1,17) = t144;
-  local_mass_matrix(1,18) = t147;
-  local_mass_matrix(1,19) = t150;
-  local_mass_matrix(1,20) = t153;
-  local_mass_matrix(1,21) = t156;
-  local_mass_matrix(1,22) = t159;
-  local_mass_matrix(1,23) = t162;
-  local_mass_matrix(1,24) = 841.0/893025.0*t163;
-  local_mass_matrix(2,0) = t29;
-  local_mass_matrix(2,1) = t111;
-  local_mass_matrix(2,2) = t106-t107+t11+t164-t16-t165;
-  local_mass_matrix(2,3) = t169;
-  local_mass_matrix(2,4) = t132;
-  local_mass_matrix(2,5) = t135;
-  local_mass_matrix(2,6) = t138;
-  local_mass_matrix(2,7) = t172;
-  local_mass_matrix(2,8) = t175;
-  local_mass_matrix(2,9) = t178;
-  local_mass_matrix(2,10) = t181;
-  local_mass_matrix(2,11) = t184;
-  local_mass_matrix(2,12) = t187;
-  local_mass_matrix(2,13) = t190;
-  local_mass_matrix(2,14) = t193;
-  local_mass_matrix(2,15) = t196;
-  local_mass_matrix(2,16) = t199;
-  local_mass_matrix(2,17) = t202;
-  local_mass_matrix(2,18) = t205;
-  local_mass_matrix(2,19) = t208;
-  local_mass_matrix(2,20) = t211;
-  local_mass_matrix(2,21) = t214;
-  local_mass_matrix(2,22) = t217;
-  local_mass_matrix(2,23) = t220;
-  local_mass_matrix(2,24) = 841.0/893025.0*t221;
-  local_mass_matrix(3,0) = t30;
-  local_mass_matrix(3,1) = t29;
-  local_mass_matrix(3,2) = t169;
-  local_mass_matrix(3,3) = t4-t8+t11+t164-t16-t165;
-  local_mass_matrix(3,4) = t67;
-  local_mass_matrix(3,5) = t68;
-  local_mass_matrix(3,6) = t69;
-  local_mass_matrix(3,7) = t190;
-  local_mass_matrix(3,8) = t193;
-  local_mass_matrix(3,9) = t196;
-  local_mass_matrix(3,10) = t223;
-  local_mass_matrix(3,11) = t224;
-  local_mass_matrix(3,12) = t225;
-  local_mass_matrix(3,13) = t226;
-  local_mass_matrix(3,14) = t227;
-  local_mass_matrix(3,15) = t228;
-  local_mass_matrix(3,16) = t229;
-  local_mass_matrix(3,17) = t230;
-  local_mass_matrix(3,18) = t231;
-  local_mass_matrix(3,19) = t232;
-  local_mass_matrix(3,20) = t233;
-  local_mass_matrix(3,21) = t234;
-  local_mass_matrix(3,22) = t235;
-  local_mass_matrix(3,23) = t236;
-  local_mass_matrix(3,24) = 841.0/893025.0*t237;
-  local_mass_matrix(4,0) = t37;
-  local_mass_matrix(4,1) = t114;
-  local_mass_matrix(4,2) = t132;
-  local_mass_matrix(4,3) = t67;
-  local_mass_matrix(4,4) = t238-t239+t240+t241-t242-t243;
-  local_mass_matrix(4,5) = t251;
-  local_mass_matrix(4,6) = t258;
-  local_mass_matrix(4,7) = t141;
-  local_mass_matrix(4,8) = t162;
-  local_mass_matrix(4,9) = t150;
-  local_mass_matrix(4,10) = t263;
-  local_mass_matrix(4,11) = t266;
-  local_mass_matrix(4,12) = t271;
-  local_mass_matrix(4,13) = t81;
-  local_mass_matrix(4,14) = t104;
-  local_mass_matrix(4,15) = t92;
-  local_mass_matrix(4,16) = t278;
-  local_mass_matrix(4,17) = t285;
-  local_mass_matrix(4,18) = t290;
-  local_mass_matrix(4,19) = t295;
-  local_mass_matrix(4,20) = t302;
-  local_mass_matrix(4,21) = t307;
-  local_mass_matrix(4,22) = t312;
-  local_mass_matrix(4,23) = t317;
-  local_mass_matrix(4,24) = t322;
-  local_mass_matrix(5,0) = t42;
-  local_mass_matrix(5,1) = t117;
-  local_mass_matrix(5,2) = t135;
-  local_mass_matrix(5,3) = t68;
-  local_mass_matrix(5,4) = t251;
-  local_mass_matrix(5,5) = t323-t324+t325+t326-t327-t328;
-  local_mass_matrix(5,6) = t332;
-  local_mass_matrix(5,7) = t153;
-  local_mass_matrix(5,8) = 841.0/893025.0*t163;
-  local_mass_matrix(5,9) = t159;
-  local_mass_matrix(5,10) = t266;
-  local_mass_matrix(5,11) = t337;
-  local_mass_matrix(5,12) = t340;
-  local_mass_matrix(5,13) = t97;
-  local_mass_matrix(5,14) = 841.0/893025.0*t105;
-  local_mass_matrix(5,15) = t103;
-  local_mass_matrix(5,16) = t302;
-  local_mass_matrix(5,17) = t343;
-  local_mass_matrix(5,18) = t346;
-  local_mass_matrix(5,19) = t312;
-  local_mass_matrix(5,20) = t353;
-  local_mass_matrix(5,21) = t356;
-  local_mass_matrix(5,22) = t361;
-  local_mass_matrix(5,23) = t322;
-  local_mass_matrix(5,24) = t366;
-  local_mass_matrix(6,0) = t47;
-  local_mass_matrix(6,1) = t120;
-  local_mass_matrix(6,2) = t138;
-  local_mass_matrix(6,3) = t69;
-  local_mass_matrix(6,4) = t258;
-  local_mass_matrix(6,5) = t332;
-  local_mass_matrix(6,6) = t367-t368+t240+t241-t242-t243;
-  local_mass_matrix(6,7) = t144;
-  local_mass_matrix(6,8) = t156;
-  local_mass_matrix(6,9) = t147;
-  local_mass_matrix(6,10) = t271;
-  local_mass_matrix(6,11) = t340;
-  local_mass_matrix(6,12) = t372;
-  local_mass_matrix(6,13) = t86;
-  local_mass_matrix(6,14) = t102;
-  local_mass_matrix(6,15) = t91;
-  local_mass_matrix(6,16) = t285;
-  local_mass_matrix(6,17) = t375;
-  local_mass_matrix(6,18) = t378;
-  local_mass_matrix(6,19) = t290;
-  local_mass_matrix(6,20) = t343;
-  local_mass_matrix(6,21) = t381;
-  local_mass_matrix(6,22) = t346;
-  local_mass_matrix(6,23) = t307;
-  local_mass_matrix(6,24) = t356;
-  local_mass_matrix(7,0) = t54;
-  local_mass_matrix(7,1) = t123;
-  local_mass_matrix(7,2) = t172;
-  local_mass_matrix(7,3) = t190;
-  local_mass_matrix(7,4) = t141;
-  local_mass_matrix(7,5) = t153;
-  local_mass_matrix(7,6) = t144;
-  local_mass_matrix(7,7) = t382-t383+t240+t384-t242-t385;
-  local_mass_matrix(7,8) = t391;
-  local_mass_matrix(7,9) = t396;
-  local_mass_matrix(7,10) = t199;
-  local_mass_matrix(7,11) = t211;
-  local_mass_matrix(7,12) = t202;
-  local_mass_matrix(7,13) = t401;
-  local_mass_matrix(7,14) = t404;
-  local_mass_matrix(7,15) = t271;
-  local_mass_matrix(7,16) = t409;
-  local_mass_matrix(7,17) = t414;
-  local_mass_matrix(7,18) = t419;
-  local_mass_matrix(7,19) = t424;
-  local_mass_matrix(7,20) = t429;
-  local_mass_matrix(7,21) = t434;
-  local_mass_matrix(7,22) = t439;
-  local_mass_matrix(7,23) = t444;
-  local_mass_matrix(7,24) = t447;
-  local_mass_matrix(8,0) = t59;
-  local_mass_matrix(8,1) = t126;
-  local_mass_matrix(8,2) = t175;
-  local_mass_matrix(8,3) = t193;
-  local_mass_matrix(8,4) = t162;
-  local_mass_matrix(8,5) = 841.0/893025.0*t163;
-  local_mass_matrix(8,6) = t156;
-  local_mass_matrix(8,7) = t391;
-  local_mass_matrix(8,8) = 962.0/59535.0*t3-962.0/59535.0*t7+t325+t450-
-                          t327-t451;
-  local_mass_matrix(8,9) = t455;
-  local_mass_matrix(8,10) = t220;
-  local_mass_matrix(8,11) = 841.0/893025.0*t221;
-  local_mass_matrix(8,12) = t214;
-  local_mass_matrix(8,13) = t404;
-  local_mass_matrix(8,14) = t337;
-  local_mass_matrix(8,15) = t458;
-  local_mass_matrix(8,16) = t444;
-  local_mass_matrix(8,17) = t434;
-  local_mass_matrix(8,18) = t461;
-  local_mass_matrix(8,19) = t464;
-  local_mass_matrix(8,20) = t447;
-  local_mass_matrix(8,21) = t469;
-  local_mass_matrix(8,22) = t472;
-  local_mass_matrix(8,23) = t477;
-  local_mass_matrix(8,24) = t482;
-  local_mass_matrix(9,0) = t64;
-  local_mass_matrix(9,1) = t129;
-  local_mass_matrix(9,2) = t178;
-  local_mass_matrix(9,3) = t196;
-  local_mass_matrix(9,4) = t150;
-  local_mass_matrix(9,5) = t159;
-  local_mass_matrix(9,6) = t147;
-  local_mass_matrix(9,7) = t396;
-  local_mass_matrix(9,8) = t455;
-  local_mass_matrix(9,9) = t382-t383+t240+t483-t242-t484;
-  local_mass_matrix(9,10) = t208;
-  local_mass_matrix(9,11) = t217;
-  local_mass_matrix(9,12) = t205;
-  local_mass_matrix(9,13) = t271;
-  local_mass_matrix(9,14) = t458;
-  local_mass_matrix(9,15) = t488;
-  local_mass_matrix(9,16) = t424;
-  local_mass_matrix(9,17) = t419;
-  local_mass_matrix(9,18) = t491;
-  local_mass_matrix(9,19) = t494;
-  local_mass_matrix(9,20) = t439;
-  local_mass_matrix(9,21) = t461;
-  local_mass_matrix(9,22) = t497;
-  local_mass_matrix(9,23) = t464;
-  local_mass_matrix(9,24) = t472;
-  local_mass_matrix(10,0) = t67;
-  local_mass_matrix(10,1) = t132;
-  local_mass_matrix(10,2) = t181;
-  local_mass_matrix(10,3) = t223;
-  local_mass_matrix(10,4) = t263;
-  local_mass_matrix(10,5) = t266;
-  local_mass_matrix(10,6) = t271;
-  local_mass_matrix(10,7) = t199;
-  local_mass_matrix(10,8) = t220;
-  local_mass_matrix(10,9) = t208;
-  local_mass_matrix(10,10) = t238-t239+t240+t498-t242-t499;
-  local_mass_matrix(10,11) = t503;
-  local_mass_matrix(10,12) = t506;
-  local_mass_matrix(10,13) = t229;
-  local_mass_matrix(10,14) = t236;
-  local_mass_matrix(10,15) = t232;
-  local_mass_matrix(10,16) = t509;
-  local_mass_matrix(10,17) = t512;
-  local_mass_matrix(10,18) = t515;
-  local_mass_matrix(10,19) = t518;
-  local_mass_matrix(10,20) = t521;
-  local_mass_matrix(10,21) = t524;
-  local_mass_matrix(10,22) = t527;
-  local_mass_matrix(10,23) = t530;
-  local_mass_matrix(10,24) = t531;
-  local_mass_matrix(11,0) = t68;
-  local_mass_matrix(11,1) = t135;
-  local_mass_matrix(11,2) = t184;
-  local_mass_matrix(11,3) = t224;
-  local_mass_matrix(11,4) = t266;
-  local_mass_matrix(11,5) = t337;
-  local_mass_matrix(11,6) = t340;
-  local_mass_matrix(11,7) = t211;
-  local_mass_matrix(11,8) = 841.0/893025.0*t221;
-  local_mass_matrix(11,9) = t217;
-  local_mass_matrix(11,10) = t503;
-  local_mass_matrix(11,11) = t323-t324+t325+962.0/59535.0*t12-t327-962.0/
-                            59535.0*t17;
-  local_mass_matrix(11,12) = t535;
-  local_mass_matrix(11,13) = t233;
-  local_mass_matrix(11,14) = 841.0/893025.0*t237;
-  local_mass_matrix(11,15) = t235;
-  local_mass_matrix(11,16) = t521;
-  local_mass_matrix(11,17) = t536;
-  local_mass_matrix(11,18) = t537;
-  local_mass_matrix(11,19) = t527;
-  local_mass_matrix(11,20) = t540;
-  local_mass_matrix(11,21) = t541;
-  local_mass_matrix(11,22) = t544;
-  local_mass_matrix(11,23) = t531;
-  local_mass_matrix(11,24) = t547;
-  local_mass_matrix(12,0) = t69;
-  local_mass_matrix(12,1) = t138;
-  local_mass_matrix(12,2) = t187;
-  local_mass_matrix(12,3) = t225;
-  local_mass_matrix(12,4) = t271;
-  local_mass_matrix(12,5) = t340;
-  local_mass_matrix(12,6) = t372;
-  local_mass_matrix(12,7) = t202;
-  local_mass_matrix(12,8) = t214;
-  local_mass_matrix(12,9) = t205;
-  local_mass_matrix(12,10) = t506;
-  local_mass_matrix(12,11) = t535;
-  local_mass_matrix(12,12) = t367-t368+t240+t498-t242-t499;
-  local_mass_matrix(12,13) = t230;
-  local_mass_matrix(12,14) = t234;
-  local_mass_matrix(12,15) = t231;
-  local_mass_matrix(12,16) = t512;
-  local_mass_matrix(12,17) = t549;
-  local_mass_matrix(12,18) = t550;
-  local_mass_matrix(12,19) = t515;
-  local_mass_matrix(12,20) = t536;
-  local_mass_matrix(12,21) = t551;
-  local_mass_matrix(12,22) = t537;
-  local_mass_matrix(12,23) = t524;
-  local_mass_matrix(12,24) = t541;
-  local_mass_matrix(13,0) = t72;
-  local_mass_matrix(13,1) = t54;
-  local_mass_matrix(13,2) = t190;
-  local_mass_matrix(13,3) = t226;
-  local_mass_matrix(13,4) = t81;
-  local_mass_matrix(13,5) = t97;
-  local_mass_matrix(13,6) = t86;
-  local_mass_matrix(13,7) = t401;
-  local_mass_matrix(13,8) = t404;
-  local_mass_matrix(13,9) = t271;
-  local_mass_matrix(13,10) = t229;
-  local_mass_matrix(13,11) = t233;
-  local_mass_matrix(13,12) = t230;
-  local_mass_matrix(13,13) = t397-t398+t240+t384-t242-t385;
-  local_mass_matrix(13,14) = t553;
-  local_mass_matrix(13,15) = t554;
-  local_mass_matrix(13,16) = t557;
-  local_mass_matrix(13,17) = t558;
-  local_mass_matrix(13,18) = t561;
-  local_mass_matrix(13,19) = t562;
-  local_mass_matrix(13,20) = t563;
-  local_mass_matrix(13,21) = t566;
-  local_mass_matrix(13,22) = t567;
-  local_mass_matrix(13,23) = t568;
-  local_mass_matrix(13,24) = t569;
-  local_mass_matrix(14,0) = t73;
-  local_mass_matrix(14,1) = t59;
-  local_mass_matrix(14,2) = t193;
-  local_mass_matrix(14,3) = t227;
-  local_mass_matrix(14,4) = t104;
-  local_mass_matrix(14,5) = 841.0/893025.0*t105;
-  local_mass_matrix(14,6) = t102;
-  local_mass_matrix(14,7) = t404;
-  local_mass_matrix(14,8) = t337;
-  local_mass_matrix(14,9) = t458;
-  local_mass_matrix(14,10) = t236;
-  local_mass_matrix(14,11) = 841.0/893025.0*t237;
-  local_mass_matrix(14,12) = t234;
-  local_mass_matrix(14,13) = t553;
-  local_mass_matrix(14,14) = t333-t334+t325+t450-t327-t451;
-  local_mass_matrix(14,15) = t571;
-  local_mass_matrix(14,16) = t568;
-  local_mass_matrix(14,17) = t566;
-  local_mass_matrix(14,18) = t572;
-  local_mass_matrix(14,19) = t573;
-  local_mass_matrix(14,20) = t569;
-  local_mass_matrix(14,21) = t576;
-  local_mass_matrix(14,22) = t577;
-  local_mass_matrix(14,23) = t578;
-  local_mass_matrix(14,24) = t579;
-  local_mass_matrix(15,0) = t74;
-  local_mass_matrix(15,1) = t64;
-  local_mass_matrix(15,2) = t196;
-  local_mass_matrix(15,3) = t228;
-  local_mass_matrix(15,4) = t92;
-  local_mass_matrix(15,5) = t103;
-  local_mass_matrix(15,6) = t91;
-  local_mass_matrix(15,7) = t271;
-  local_mass_matrix(15,8) = t458;
-  local_mass_matrix(15,9) = t488;
-  local_mass_matrix(15,10) = t232;
-  local_mass_matrix(15,11) = t235;
-  local_mass_matrix(15,12) = t231;
-  local_mass_matrix(15,13) = t554;
-  local_mass_matrix(15,14) = t571;
-  local_mass_matrix(15,15) = t397-t398+t240+t483-t242-t484;
-  local_mass_matrix(15,16) = t562;
-  local_mass_matrix(15,17) = t561;
-  local_mass_matrix(15,18) = t581;
-  local_mass_matrix(15,19) = t582;
-  local_mass_matrix(15,20) = t567;
-  local_mass_matrix(15,21) = t572;
-  local_mass_matrix(15,22) = t583;
-  local_mass_matrix(15,23) = t573;
-  local_mass_matrix(15,24) = t577;
-  local_mass_matrix(16,0) = t81;
-  local_mass_matrix(16,1) = t141;
-  local_mass_matrix(16,2) = t199;
-  local_mass_matrix(16,3) = t229;
-  local_mass_matrix(16,4) = t278;
-  local_mass_matrix(16,5) = t302;
-  local_mass_matrix(16,6) = t285;
-  local_mass_matrix(16,7) = t409;
-  local_mass_matrix(16,8) = t444;
-  local_mass_matrix(16,9) = t424;
-  local_mass_matrix(16,10) = t509;
-  local_mass_matrix(16,11) = t521;
-  local_mass_matrix(16,12) = t512;
-  local_mass_matrix(16,13) = t557;
-  local_mass_matrix(16,14) = t568;
-  local_mass_matrix(16,15) = t562;
-  local_mass_matrix(16,16) = t584-t585+t586+t587-t588-t589;
-  local_mass_matrix(16,17) = t597;
-  local_mass_matrix(16,18) = t604;
-  local_mass_matrix(16,19) = t609;
-  local_mass_matrix(16,20) = t616;
-  local_mass_matrix(16,21) = t623;
-  local_mass_matrix(16,22) = t628;
-  local_mass_matrix(16,23) = t633;
-  local_mass_matrix(16,24) = t640;
-  local_mass_matrix(17,0) = t86;
-  local_mass_matrix(17,1) = t144;
-  local_mass_matrix(17,2) = t202;
-  local_mass_matrix(17,3) = t230;
-  local_mass_matrix(17,4) = t285;
-  local_mass_matrix(17,5) = t343;
-  local_mass_matrix(17,6) = t375;
-  local_mass_matrix(17,7) = t414;
-  local_mass_matrix(17,8) = t434;
-  local_mass_matrix(17,9) = t419;
-  local_mass_matrix(17,10) = t512;
-  local_mass_matrix(17,11) = t536;
-  local_mass_matrix(17,12) = t549;
-  local_mass_matrix(17,13) = t558;
-  local_mass_matrix(17,14) = t566;
-  local_mass_matrix(17,15) = t561;
-  local_mass_matrix(17,16) = t597;
-  local_mass_matrix(17,17) = t641-t642+t586+t587-t588-t589;
-  local_mass_matrix(17,18) = t646;
-  local_mass_matrix(17,19) = t604;
-  local_mass_matrix(17,20) = t649;
-  local_mass_matrix(17,21) = t652;
-  local_mass_matrix(17,22) = t655;
-  local_mass_matrix(17,23) = t623;
-  local_mass_matrix(17,24) = t658;
-  local_mass_matrix(18,0) = t91;
-  local_mass_matrix(18,1) = t147;
-  local_mass_matrix(18,2) = t205;
-  local_mass_matrix(18,3) = t231;
-  local_mass_matrix(18,4) = t290;
-  local_mass_matrix(18,5) = t346;
-  local_mass_matrix(18,6) = t378;
-  local_mass_matrix(18,7) = t419;
-  local_mass_matrix(18,8) = t461;
-  local_mass_matrix(18,9) = t491;
-  local_mass_matrix(18,10) = t515;
-  local_mass_matrix(18,11) = t537;
-  local_mass_matrix(18,12) = t550;
-  local_mass_matrix(18,13) = t561;
-  local_mass_matrix(18,14) = t572;
-  local_mass_matrix(18,15) = t581;
-  local_mass_matrix(18,16) = t604;
-  local_mass_matrix(18,17) = t646;
-  local_mass_matrix(18,18) = t641-t642+t586+t659-t588-t660;
-  local_mass_matrix(18,19) = t664;
-  local_mass_matrix(18,20) = t655;
-  local_mass_matrix(18,21) = t667;
-  local_mass_matrix(18,22) = t670;
-  local_mass_matrix(18,23) = t673;
-  local_mass_matrix(18,24) = t676;
-  local_mass_matrix(19,0) = t92;
-  local_mass_matrix(19,1) = t150;
-  local_mass_matrix(19,2) = t208;
-  local_mass_matrix(19,3) = t232;
-  local_mass_matrix(19,4) = t295;
-  local_mass_matrix(19,5) = t312;
-  local_mass_matrix(19,6) = t290;
-  local_mass_matrix(19,7) = t424;
-  local_mass_matrix(19,8) = t464;
-  local_mass_matrix(19,9) = t494;
-  local_mass_matrix(19,10) = t518;
-  local_mass_matrix(19,11) = t527;
-  local_mass_matrix(19,12) = t515;
-  local_mass_matrix(19,13) = t562;
-  local_mass_matrix(19,14) = t573;
-  local_mass_matrix(19,15) = t582;
-  local_mass_matrix(19,16) = t609;
-  local_mass_matrix(19,17) = t604;
-  local_mass_matrix(19,18) = t664;
-  local_mass_matrix(19,19) = t584-t585+t586+t659-t588-t660;
-  local_mass_matrix(19,20) = t628;
-  local_mass_matrix(19,21) = t673;
-  local_mass_matrix(19,22) = t678;
-  local_mass_matrix(19,23) = t679;
-  local_mass_matrix(19,24) = t680;
-  local_mass_matrix(20,0) = t97;
-  local_mass_matrix(20,1) = t153;
-  local_mass_matrix(20,2) = t211;
-  local_mass_matrix(20,3) = t233;
-  local_mass_matrix(20,4) = t302;
-  local_mass_matrix(20,5) = t353;
-  local_mass_matrix(20,6) = t343;
-  local_mass_matrix(20,7) = t429;
-  local_mass_matrix(20,8) = t447;
-  local_mass_matrix(20,9) = t439;
-  local_mass_matrix(20,10) = t521;
-  local_mass_matrix(20,11) = t540;
-  local_mass_matrix(20,12) = t536;
-  local_mass_matrix(20,13) = t563;
-  local_mass_matrix(20,14) = t569;
-  local_mass_matrix(20,15) = t567;
-  local_mass_matrix(20,16) = t616;
-  local_mass_matrix(20,17) = t649;
-  local_mass_matrix(20,18) = t655;
-  local_mass_matrix(20,19) = t628;
-  local_mass_matrix(20,20) = t681-t682+t683+6656.0/297675.0*t12-t685
-                            -6656.0/297675.0*t17;
-  local_mass_matrix(20,21) = t658;
-  local_mass_matrix(20,22) = t694;
-  local_mass_matrix(20,23) = t640;
-  local_mass_matrix(20,24) = t701;
-  local_mass_matrix(21,0) = t102;
-  local_mass_matrix(21,1) = t156;
-  local_mass_matrix(21,2) = t214;
-  local_mass_matrix(21,3) = t234;
-  local_mass_matrix(21,4) = t307;
-  local_mass_matrix(21,5) = t356;
-  local_mass_matrix(21,6) = t381;
-  local_mass_matrix(21,7) = t434;
-  local_mass_matrix(21,8) = t469;
-  local_mass_matrix(21,9) = t461;
-  local_mass_matrix(21,10) = t524;
-  local_mass_matrix(21,11) = t541;
-  local_mass_matrix(21,12) = t551;
-  local_mass_matrix(21,13) = t566;
-  local_mass_matrix(21,14) = t576;
-  local_mass_matrix(21,15) = t572;
-  local_mass_matrix(21,16) = t623;
-  local_mass_matrix(21,17) = t652;
-  local_mass_matrix(21,18) = t667;
-  local_mass_matrix(21,19) = t673;
-  local_mass_matrix(21,20) = t658;
-  local_mass_matrix(21,21) = 73216.0/893025.0*t3-73216.0/893025.0*t7+t683+
-                            t704-t685-t705;
-  local_mass_matrix(21,22) = t676;
-  local_mass_matrix(21,23) = t694;
-  local_mass_matrix(21,24) = t711;
-  local_mass_matrix(22,0) = t103;
-  local_mass_matrix(22,1) = t159;
-  local_mass_matrix(22,2) = t217;
-  local_mass_matrix(22,3) = t235;
-  local_mass_matrix(22,4) = t312;
-  local_mass_matrix(22,5) = t361;
-  local_mass_matrix(22,6) = t346;
-  local_mass_matrix(22,7) = t439;
-  local_mass_matrix(22,8) = t472;
-  local_mass_matrix(22,9) = t497;
-  local_mass_matrix(22,10) = t527;
-  local_mass_matrix(22,11) = t544;
-  local_mass_matrix(22,12) = t537;
-  local_mass_matrix(22,13) = t567;
-  local_mass_matrix(22,14) = t577;
-  local_mass_matrix(22,15) = t583;
-  local_mass_matrix(22,16) = t628;
-  local_mass_matrix(22,17) = t655;
-  local_mass_matrix(22,18) = t670;
-  local_mass_matrix(22,19) = t678;
-  local_mass_matrix(22,20) = t694;
-  local_mass_matrix(22,21) = t676;
-  local_mass_matrix(22,22) = t681-t682+t683+73216.0/893025.0*t12-t685
-                            -73216.0/893025.0*t17;
-  local_mass_matrix(22,23) = t680;
-  local_mass_matrix(22,24) = t717;
-  local_mass_matrix(23,0) = t104;
-  local_mass_matrix(23,1) = t162;
-  local_mass_matrix(23,2) = t220;
-  local_mass_matrix(23,3) = t236;
-  local_mass_matrix(23,4) = t317;
-  local_mass_matrix(23,5) = t322;
-  local_mass_matrix(23,6) = t307;
-  local_mass_matrix(23,7) = t444;
-  local_mass_matrix(23,8) = t477;
-  local_mass_matrix(23,9) = t464;
-  local_mass_matrix(23,10) = t530;
-  local_mass_matrix(23,11) = t531;
-  local_mass_matrix(23,12) = t524;
-  local_mass_matrix(23,13) = t568;
-  local_mass_matrix(23,14) = t578;
-  local_mass_matrix(23,15) = t573;
-  local_mass_matrix(23,16) = t633;
-  local_mass_matrix(23,17) = t623;
-  local_mass_matrix(23,18) = t673;
-  local_mass_matrix(23,19) = t679;
-  local_mass_matrix(23,20) = t640;
-  local_mass_matrix(23,21) = t694;
-  local_mass_matrix(23,22) = t680;
-  local_mass_matrix(23,23) = 6656.0/297675.0*t3-6656.0/297675.0*t7+t683+
-                            t704-t685-t705;
-  local_mass_matrix(23,24) = t723;
-  local_mass_matrix(24,0) = 841.0/893025.0*t105;
-  local_mass_matrix(24,1) = 841.0/893025.0*t163;
-  local_mass_matrix(24,2) = 841.0/893025.0*t221;
-  local_mass_matrix(24,3) = 841.0/893025.0*t237;
-  local_mass_matrix(24,4) = t322;
-  local_mass_matrix(24,5) = t366;
-  local_mass_matrix(24,6) = t356;
-  local_mass_matrix(24,7) = t447;
-  local_mass_matrix(24,8) = t482;
-  local_mass_matrix(24,9) = t472;
-  local_mass_matrix(24,10) = t531;
-  local_mass_matrix(24,11) = t547;
-  local_mass_matrix(24,12) = t541;
-  local_mass_matrix(24,13) = t569;
-  local_mass_matrix(24,14) = t579;
-  local_mass_matrix(24,15) = t577;
-  local_mass_matrix(24,16) = t640;
-  local_mass_matrix(24,17) = t658;
-  local_mass_matrix(24,18) = t676;
-  local_mass_matrix(24,19) = t680;
-  local_mass_matrix(24,20) = t701;
-  local_mass_matrix(24,21) = t711;
-  local_mass_matrix(24,22) = t717;
-  local_mass_matrix(24,23) = t723;
-  local_mass_matrix(24,24) = 5408.0/99225.0*t3-5408.0/99225.0*t7+10816.0/
-                            99225.0*t10+5408.0/99225.0*t12-10816.0/99225.0*t15-5408.0/99225.0*t17;
-};
-
-
-template <>
-void FEQ4<2>::get_unit_support_points (std::vector<Point<2> > &unit_points) const {
-  Assert (unit_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       dofs_per_cell));
-
-  unit_points[0] = Point<2>(0,0);
-  unit_points[1] = Point<2>(1,0);
-  unit_points[2] = Point<2>(1,1);
-  unit_points[3] = Point<2>(0,1);
-  unit_points[4] = Point<2>(1./4,0);
-  unit_points[5] = Point<2>(2./4,0);
-  unit_points[6] = Point<2>(3./4,0);
-  unit_points[7] = Point<2>(1,1./4);
-  unit_points[8] = Point<2>(1,2./4);
-  unit_points[9] = Point<2>(1,3./4);
-  unit_points[10] = Point<2>(1./4,1);
-  unit_points[11] = Point<2>(2./4,1);
-  unit_points[12] = Point<2>(3./4,1);
-  unit_points[13] = Point<2>(0,1./4);
-  unit_points[14] = Point<2>(0,2./4);
-  unit_points[15] = Point<2>(0,3./4);
-  unit_points[16] = Point<2>(1./4,1./4);
-  unit_points[17] = Point<2>(3./4,1./4);
-  unit_points[18] = Point<2>(3./4,3./4);
-  unit_points[19] = Point<2>(1./4,3./4);
-  unit_points[20] = Point<2>(1./2,1./4);
-  unit_points[21] = Point<2>(3./4,1./2);
-  unit_points[22] = Point<2>(1./2,3./4);
-  unit_points[23] = Point<2>(1./4,1./2);
-  unit_points[24] = Point<2>(1./2,1./2);
-};
-
-
-template <>
-void FEQ4<2>::get_support_points (const DoFHandler<2>::cell_iterator &cell,
-                                 std::vector<Point<2> >  &support_points) const
-{
-  Assert (support_points.size() == dofs_per_cell,
-         FiniteElementBase<2>::ExcWrongFieldDimension (support_points.size(),
-                                                       dofs_per_cell));
-
-  const double x[4] = { cell->vertex(0)(0),
-                       cell->vertex(1)(0),
-                       cell->vertex(2)(0),
-                       cell->vertex(3)(0)  };
-  const double y[4] = { cell->vertex(0)(1),
-                       cell->vertex(1)(1),
-                       cell->vertex(2)(1),
-                       cell->vertex(3)(1)  };
-
-  const double t1 = 3.0/4.0*x[0];
-  const double t2 = x[1]/4.0;
-  const double t4 = 3.0/4.0*y[0];
-  const double t5 = y[1]/4.0;
-  const double t9 = x[0]/4.0;
-  const double t10 = 3.0/4.0*x[1];
-  const double t12 = y[0]/4.0;
-  const double t13 = 3.0/4.0*y[1];
-  const double t15 = x[2]/4.0;
-  const double t17 = y[2]/4.0;
-  const double t21 = 3.0/4.0*x[2];
-  const double t23 = 3.0/4.0*y[2];
-  const double t25 = 3.0/4.0*x[3];
-  const double t27 = 3.0/4.0*y[3];
-  const double t31 = x[3]/4.0;
-  const double t33 = y[3]/4.0;
-  const double t42 = 3.0/16.0*x[1];
-  const double t44 = 3.0/16.0*x[3];
-  const double t47 = 3.0/16.0*y[1];
-  const double t49 = 3.0/16.0*y[3];
-  const double t51 = 3.0/16.0*x[0];
-  const double t53 = 3.0/16.0*x[2];
-  const double t56 = 3.0/16.0*y[0];
-  const double t58 = 3.0/16.0*y[2];
-  const double t73 = 3.0/8.0*x[0];
-  const double t74 = 3.0/8.0*x[1];
-  const double t75 = x[2]/8.0;
-  const double t76 = x[3]/8.0;
-  const double t78 = 3.0/8.0*y[0];
-  const double t79 = 3.0/8.0*y[1];
-  const double t80 = y[2]/8.0;
-  const double t81 = y[3]/8.0;
-  const double t83 = x[0]/8.0;
-  const double t84 = 3.0/8.0*x[2];
-  const double t86 = y[0]/8.0;
-  const double t87 = 3.0/8.0*y[2];
-  const double t89 = x[1]/8.0;
-  const double t90 = 3.0/8.0*x[3];
-  const double t92 = y[1]/8.0;
-  const double t93 = 3.0/8.0*y[3];
-  support_points[0](0) = x[0];
-  support_points[0](1) = y[0];
-  support_points[1](0) = x[1];
-  support_points[1](1) = y[1];
-  support_points[2](0) = x[2];
-  support_points[2](1) = y[2];
-  support_points[3](0) = x[3];
-  support_points[3](1) = y[3];
-  support_points[4](0) = t1+t2;
-  support_points[4](1) = t4+t5;
-  support_points[5](0) = x[0]/2.0+x[1]/2.0;
-  support_points[5](1) = y[0]/2.0+y[1]/2.0;
-  support_points[6](0) = t9+t10;
-  support_points[6](1) = t12+t13;
-  support_points[7](0) = t10+t15;
-  support_points[7](1) = t13+t17;
-  support_points[8](0) = x[1]/2.0+x[2]/2.0;
-  support_points[8](1) = y[1]/2.0+y[2]/2.0;
-  support_points[9](0) = t2+t21;
-  support_points[9](1) = t5+t23;
-  support_points[10](0) = t15+t25;
-  support_points[10](1) = t17+t27;
-  support_points[11](0) = x[2]/2.0+x[3]/2.0;
-  support_points[11](1) = y[2]/2.0+y[3]/2.0;
-  support_points[12](0) = t21+t31;
-  support_points[12](1) = t23+t33;
-  support_points[13](0) = t1+t31;
-  support_points[13](1) = t4+t33;
-  support_points[14](0) = x[0]/2.0+x[3]/2.0;
-  support_points[14](1) = y[0]/2.0+y[3]/2.0;
-  support_points[15](0) = t9+t25;
-  support_points[15](1) = t12+t27;
-  support_points[16](0) = 9.0/16.0*x[0]+t42+x[2]/16.0+t44;
-  support_points[16](1) = 9.0/16.0*y[0]+t47+y[2]/16.0+t49;
-  support_points[17](0) = t51+9.0/16.0*x[1]+t53+x[3]/16.0;
-  support_points[17](1) = t56+9.0/16.0*y[1]+t58+y[3]/16.0;
-  support_points[18](0) = x[0]/16.0+t42+9.0/16.0*x[2]+t44;
-  support_points[18](1) = y[0]/16.0+t47+9.0/16.0*y[2]+t49;
-  support_points[19](0) = t51+x[1]/16.0+t53+9.0/16.0*x[3];
-  support_points[19](1) = t56+y[1]/16.0+t58+9.0/16.0*y[3];
-  support_points[20](0) = t73+t74+t75+t76;
-  support_points[20](1) = t78+t79+t80+t81;
-  support_points[21](0) = t83+t74+t84+t76;
-  support_points[21](1) = t86+t79+t87+t81;
-  support_points[22](0) = t83+t89+t84+t90;
-  support_points[22](1) = t86+t92+t87+t93;
-  support_points[23](0) = t73+t89+t75+t90;
-  support_points[23](1) = t78+t92+t80+t93;
-  support_points[24](0) = x[0]/4.0+x[1]/4.0+x[2]/4.0+x[3]/4.0;
-  support_points[24](1) = y[0]/4.0+y[1]/4.0+y[2]/4.0+y[3]/4.0;
-};
-
-
-template <>
-void FEQ4<2>::get_face_support_points (const DoFHandler<2>::face_iterator &face,
-                                      std::vector<Point<2> >  &support_points) const {
-  Assert (support_points.size() == dofs_per_face,
-         FiniteElementBase<2>::ExcWrongFieldDimension (support_points.size(),
-                                                       dofs_per_face));
-
-  for (unsigned int vertex=0; vertex<2; ++vertex)
-    support_points[vertex] = face->vertex(vertex);
-  support_points[2] = (3*support_points[0] + support_points[1]) / 4;
-  support_points[3] = (support_points[0] + support_points[1]) / 2;
-  support_points[4] = (support_points[0] + 3*support_points[1]) / 4;
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-// provide dummy implementations of the functions above. the reason is
-// that true implementations would simply be too large (several 10.000
-// lines of code) for today's compilers and computers.
-
-template <>
-FEQ4<3>::FEQ4 () :
-               FEQ1Mapping<3> (1, 3, 9, 27, 1,
-                               std::vector<bool> (1, false))
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-FEQ4<3>::FEQ4 (const int) :
-               FEQ1Mapping<3> (0, 0, 0, 64, 1,
-                               std::vector<bool> (1, true))
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ4<3>::initialize_matrices ()
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-double
-FEQ4<3>::shape_value (const unsigned int,
-                     const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return 0;
-};
-
-
-template <>
-Tensor<1,3>
-FEQ4<3>::shape_grad (const unsigned int,
-                    const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Tensor<1,3>();
-};
-
-
-template <>
-Tensor<2,3>
-FEQ4<3>::shape_grad_grad (const unsigned int,
-                         const Point<3>    &) const
-{
-  Assert (false, ExcNotImplemented());
-  return Tensor<2,3>();
-};
-
-
-template <>
-void
-FEQ4<3>::get_local_mass_matrix (const DoFHandler<3>::cell_iterator &,
-                               FullMatrix<double> &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ4<3>::get_unit_support_points (std::vector<Point<3> > &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ4<3>::get_support_points (const DoFHandler<3>::cell_iterator &,
-                                 std::vector<Point<3> >  &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-template <>
-void FEQ4<3>::get_face_support_points (const DoFHandler<3>::face_iterator &,
-                                      std::vector<Point<3> >  &) const
-{
-  Assert (false, ExcNotImplemented());
-};
-
-
-#endif // deal_II_dimension == 3
-
-
-// explicit instantiations
-
-template class FEQ4<deal_II_dimension>;
-
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3a825f65b041c1579b41802860cd1bd6a5918eab 100644 (file)
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+#include <base/quadrature.h>
+#include <base/polynomial.h>
+#include <base/tensor_product_polynomials.h>
+#include <grid/tria.h>
+#include <grid/tria_iterator.h>
+#include <dofs/dof_accessor.h>
+#include <fe/fe.h>
+#include <fe/mapping.h>
+#include <fe/mapping_q1.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+
+static std::vector<bool> dummy(1,false);
+
+// Embedding matrices (produced by tests/fe/embedding with postprocessing
+
+#if (deal_II_dimension == 1)
+#include "mat_q.1"
+#endif
+
+#if (deal_II_dimension == 2)
+#include "mat_q.2"
+#endif
+
+#if (deal_II_dimension == 3)
+#include "mat_q.3"
+#endif
+
+
+template <int dim>
+FE_Q<dim>::FE_Q (unsigned int degree)
+  :
+  FiniteElement<dim> (FiniteElementData<dim>(get_dpo_vector(degree),1), dummy),
+                       degree(degree),
+                       renumber(dofs_per_cell, 0),
+                       face_renumber(dofs_per_face, 0),
+                       polynomials(degree+1),
+                       poly(0)
+{
+  std::vector<SmartPointer<Polynomial<double> > > v(degree+1);
+  for (unsigned int i=0;i<=degree;++i)
+    {
+      LagrangeEquidistant p(degree, i);
+      polynomials[i] = p;
+      v[i] = &(polynomials[i]);
+    }
+  poly = new TensorProductPolynomials<dim> (v);
+  build_renumbering (*this, degree, renumber);
+
+#if (deal_II_dimension > 1)
+  build_face_renumbering (FiniteElementData<dim-1>(FE_Q<dim-1>::get_dpo_vector(degree),1),
+                         degree,
+                         face_renumber);
+#endif
+
+  Assert (degree <= 10, ExcNotImplemented());
+  
+  if ((dim>1) && (constraint_matrices[degree-1] != 0))
+    interface_constraints.fill (constraint_matrices[degree-1]);
+  else
+    interface_constraints.reinit(0,0);
+  
+  if (embedding0[degree-1] != 0)
+    {
+      prolongation[0].fill (embedding0[degree-1]);
+      prolongation[1].fill (embedding1[degree-1]);
+      if (dim>1)
+       {
+         prolongation[2].fill (embedding2[degree-1]);
+         prolongation[3].fill (embedding3[degree-1]);
+       }
+      if (dim>2)
+       {
+         prolongation[4].fill (embedding4[degree-1]);
+         prolongation[5].fill (embedding5[degree-1]);      
+         prolongation[6].fill (embedding6[degree-1]);
+         prolongation[7].fill (embedding7[degree-1]);
+       }
+    }
+  else
+    for (unsigned int i=0; i<GeometryInfo<dim>::children_per_cell;++i)
+      prolongation[i].reinit(0,0);
+  
+  switch (dim)
+    {
+    case 1:
+      switch (degree)
+       {
+       case 1:
+         restriction[0](0,0) = 1;
+         restriction[1](1,1) = 1;
+         break;
+       case 2:
+         restriction[0](0,0) = 1;
+         restriction[0](2,1) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](1,1) = 1;
+         break;
+       case 3:
+         restriction[0](0,0) = 1;
+         restriction[0](2,3) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](3,2) = 1;
+         break;
+       case 4:
+         restriction[0](0,0) = 1;
+         restriction[0](2,3) = 1;
+         restriction[0](3,1) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](3,0) = 1;
+         restriction[1](4,3) = 1;
+         break;
+       default:
+         for (unsigned int i=0; i<GeometryInfo<dim>::children_per_cell;++i)
+           restriction[i].reinit(0,0);
+       }
+      break;
+    case 2:
+      switch (degree)
+       {
+       case 1:
+         restriction[0](0,0) = 1;
+         restriction[1](1,1) = 1;
+         restriction[2](2,2) = 1;
+         restriction[3](3,3) = 1;
+         break;
+       case 2:
+         restriction[0](0,0) = 1;
+         restriction[0](4,1) = 1;
+         restriction[0](7,3) = 1;
+         restriction[0](8,2) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](4,0) = 1;
+         restriction[1](5,2) = 1;
+         restriction[1](8,3) = 1;
+         restriction[2](2,2) = 1;
+         restriction[2](5,1) = 1;
+         restriction[2](6,3) = 1;
+         restriction[2](8,0) = 1;
+         restriction[3](3,3) = 1;
+         restriction[3](6,2) = 1;
+         restriction[3](7,0) = 1;
+         restriction[3](8,1) = 1;
+         break;
+       case 3:
+         restriction[0](0,0) = 1;
+         restriction[0](4,5) = 1;
+         restriction[0](10,11) = 1;
+         restriction[0](12,15) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](5,4) = 1;
+         restriction[1](6,7) = 1;
+         restriction[1](13,14) = 1;
+         restriction[2](2,2) = 1;
+         restriction[2](7,6) = 1;
+         restriction[2](9,8) = 1;
+         restriction[2](15,12) = 1;
+         restriction[3](3,3) = 1;
+         restriction[3](8,9) = 1;
+         restriction[3](11,10) = 1;
+         restriction[3](14,13) = 1;
+         break;
+       case 4:
+         restriction[0](0,0) = 1;
+         restriction[0](4,5) = 1;
+         restriction[0](5,1) = 1;
+         restriction[0](13,14) = 1;
+         restriction[0](14,3) = 1;
+         restriction[0](16,20) = 1;
+         restriction[0](17,8) = 1;
+         restriction[0](19,11) = 1;
+         restriction[0](20,2) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](5,0) = 1;
+         restriction[1](6,5) = 1;
+         restriction[1](7,8) = 1;
+         restriction[1](8,2) = 1;
+         restriction[1](17,14) = 1;
+         restriction[1](18,20) = 1;
+         restriction[1](20,3) = 1;
+         restriction[1](21,11) = 1;
+         restriction[2](2,2) = 1;
+         restriction[2](8,1) = 1;
+         restriction[2](9,8) = 1;
+         restriction[2](11,3) = 1;
+         restriction[2](12,11) = 1;
+         restriction[2](20,0) = 1;
+         restriction[2](21,5) = 1;
+         restriction[2](23,14) = 1;
+         restriction[2](24,20) = 1;
+         restriction[3](3,3) = 1;
+         restriction[3](10,11) = 1;
+         restriction[3](11,2) = 1;
+         restriction[3](14,0) = 1;
+         restriction[3](15,14) = 1;
+         restriction[3](19,5) = 1;
+         restriction[3](20,1) = 1;
+         restriction[3](22,20) = 1;
+         restriction[3](23,8) = 1;
+         break;
+       default:
+         for (unsigned int i=0; i<GeometryInfo<dim>::children_per_cell;++i)
+           restriction[i].reinit(0,0);
+       }
+      break;
+    case 3:
+      switch (degree)
+       {
+       case 1:
+         restriction[0](0,0) = 1;
+         restriction[1](1,1) = 1;
+         restriction[2](2,2) = 1;
+         restriction[3](3,3) = 1;
+         restriction[4](4,4) = 1;
+         restriction[5](5,5) = 1;
+         restriction[6](6,6) = 1;
+         restriction[7](7,7) = 1;
+         break;
+       case 2:
+         restriction[0](0,0) = 1;
+         restriction[0](8,1) = 1;
+         restriction[0](11,3) = 1;
+         restriction[0](16,4) = 1;
+         restriction[0](20,2) = 1;
+         restriction[0](22,5) = 1;
+         restriction[0](25,7) = 1;
+         restriction[0](26,6) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](8,0) = 1;
+         restriction[1](9,2) = 1;
+         restriction[1](17,5) = 1;
+         restriction[1](20,3) = 1;
+         restriction[1](22,4) = 1;
+         restriction[1](23,6) = 1;
+         restriction[1](26,7) = 1;
+         restriction[2](2,2) = 1;
+         restriction[2](9,1) = 1;
+         restriction[2](10,3) = 1;
+         restriction[2](18,6) = 1;
+         restriction[2](20,0) = 1;
+         restriction[2](23,5) = 1;
+         restriction[2](24,7) = 1;
+         restriction[2](26,4) = 1;
+         restriction[3](3,3) = 1;
+         restriction[3](10,2) = 1;
+         restriction[3](11,0) = 1;
+         restriction[3](19,7) = 1;
+         restriction[3](20,1) = 1;
+         restriction[3](24,6) = 1;
+         restriction[3](25,4) = 1;
+         restriction[3](26,5) = 1;
+         restriction[4](4,4) = 1;
+         restriction[4](12,5) = 1;
+         restriction[4](15,7) = 1;
+         restriction[4](16,0) = 1;
+         restriction[4](21,6) = 1;
+         restriction[4](22,1) = 1;
+         restriction[4](25,3) = 1;
+         restriction[4](26,2) = 1;
+         restriction[5](5,5) = 1;
+         restriction[5](12,4) = 1;
+         restriction[5](13,6) = 1;
+         restriction[5](17,1) = 1;
+         restriction[5](21,7) = 1;
+         restriction[5](22,0) = 1;
+         restriction[5](23,2) = 1;
+         restriction[5](26,3) = 1;
+         restriction[6](6,6) = 1;
+         restriction[6](13,5) = 1;
+         restriction[6](14,7) = 1;
+         restriction[6](18,2) = 1;
+         restriction[6](21,4) = 1;
+         restriction[6](23,1) = 1;
+         restriction[6](24,3) = 1;
+         restriction[6](26,0) = 1;
+         restriction[7](7,7) = 1;
+         restriction[7](14,6) = 1;
+         restriction[7](15,4) = 1;
+         restriction[7](19,3) = 1;
+         restriction[7](21,5) = 1;
+         restriction[7](24,2) = 1;
+         restriction[7](25,0) = 1;
+         restriction[7](26,1) = 1;
+         break;
+       case 3:
+         restriction[0](0,0) = 1;
+         restriction[0](8,9) = 1;
+         restriction[0](14,15) = 1;
+         restriction[0](24,25) = 1;
+         restriction[0](32,35) = 1;
+         restriction[0](40,43) = 1;
+         restriction[0](52,55) = 1;
+         restriction[0](56,63) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](9,8) = 1;
+         restriction[1](10,11) = 1;
+         restriction[1](26,27) = 1;
+         restriction[1](33,34) = 1;
+         restriction[1](41,42) = 1;
+         restriction[1](44,47) = 1;
+         restriction[1](57,62) = 1;
+         restriction[2](2,2) = 1;
+         restriction[2](11,10) = 1;
+         restriction[2](13,12) = 1;
+         restriction[2](28,29) = 1;
+         restriction[2](35,32) = 1;
+         restriction[2](46,45) = 1;
+         restriction[2](49,50) = 1;
+         restriction[2](61,58) = 1;
+         restriction[3](3,3) = 1;
+         restriction[3](12,13) = 1;
+         restriction[3](15,14) = 1;
+         restriction[3](30,31) = 1;
+         restriction[3](34,33) = 1;
+         restriction[3](48,51) = 1;
+         restriction[3](54,53) = 1;
+         restriction[3](60,59) = 1;
+         restriction[4](4,4) = 1;
+         restriction[4](16,17) = 1;
+         restriction[4](22,23) = 1;
+         restriction[4](25,24) = 1;
+         restriction[4](36,39) = 1;
+         restriction[4](42,41) = 1;
+         restriction[4](53,54) = 1;
+         restriction[4](58,61) = 1;
+         restriction[5](5,5) = 1;
+         restriction[5](17,16) = 1;
+         restriction[5](18,19) = 1;
+         restriction[5](27,26) = 1;
+         restriction[5](37,38) = 1;
+         restriction[5](43,40) = 1;
+         restriction[5](45,46) = 1;
+         restriction[5](59,60) = 1;
+         restriction[6](6,6) = 1;
+         restriction[6](19,18) = 1;
+         restriction[6](21,20) = 1;
+         restriction[6](29,28) = 1;
+         restriction[6](39,36) = 1;
+         restriction[6](47,44) = 1;
+         restriction[6](51,48) = 1;
+         restriction[6](63,56) = 1;
+         restriction[7](7,7) = 1;
+         restriction[7](20,21) = 1;
+         restriction[7](23,22) = 1;
+         restriction[7](31,30) = 1;
+         restriction[7](38,37) = 1;
+         restriction[7](50,49) = 1;
+         restriction[7](55,52) = 1;
+         restriction[7](62,57) = 1;
+         break;
+       case 4:
+         restriction[0](0,0) = 1;
+         restriction[0](8,9) = 1;
+         restriction[0](9,1) = 1;
+         restriction[0](17,18) = 1;
+         restriction[0](18,3) = 1;
+         restriction[0](32,33) = 1;
+         restriction[0](33,4) = 1;
+         restriction[0](44,48) = 1;
+         restriction[0](45,12) = 1;
+         restriction[0](47,15) = 1;
+         restriction[0](48,2) = 1;
+         restriction[0](62,66) = 1;
+         restriction[0](63,36) = 1;
+         restriction[0](65,21) = 1;
+         restriction[0](66,5) = 1;
+         restriction[0](89,93) = 1;
+         restriction[0](90,30) = 1;
+         restriction[0](92,42) = 1;
+         restriction[0](93,7) = 1;
+         restriction[0](98,111) = 1;
+         restriction[0](99,75) = 1;
+         restriction[0](101,57) = 1;
+         restriction[0](102,24) = 1;
+         restriction[0](107,84) = 1;
+         restriction[0](108,39) = 1;
+         restriction[0](110,27) = 1;
+         restriction[0](111,6) = 1;
+         restriction[1](1,1) = 1;
+         restriction[1](9,0) = 1;
+         restriction[1](10,9) = 1;
+         restriction[1](11,12) = 1;
+         restriction[1](12,2) = 1;
+         restriction[1](35,36) = 1;
+         restriction[1](36,5) = 1;
+         restriction[1](45,18) = 1;
+         restriction[1](46,48) = 1;
+         restriction[1](48,3) = 1;
+         restriction[1](49,15) = 1;
+         restriction[1](63,33) = 1;
+         restriction[1](64,66) = 1;
+         restriction[1](66,4) = 1;
+         restriction[1](67,21) = 1;
+         restriction[1](71,75) = 1;
+         restriction[1](72,24) = 1;
+         restriction[1](74,39) = 1;
+         restriction[1](75,6) = 1;
+         restriction[1](99,93) = 1;
+         restriction[1](100,111) = 1;
+         restriction[1](102,30) = 1;
+         restriction[1](103,57) = 1;
+         restriction[1](108,42) = 1;
+         restriction[1](109,84) = 1;
+         restriction[1](111,7) = 1;
+         restriction[1](112,27) = 1;
+         restriction[2](2,2) = 1;
+         restriction[2](12,1) = 1;
+         restriction[2](13,12) = 1;
+         restriction[2](15,3) = 1;
+         restriction[2](16,15) = 1;
+         restriction[2](38,39) = 1;
+         restriction[2](39,6) = 1;
+         restriction[2](48,0) = 1;
+         restriction[2](49,9) = 1;
+         restriction[2](51,18) = 1;
+         restriction[2](52,48) = 1;
+         restriction[2](74,36) = 1;
+         restriction[2](75,5) = 1;
+         restriction[2](77,75) = 1;
+         restriction[2](78,24) = 1;
+         restriction[2](81,42) = 1;
+         restriction[2](82,84) = 1;
+         restriction[2](84,7) = 1;
+         restriction[2](85,27) = 1;
+         restriction[2](108,33) = 1;
+         restriction[2](109,66) = 1;
+         restriction[2](111,4) = 1;
+         restriction[2](112,21) = 1;
+         restriction[2](117,93) = 1;
+         restriction[2](118,111) = 1;
+         restriction[2](120,30) = 1;
+         restriction[2](121,57) = 1;
+         restriction[3](3,3) = 1;
+         restriction[3](14,15) = 1;
+         restriction[3](15,2) = 1;
+         restriction[3](18,0) = 1;
+         restriction[3](19,18) = 1;
+         restriction[3](41,42) = 1;
+         restriction[3](42,7) = 1;
+         restriction[3](47,9) = 1;
+         restriction[3](48,1) = 1;
+         restriction[3](50,48) = 1;
+         restriction[3](51,12) = 1;
+         restriction[3](80,84) = 1;
+         restriction[3](81,39) = 1;
+         restriction[3](83,27) = 1;
+         restriction[3](84,6) = 1;
+         restriction[3](92,33) = 1;
+         restriction[3](93,4) = 1;
+         restriction[3](95,93) = 1;
+         restriction[3](96,30) = 1;
+         restriction[3](107,66) = 1;
+         restriction[3](108,36) = 1;
+         restriction[3](110,21) = 1;
+         restriction[3](111,5) = 1;
+         restriction[3](116,111) = 1;
+         restriction[3](117,75) = 1;
+         restriction[3](119,57) = 1;
+         restriction[3](120,24) = 1;
+         restriction[4](4,4) = 1;
+         restriction[4](20,21) = 1;
+         restriction[4](21,5) = 1;
+         restriction[4](29,30) = 1;
+         restriction[4](30,7) = 1;
+         restriction[4](33,0) = 1;
+         restriction[4](34,33) = 1;
+         restriction[4](53,57) = 1;
+         restriction[4](54,24) = 1;
+         restriction[4](56,27) = 1;
+         restriction[4](57,6) = 1;
+         restriction[4](65,9) = 1;
+         restriction[4](66,1) = 1;
+         restriction[4](68,66) = 1;
+         restriction[4](69,36) = 1;
+         restriction[4](90,18) = 1;
+         restriction[4](91,93) = 1;
+         restriction[4](93,3) = 1;
+         restriction[4](94,42) = 1;
+         restriction[4](101,48) = 1;
+         restriction[4](102,12) = 1;
+         restriction[4](104,111) = 1;
+         restriction[4](105,75) = 1;
+         restriction[4](110,15) = 1;
+         restriction[4](111,2) = 1;
+         restriction[4](113,84) = 1;
+         restriction[4](114,39) = 1;
+         restriction[5](5,5) = 1;
+         restriction[5](21,4) = 1;
+         restriction[5](22,21) = 1;
+         restriction[5](23,24) = 1;
+         restriction[5](24,6) = 1;
+         restriction[5](36,1) = 1;
+         restriction[5](37,36) = 1;
+         restriction[5](54,30) = 1;
+         restriction[5](55,57) = 1;
+         restriction[5](57,7) = 1;
+         restriction[5](58,27) = 1;
+         restriction[5](66,0) = 1;
+         restriction[5](67,9) = 1;
+         restriction[5](69,33) = 1;
+         restriction[5](70,66) = 1;
+         restriction[5](72,12) = 1;
+         restriction[5](73,75) = 1;
+         restriction[5](75,2) = 1;
+         restriction[5](76,39) = 1;
+         restriction[5](102,18) = 1;
+         restriction[5](103,48) = 1;
+         restriction[5](105,93) = 1;
+         restriction[5](106,111) = 1;
+         restriction[5](111,3) = 1;
+         restriction[5](112,15) = 1;
+         restriction[5](114,42) = 1;
+         restriction[5](115,84) = 1;
+         restriction[6](6,6) = 1;
+         restriction[6](24,5) = 1;
+         restriction[6](25,24) = 1;
+         restriction[6](27,7) = 1;
+         restriction[6](28,27) = 1;
+         restriction[6](39,2) = 1;
+         restriction[6](40,39) = 1;
+         restriction[6](57,4) = 1;
+         restriction[6](58,21) = 1;
+         restriction[6](60,30) = 1;
+         restriction[6](61,57) = 1;
+         restriction[6](75,1) = 1;
+         restriction[6](76,36) = 1;
+         restriction[6](78,12) = 1;
+         restriction[6](79,75) = 1;
+         restriction[6](84,3) = 1;
+         restriction[6](85,15) = 1;
+         restriction[6](87,42) = 1;
+         restriction[6](88,84) = 1;
+         restriction[6](111,0) = 1;
+         restriction[6](112,9) = 1;
+         restriction[6](114,33) = 1;
+         restriction[6](115,66) = 1;
+         restriction[6](120,18) = 1;
+         restriction[6](121,48) = 1;
+         restriction[6](123,93) = 1;
+         restriction[6](124,111) = 1;
+         restriction[7](7,7) = 1;
+         restriction[7](26,27) = 1;
+         restriction[7](27,6) = 1;
+         restriction[7](30,4) = 1;
+         restriction[7](31,30) = 1;
+         restriction[7](42,3) = 1;
+         restriction[7](43,42) = 1;
+         restriction[7](56,21) = 1;
+         restriction[7](57,5) = 1;
+         restriction[7](59,57) = 1;
+         restriction[7](60,24) = 1;
+         restriction[7](83,15) = 1;
+         restriction[7](84,2) = 1;
+         restriction[7](86,84) = 1;
+         restriction[7](87,39) = 1;
+         restriction[7](93,0) = 1;
+         restriction[7](94,33) = 1;
+         restriction[7](96,18) = 1;
+         restriction[7](97,93) = 1;
+         restriction[7](110,9) = 1;
+         restriction[7](111,1) = 1;
+         restriction[7](113,66) = 1;
+         restriction[7](114,36) = 1;
+         restriction[7](119,48) = 1;
+         restriction[7](120,12) = 1;
+         restriction[7](122,111) = 1;
+         restriction[7](123,75) = 1;
+         break;
+       default:
+         for (unsigned int i=0; i<GeometryInfo<dim>::children_per_cell;++i)
+           restriction[i].reinit(0,0);
+       }
+      break;
+    default:
+      Assert (false,ExcNotImplemented());
+    }
+}
+
+
+template <int dim>
+FE_Q<dim>::~FE_Q ()
+{
+  delete poly;
+}
+
+
+template <int dim>
+FiniteElement<dim> *
+FE_Q<dim>::clone() const
+{
+  return new FE_Q<dim>(degree);
+}
+
+
+template <int dim>
+void
+FE_Q<dim>::get_unit_support_points (std::vector<Point<dim> > &points) const
+{
+  compute_support_points (points, degree, renumber);
+}
+
+    
+template <int dim>
+void
+FE_Q<dim>::get_unit_face_support_points (std::vector<Point<dim-1> > &points) const
+{
+  FE_Q<dim-1>::compute_support_points (points, degree, face_renumber);
+}
+
+
+#if deal_II_dimension == 1
+
+template <>
+void
+FE_Q<1>::get_unit_face_support_points (std::vector<Point<0> > &points) const
+{
+  points.resize(0);
+}
+
+#endif
+//----------------------------------------------------------------------
+// Auxilliary functions
+//----------------------------------------------------------------------
+
+
+template <int dim>
+void
+FE_Q<dim>::compute_support_points (std::vector<Point<dim> >& support_points,
+                                  unsigned int degree,
+                                  const std::vector<unsigned int>& renumber)
+{
+                                  // number of points: (degree+1)^dim
+  unsigned int n= degree+1;
+  for (unsigned int i=1;i<dim;++i)
+    n *= degree+1;
+
+  support_points.resize(n);
+  
+  double step = 1./degree;
+  Point<dim> p;
+  
+  unsigned int k=0;
+  for (unsigned int iz=0;iz <= ((dim>2) ? degree : 0) ; ++iz)
+    for (unsigned int iy=0;iy <= ((dim>1) ? degree : 0) ; ++iy)
+      for (unsigned int ix=0;ix<=degree;++ix)
+        {
+         p(0) = ix * step;
+         if (dim>1)
+           p(1) = iy * step;
+         if (dim>2)
+           p(2) = iz * step;
+         
+         support_points[renumber[k++]] = p;
+       }
+}
+
+
+template <int dim>
+std::vector<unsigned int>
+FE_Q<dim>::get_dpo_vector(unsigned int deg)
+{
+  std::vector<unsigned int> dpo(dim+1, 1);
+  for (unsigned int i=1; i<dpo.size(); ++i)
+    dpo[i]=dpo[i-1]*(deg-1);
+  return dpo;
+}
+
+
+
+template <int dim>
+void
+FE_Q<dim>::build_renumbering (const FiniteElementData<dim> &fe_data,
+                             unsigned int degree,
+                             std::vector<unsigned int> &renumber)
+{
+  const unsigned int n = degree+1;
+  
+  if (degree > 0)
+    for (unsigned int i=0;i<GeometryInfo<dim>::vertices_per_cell;++i)
+      {
+       unsigned int index = 0;
+                                        // Find indices of vertices.
+                                        // Unfortunately, somebody
+                                        // switched the upper corner
+                                        // points of a quad. The same
+                                        // person decided to find a very
+                                        // creative numbering of the
+                                        // vertices of a hexahedron.
+                                        // Therefore, this looks quite
+                                        // sophisticated.
+       switch (dim)
+         {
+         case 1:
+           if (i==1)
+             index += degree;
+           break;
+         case 2:
+           switch (i)
+             {
+             case 1:
+               index += degree;
+               break;
+             case 3:
+               index += n*degree;
+               break;
+             case 2:
+               index += n*degree+degree;
+               break;
+             }
+           break;
+         case 3:
+           switch (i)
+             {
+             case 1:
+               index += degree;
+               break;
+             case 4:
+               index += n*degree;
+               break;
+             case 5:
+               index += n*degree+degree;
+               break;
+             case 3:
+               index += n*n*degree;
+               break;
+             case 2:
+               index += n*n*degree + degree;
+               break;
+             case 7:
+               index += n*n*degree + n*degree;
+               break;
+             case 6:
+               index += n*n*degree + n*degree+degree;
+               break;
+             }
+           break;
+           
+         default:
+           Assert(false, ExcNotImplemented());
+         }
+       
+       renumber[index] = i;
+      }
+  else
+    renumber[0] = 0;
+  
+                                  // Lines and higher
+  if (degree > 1)
+    {
+      for (int i=0;i< (int) GeometryInfo<dim>::lines_per_cell;++i)
+       {
+         unsigned int index = fe_data.first_line_index + i*fe_data.dofs_per_line;
+         unsigned int incr = 0;
+         unsigned int tensorstart = 0;
+                                          // This again looks quite
+                                          // strange because of the odd
+                                          // numbering scheme.
+         switch (i+100*dim)
+           {
+             // lines in x-direction
+           case 100:
+           case 200: case 202:
+           case 300: case 302: case 304: case 306:
+             incr = 1;
+             break;
+             // lines in y-direction
+           case 201: case 203:
+           case 308: case 309: case 310: case 311:
+             incr = n;
+             break;
+             // lines in z-direction
+           case 301: case 303: case 305: case 307:
+             incr = n*n;
+             break;
+           default:
+             Assert(false, ExcNotImplemented());
+           }
+         switch (i+100*dim)
+           {
+             // x=y=z=0
+           case 100:
+           case 200: case 203:
+           case 300: case 303: case 308:
+             tensorstart = 0;
+             break;
+             // x=1 y=z=0
+           case 201:
+           case 301: case 309:
+             tensorstart = degree;
+             break;
+             // y=1 x=z=0
+           case 202:
+           case 304: case 307:
+             tensorstart = n*degree;
+             break;
+             // x=z=1 y=0
+           case 310:
+             tensorstart = n*n*degree+degree;
+             break;
+             // z=1 x=y=0
+           case 302: case 311:
+             tensorstart = n*n*degree;
+             break;
+             // x=y=1 z=0
+           case 305:
+             tensorstart = n*degree+degree;
+             break;
+             // y=z=1 x=0
+           case 306:
+             tensorstart = n*n*n-n;
+             break;
+           default:
+             Assert(false, ExcNotImplemented());             
+           }
+
+         for (unsigned int jx = 1; jx<degree ;++jx)
+           {
+             unsigned int tensorindex = tensorstart + jx * incr;
+             renumber[tensorindex] = index++;
+           }
+       }
+
+      for (int i=0;i< (int) GeometryInfo<dim>::quads_per_cell;++i)
+       {
+         unsigned int index = fe_data.first_quad_index+i*fe_data.dofs_per_quad;
+         unsigned int tensorstart = 0;
+         unsigned int incx = 0;
+         unsigned int incy = 0;
+         switch (i)
+           {
+             case 0:
+               tensorstart = 0; incx = 1;
+               if (dim==2)
+                 incy = n;
+               else
+                 incy = n*n;
+               break;
+             case 1:
+               tensorstart = n*degree; incx = 1; incy = n*n;
+               break;
+             case 2:
+               tensorstart = 0; incx = 1; incy = n;
+               break;
+             case 3:
+               tensorstart = degree; incx = n; incy = n*n;
+               break;
+             case 4:
+               tensorstart = n*n*degree; incx = 1; incy = n;
+               break;
+             case 5:
+               tensorstart = 0; incx = n; incy = n*n;
+               break;
+           default:
+             Assert(false, ExcNotImplemented());             
+           }
+         
+         for (unsigned int jy = 1; jy<degree; jy++)
+           for (unsigned int jx = 1; jx<degree ;++jx)
+             {
+               unsigned int tensorindex = tensorstart
+                 + jx * incx + jy * incy;
+               renumber[tensorindex] = index++;
+             }
+       }
+
+      for (int i=0;i< (int) GeometryInfo<dim>::hexes_per_cell;++i)
+       {
+         unsigned int index = fe_data.first_hex_index;
+
+         for (unsigned int jz = 1; jz<degree; jz++)
+           for (unsigned int jy = 1; jy<degree; jy++)
+             for (unsigned int jx = 1; jx<degree; jx++)
+               {
+                 unsigned int tensorindex =
+                   jx + jy * n + jz * n*n;
+                 renumber[tensorindex]=index++;
+               }  
+       }
+      
+    }
+}
+
+
+template <int dim>
+void
+FE_Q<dim>::build_face_renumbering (const FiniteElementData<dim-1> &fe_data,
+                                  unsigned int degree,
+                                  std::vector<unsigned int>& numbering)
+{
+  FE_Q<dim-1>::build_renumbering (fe_data, degree, numbering); 
+}
+
+#if (deal_II_dimension == 1)
+
+template <>
+void
+FE_Q<1>::build_face_renumbering (const FiniteElementData<0> &,
+                                unsigned int,
+                                std::vector<unsigned int>&)
+{}
+#endif
+
+
+template <int dim>
+UpdateFlags
+FE_Q<dim>::update_once (UpdateFlags flags) const
+{
+  UpdateFlags out = update_default;
+
+  if (flags & update_values)
+    out |= update_values;
+
+  return out;
+}
+
+
+template <int dim>
+UpdateFlags
+FE_Q<dim>::update_each (UpdateFlags flags) const
+{
+  UpdateFlags out = update_default;
+
+  if (flags & update_gradients)
+    out |= update_gradients | update_covariant_transformation;
+  if (flags & update_second_derivatives)
+    out |= update_second_derivatives | update_covariant_transformation;
+
+  return out;
+}
+
+
+//----------------------------------------------------------------------
+// Data field initialization
+//----------------------------------------------------------------------
+template <int dim>
+Mapping<dim>::InternalDataBase*
+FE_Q<dim>::get_data (const UpdateFlags update_flags,
+                    const Mapping<dim>& mapping,
+                    const Quadrature<dim> &quadrature) const
+{
+  InternalData* data = new InternalData;
+  std::vector<double> values(0);
+  std::vector<Tensor<1,dim> > grads(0);
+  std::vector<Tensor<2,dim> > grad_grads(0);
+  
+  data->update_once = update_once(update_flags);
+  data->update_each = update_each(update_flags);
+  data->update_flags = data->update_once | data->update_each;
+
+  const UpdateFlags flags(data->update_flags);
+  
+  if (flags & update_values)
+    {
+      values.resize (dofs_per_cell);
+      data->shape_values.resize(dofs_per_cell,
+                               std::vector<double>(quadrature.n_quadrature_points));
+    }
+
+  if (flags & update_gradients)
+    {
+      grads.resize (dofs_per_cell);
+      data->shape_gradients.resize(dofs_per_cell,
+                                  std::vector<Tensor<1,dim> >(quadrature.n_quadrature_points));
+    }
+
+  if (flags & update_second_derivatives)
+    data->initialize (this, mapping, quadrature);
+  
+  if (flags & (update_values | update_gradients))
+    for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+      {
+       poly->compute(quadrature.point(i), values, grads, grad_grads);
+       for (unsigned int k=0;k<dofs_per_cell; ++k)
+         {
+           if (flags & update_values)
+             data->shape_values[renumber[k]][i] = values[k];
+           if (flags & update_gradients)
+             data->shape_gradients[renumber[k]][i] = grads[k];
+         }
+      }
+  return data;
+}
+
+
+
+//----------------------------------------------------------------------
+// Fill data of FEValues
+//----------------------------------------------------------------------
+template <int dim>
+void
+FE_Q<dim>::fill_fe_values (const Mapping<dim>                   &mapping,
+                          const DoFHandler<dim>::cell_iterator &cell,
+                          const Quadrature<dim>                &quadrature,
+                          Mapping<dim>::InternalDataBase      &mapping_data,
+                          Mapping<dim>::InternalDataBase      &fedata,
+                          FEValuesData<dim>                    &data) const
+{
+  InternalData &fe_data = dynamic_cast<InternalData &> (fedata);
+  
+  const UpdateFlags flags(fe_data.current_update_flags());
+
+  for (unsigned int k=0;k<dofs_per_cell;++k)
+    {
+      for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+       {
+         if (flags & update_values)
+           data.shape_values(k,i)
+             = fe_data.shape_values[k][i];
+       }
+      
+      if (flags & update_gradients)
+       mapping.transform_covariant(data.shape_gradients[k],
+                                   fe_data.shape_gradients[k],
+                                   mapping_data, 0);
+    }
+  if (flags & update_second_derivatives)
+    compute_2nd (mapping, cell, 0, mapping_data, fe_data, data);
+  
+  fe_data.first_cell = false;
+}
+
+
+
+template <int dim>
+void
+FE_Q<dim>::fill_fe_face_values (const Mapping<dim> &mapping,
+                               const DoFHandler<dim>::cell_iterator &cell,
+                               const unsigned int face,
+                               const Quadrature<dim-1>& quadrature,
+                               Mapping<dim>::InternalDataBase& mapping_data,
+                               Mapping<dim>::InternalDataBase& fedata,
+                               FEValuesData<dim>& data) const
+{
+  InternalData &fe_data = dynamic_cast<InternalData &> (fedata);
+  unsigned int offset = face * quadrature.n_quadrature_points;
+  
+  const UpdateFlags flags(fe_data.update_once | fe_data.update_each);
+
+  for (unsigned int k=0;k<dofs_per_cell;++k)
+    {
+      for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+       {
+         if (flags & update_values)
+           data.shape_values(k,i)
+             = fe_data.shape_values[k][i+offset];
+       }
+      
+      if (flags & update_gradients)
+       mapping.transform_covariant(data.shape_gradients[k],
+                                   fe_data.shape_gradients[k],
+                                   mapping_data, offset);
+      if (flags & update_second_derivatives)
+       compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    }
+  
+  fe_data.first_cell = false;
+}
+
+
+
+template <int dim>
+void
+FE_Q<dim>::fill_fe_subface_values (const Mapping<dim> &mapping,
+                                  const DoFHandler<dim>::cell_iterator &cell,
+                                  const unsigned int face,
+                                  const unsigned int subface,
+                                  const Quadrature<dim-1>& quadrature,
+                                  Mapping<dim>::InternalDataBase& mapping_data,
+                                  Mapping<dim>::InternalDataBase& fedata,
+                                  FEValuesData<dim>& data) const
+{
+  InternalData &fe_data = dynamic_cast<InternalData &> (fedata);
+  unsigned int offset = (face * GeometryInfo<dim>::subfaces_per_face
+                        + subface) * quadrature.n_quadrature_points;
+
+  const UpdateFlags flags(fe_data.update_once | fe_data.update_each);
+
+  for (unsigned int k=0;k<dofs_per_cell;++k)
+    {
+      for (unsigned int i=0;i<quadrature.n_quadrature_points;++i)
+       {
+         if (flags & update_values)
+           data.shape_values(k,i)
+             = fe_data.shape_values[k][i+offset];
+       }
+      
+      if (flags & update_gradients)
+       mapping.transform_covariant(data.shape_gradients[k],
+                                   fe_data.shape_gradients[k],
+                                   mapping_data, offset);
+      if (flags & update_second_derivatives)
+       compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    }
+  
+  fe_data.first_cell = false;
+}
+
+
+template <int dim>
+unsigned int
+FE_Q<dim>::memory_consumption () const
+{
+  Assert (false, ExcNotImplemented ());
+  return 0;
+}
+
+
+template FE_Q<deal_II_dimension>;
index a04b42917e70737bcece9c4f0611482c6eba102a..b5ba860806b068b00f5920c78377f56bae881fb5 100644 (file)
 
 
 #include <base/memory_consumption.h>
-#include <fe/fe_system.h>
+#include <base/quadrature.h>
 #include <grid/tria.h>
 #include <grid/tria_iterator.h>
 #include <dofs/dof_accessor.h>
+#include <fe/mapping.h>
+#include <fe/fe_system.h>
+#include <fe/fe_values.h>
+
 
 // if necessary try to work around a bug in the IBM xlC compiler
 #ifdef XLC_WORK_AROUND_STD_BUG
@@ -36,6 +40,431 @@ FESystem<dim>::~FESystem ()
 };
 
 
+template <int dim>
+FiniteElement<dim>*
+FESystem<dim>::clone() const
+{
+  FiniteElement<dim> *fe=0;
+  switch (n_base_elements())
+    {
+      case 1:
+           fe=new FESystem(base_element(0),
+                           element_multiplicity(0));
+      case 2:
+           fe=new FESystem(base_element(0),
+                           element_multiplicity(0),
+                           base_element(1),
+                           element_multiplicity(1));
+      case 3:
+           fe=new FESystem(base_element(0),
+                           element_multiplicity(0),
+                           base_element(1),
+                           element_multiplicity(1),
+                           base_element(2),
+                           element_multiplicity(2));
+      default:
+           Assert(false, ExcNotImplemented());
+    }
+  return fe;
+}
+
+
+template <int dim>
+void FESystem<dim>::get_unit_support_points (
+  typename std::vector<Point<dim> > &unit_support_points) const
+{
+  unit_support_points.resize(dofs_per_cell);
+  
+  typename std::vector<Point<dim> > base_unit_support_points (base_element(0).dofs_per_cell);
+  unsigned int comp = 0;
+  for (unsigned int base_el=0 ; base_el<n_base_elements(); ++base_el)
+    {
+      const unsigned int base_element_dofs_per_cell
+       =base_element(base_el).dofs_per_cell;
+      base_element(base_el).get_unit_support_points (base_unit_support_points);
+      if (base_unit_support_points.size()==0)
+       {
+         base_unit_support_points.resize(0);
+         return;
+       }
+      
+      Assert(base_unit_support_points.size()==base_element_dofs_per_cell,
+            ExcInternalError());
+      for (unsigned int n = 0 ; n < element_multiplicity(base_el); ++n, ++comp)
+       for (unsigned int i=0; i<base_element_dofs_per_cell; ++i)
+         unit_support_points[component_to_system_index(comp,i)]
+           = base_unit_support_points[i];
+    }
+}
+
+
+
+template <int dim>
+void FESystem<dim>::get_unit_face_support_points (
+  typename std::vector<Point<dim-1> > &unit_support_points) const
+{
+  unit_support_points.resize(dofs_per_face);
+  
+  typename std::vector<Point<dim-1> > base_unit_support_points (base_element(0).dofs_per_cell);
+  unsigned int comp = 0;
+  for (unsigned int base_el=0 ; base_el<n_base_elements(); ++base_el)
+    {
+      const unsigned int base_element_dofs_per_face
+       =base_element(base_el).dofs_per_face;
+      base_element(base_el).get_unit_face_support_points (base_unit_support_points);
+      
+                                      // for elements that don't have
+                                      // unit support points this
+                                      // function is not implemented
+      Assert(base_unit_support_points.size()==base_element_dofs_per_face,
+            ExcNotImplemented());
+      for (unsigned int n = 0 ; n < element_multiplicity(base_el); ++n, ++comp)
+       for (unsigned int i=0; i<base_element_dofs_per_face; ++i)
+         unit_support_points[face_component_to_system_index(comp,i)]
+           = base_unit_support_points[i];
+    }
+}
+
+
+template <int dim>
+UpdateFlags
+FESystem<dim>::update_once (UpdateFlags flags) const
+{
+  UpdateFlags out = update_default;
+  for (unsigned int base_no=0; base_no<n_base_elements(); ++base_no)
+    {
+      out |= base_element(base_no).update_once(flags);
+    }
+  return out;
+}
+
+
+template <int dim>
+UpdateFlags
+FESystem<dim>::update_each (UpdateFlags flags) const
+{
+  UpdateFlags out = update_default;
+  for (unsigned int base_no=0; base_no<n_base_elements(); ++base_no)
+    {
+      out |= base_element(base_no).update_each(flags);
+    }
+  return out;
+}
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+FESystem<dim>::get_data (UpdateFlags flags,
+                        const Mapping<dim>& mapping,
+                        const Quadrature<dim>& quadrature) const
+{
+  InternalData* data = new InternalData(n_base_elements());
+
+  data->second_flag = flags & update_second_derivatives;
+
+                                  // Make sure that this object
+                                  // computes 2nd derivatives itself
+  if (data->second_flag)
+    {
+      flags = UpdateFlags (flags ^ update_second_derivatives);
+      data->initialize (this, mapping, quadrature);
+    }
+  
+  
+  for (unsigned int base_no=0; base_no<n_base_elements(); ++base_no)
+    {
+      typename Mapping<dim>::InternalDataBase *base_fe_data_base =
+       base_element(base_no).get_data(flags, mapping, quadrature);
+      FiniteElementBase<dim>::InternalDataBase *base_fe_data =
+       dynamic_cast<typename FiniteElementBase<dim>::InternalDataBase *>
+       (base_fe_data_base);
+      
+      data->set_fe_data(base_no, base_fe_data);
+      data->update_once|=base_fe_data->update_once;
+      data->update_each|=base_fe_data->update_each;
+      
+                                      // The FEValuesData @p{data}
+                                      // given to the
+                                      // @p{fill_fe_values} function
+                                      // includes the FEValuesDatas
+                                      // of the FESystem. Here the
+                                      // FEValuesDatas @p{*base_data}
+                                      // needs to be created that
+                                      // later will be given to the
+                                      // @p{fill_fe_values} functions
+                                      // of the base
+                                      // elements. @p{base_data->initialize}
+                                      // cannot be called earlier as
+                                      // in the @p{fill_fe_values}
+                                      // function called for the
+                                      // first cell. This is because
+                                      // the initialize function
+                                      // needs the update flags as
+                                      // argument.
+                                      //
+                                      // The pointers @p{base_data}
+                                      // are stored into the
+                                      // FESystem::InternalData
+                                      // @p{data}, similar to the
+                                      // storing of the
+                                      // @p{base_fe_data}s.
+      FEValuesData<dim> *base_data=new FEValuesData<dim>();
+      data->set_fe_values_data(base_no, base_data);
+    }
+  data->update_flags=data->update_once | data->update_each;
+  Assert(data->update_once==update_once(flags), ExcInternalError());
+  Assert(data->update_each==update_each(flags), ExcInternalError());
+  return data;
+}
+
+
+
+template <int dim>
+void
+FESystem<dim>::fill_fe_values (const Mapping<dim>                   &mapping,
+                              const DoFHandler<dim>::cell_iterator &cell,
+                              const Quadrature<dim>                &quadrature,
+                              Mapping<dim>::InternalDataBase      &mapping_data,
+                              Mapping<dim>::InternalDataBase      &fe_data,
+                              FEValuesData<dim>                    &data) const
+{
+  const unsigned int minus_1=static_cast<unsigned int> (-1);
+  compute_fill(mapping, cell, minus_1, minus_1,
+              quadrature, mapping_data, fe_data, data);
+}
+
+
+template <int dim>
+void
+FESystem<dim>::fill_fe_face_values (const Mapping<dim>                   &mapping,
+                                   const DoFHandler<dim>::cell_iterator &cell,
+                                   const unsigned int                    face_no,
+                                   const Quadrature<dim-1>              &quadrature,
+                                   Mapping<dim>::InternalDataBase      &mapping_data,
+                                   Mapping<dim>::InternalDataBase      &fe_data,
+                                   FEValuesData<dim>                    &data) const
+{
+  const unsigned int minus_1=static_cast<unsigned int> (-1);
+  compute_fill(mapping, cell, face_no, minus_1,
+              quadrature, mapping_data, fe_data, data);
+
+}
+
+
+
+template <int dim>
+void
+FESystem<dim>::fill_fe_subface_values (const Mapping<dim>                   &mapping,
+                                      const DoFHandler<dim>::cell_iterator &cell,
+                                      const unsigned int                    face_no,
+                                      const unsigned int                    sub_no,
+                                      const Quadrature<dim-1>              &quadrature,
+                                      Mapping<dim>::InternalDataBase      &mapping_data,
+                                      Mapping<dim>::InternalDataBase      &fe_data,
+                                      FEValuesData<dim>                    &data) const
+{
+  compute_fill(mapping, cell, face_no, sub_no,
+              quadrature, mapping_data, fe_data, data);
+}
+
+
+
+template <int dim>
+template <int dim_1>
+void
+FESystem<dim>::compute_fill (const Mapping<dim>                   &mapping,
+                            const DoFHandler<dim>::cell_iterator &cell,
+                            const unsigned int                    face_no,
+                            const unsigned int                    sub_no,
+                            const Quadrature<dim_1>              &quadrature,
+                            Mapping<dim>::InternalDataBase      &mapping_data,
+                            Mapping<dim>::InternalDataBase      &fedata,
+                            FEValuesData<dim>                    &data) const
+{       
+  InternalData& fe_data = dynamic_cast<InternalData&> (fedata);
+  
+                                  // Either dim_1==dim (fill_fe_values)
+                                  // or dim_1==dim-1 (fill_fe_(sub)face_values)
+  Assert(dim_1==dim || dim_1==dim-1, ExcInternalError());
+  const UpdateFlags flags(dim_1==dim ?
+                         fe_data.current_update_flags() :
+                         fe_data.update_flags);
+
+
+  if (flags & (update_values | update_gradients))
+    {
+      if (fe_data.first_cell)
+       {
+                                          // Initialize the FEValuesDatas
+                                          // for the base elements.
+                                          // Originally this is the task
+                                          // of FEValues::FEValues() but
+                                          // the latter initializes
+                                          // the FEValuesDatas only of the
+                                          // FESystem but not the
+                                          // FEValuesDatas needed by the
+                                          // base elements.
+         for (unsigned int base_no=0; base_no<n_base_elements(); ++base_no)
+           {
+                                              // Pointer needed to get
+                                              // the update flags of the
+                                              // base element
+             Mapping<dim>::InternalDataBase &base_fe_data=
+               fe_data.get_fe_data(base_no);
+             
+                                              // compute update flags ...
+             const UpdateFlags base_update_flags(mapping_data.update_flags
+                                                 | base_fe_data.update_flags);
+             
+                                              // Initialize the FEValuesDatas
+                                              // for the base elements.
+             FEValuesData<dim> &base_data=fe_data.get_fe_values_data(base_no);
+             const FiniteElement<dim> &base_fe=base_element(base_no);
+             base_data.initialize(quadrature.n_quadrature_points,
+                                  base_fe.dofs_per_cell,
+                                  base_update_flags);
+           }
+       }
+      
+                                      // fill_fe_face_values needs
+                                      // argument Quadrature<dim-1>
+                                      // for both cases
+                                      // dim_1==dim-1 and
+                                      // dim_1=dim. Hence the
+                                      // following workaround
+      const Quadrature<dim>   *cell_quadrature = 0;
+      const Quadrature<dim-1> *face_quadrature = 0;
+      
+                                      // static cast to the
+                                      // common base class of
+                                      // quadrature being either
+                                      // Quadrature<dim> or
+                                      // Quadrature<dim-1>:
+      const Subscriptor* quadrature_base_pointer = &quadrature;
+
+      const unsigned int minus_1=static_cast<unsigned int> (-1);  
+      if (face_no==minus_1)
+       {
+         Assert(dim_1==dim, ExcDimensionMismatch(dim_1,dim));
+         cell_quadrature=dynamic_cast<const Quadrature<dim> *>(quadrature_base_pointer);
+         Assert (cell_quadrature != 0, ExcInternalError());
+       }
+      else
+       {
+         Assert(dim_1==dim-1, ExcDimensionMismatch(dim_1,dim-1));
+         face_quadrature=dynamic_cast<const Quadrature<dim-1> *>(quadrature_base_pointer);
+         Assert (face_quadrature != 0, ExcInternalError());
+       }
+
+      
+      for (unsigned int base_no=0, comp=0; base_no<n_base_elements(); ++base_no)
+       {
+         const FiniteElement<dim> &base_fe=base_element(base_no);
+         FiniteElementBase<dim>::InternalDataBase &base_fe_data=
+           fe_data.get_fe_data(base_no);
+
+                                          // Make sure that in the
+                                          // case of fill_fe_values
+                                          // the data is only copied
+                                          // from base_data to data
+                                          // if base_data is
+                                          // changed. therefore use
+                                          // fe_fe_data.current_update_flags()
+         
+                                          // for the case of
+                                          // fill_fe_(sub)face_values
+                                          // the data needs to be
+                                          // copied from base_data to
+                                          // data on each face,
+                                          // therefore use
+                                          // base_fe_data.update_flags.
+         
+                                          // Store these flags into
+                                          // base_flags before
+                                          // calling
+                                          // base_fe.fill_fe_([sub]face_)values
+                                          // as the latter changes
+                                          // the return value of
+                                          // base_fe_data.current_update_flags()
+         const UpdateFlags base_flags(dim_1==dim ?
+                                      base_fe_data.current_update_flags() :
+                                      base_fe_data.update_flags);
+         
+         FEValuesData<dim> &base_data=fe_data.get_fe_values_data(base_no);
+
+         if (face_no==minus_1)
+           base_fe.fill_fe_values(mapping, cell,
+                                  *cell_quadrature, mapping_data, base_fe_data, base_data);
+         else if (sub_no==minus_1)
+           base_fe.fill_fe_face_values(mapping, cell, face_no,
+                                       *face_quadrature, mapping_data, base_fe_data, base_data);
+         else
+           base_fe.fill_fe_subface_values(mapping, cell, face_no, sub_no,
+                                          *face_quadrature, mapping_data, base_fe_data, base_data);
+
+         for (unsigned int m=0; m<element_multiplicity(base_no); ++m, ++comp)
+           for (unsigned int point=0; point<quadrature.n_quadrature_points; ++point)
+             for (unsigned int k=0; k<base_fe.dofs_per_cell; ++k)
+               {
+                 const unsigned int system_index=component_to_system_index(comp,k);
+                 if (base_flags & update_values)
+                   data.shape_values(system_index, point)=
+                     base_data.shape_values(k,point);
+                 
+                 if (base_flags & update_gradients)
+                   data.shape_gradients[system_index][point]=
+                     base_data.shape_gradients[k][point];
+               
+                 if (base_flags & update_second_derivatives)
+                   data.shape_2nd_derivatives[system_index][point]=
+                     base_data.shape_2nd_derivatives[k][point];
+               }
+       }
+  
+
+      if (fe_data.first_cell)
+       {
+         fe_data.first_cell = false;
+         for (unsigned int base_no=0; base_no<n_base_elements(); ++base_no)
+           Assert(fe_data.get_fe_data(base_no).first_cell==false, ExcInternalError());
+         
+                                          // delete FEValuesDatas that
+                                          // are not needed any more
+         for (unsigned int base_no=0; base_no<n_base_elements(); ++base_no)
+           {
+                                              // Pointer needed to get
+                                              // the update flags of the
+                                              // base element
+             Mapping<dim>::InternalDataBase &base_fe_data=
+               fe_data.get_fe_data(base_no);
+             
+                                              // compute update flags ...
+             UpdateFlags base_flags_each(
+               dim_1==dim ?
+               mapping_data.update_each | base_fe_data.update_each :
+               mapping_data.update_flags | base_fe_data.update_flags);
+             
+             if (base_flags_each==update_default)
+               fe_data.delete_fe_values_data(base_no);
+           }
+       }
+    }
+  if (fe_data.second_flag)
+    {
+      unsigned int offset = 0;
+      if (face_no != static_cast<unsigned int> (-1))
+       offset = (sub_no == static_cast<unsigned int> (-1))
+                ? face_no * quadrature.n_quadrature_points
+                :(face_no * GeometryInfo<dim>::subfaces_per_face
+                  + sub_no) * quadrature.n_quadrature_points;  
+      compute_2nd (mapping, cell, offset, mapping_data, fe_data, data);
+    }
+}
+
+
+
 template <int dim>
 void
 FESystem<dim>::build_cell_table()
@@ -478,6 +907,29 @@ void FESystem<dim>::initialize ()
 {
   build_cell_table();
   build_face_table();
+  
+  // Check if matrices are void.
+
+  bool do_restriction = true;
+  bool do_prolongation = true;
+
+  for (unsigned int i=0;i<n_base_elements(); ++i)
+    {
+      if (base_element(i).restriction[0].n() == 0)
+       do_restriction = false;
+      if (base_element(i).prolongation[0].n() == 0)
+       do_prolongation = false;
+    }
+  
+  // Void matrices if not defined for all base elements
+
+  if (!do_restriction)
+    for (unsigned int i=0;i<GeometryInfo<dim>::children_per_cell;++i)
+      restriction[i].reinit(0,0);
+  if (!do_prolongation)
+    for (unsigned int i=0;i<GeometryInfo<dim>::children_per_cell;++i)
+      prolongation[i].reinit(0,0);
+       
                                   // distribute the matrices of the base
                                   // finite elements to the matrices of
                                   // this object
@@ -490,189 +942,95 @@ void FESystem<dim>::initialize ()
                                         // intermixing of subelements
        for (unsigned int child=0; child<GeometryInfo<dim>::children_per_cell; ++child)
          {
-           restriction[child] (component_to_system_index (component,i),
-                               component_to_system_index (component, j))
-             = base_element(component_to_base_table[component]).restrict(child)(i,j);
-           prolongation[child] (component_to_system_index (component,i),
-                                component_to_system_index (component, j))
-             = base_element(component_to_base_table[component]).prolongate(child)(i,j);
+           if (do_restriction)
+             restriction[child] (component_to_system_index (component,i),
+                                 component_to_system_index (component, j))
+               = base_element(component_to_base_table[component]).restrict(child)(i,j);
+           if (do_prolongation)
+             prolongation[child] (component_to_system_index (component,i),
+                                  component_to_system_index (component, j))
+               = base_element(component_to_base_table[component]).prolongate(child)(i,j);
          };
 
 
                                   // now set up the interface constraints.
                                   // this is kind'o hairy, so don't try
                                   // to do it dimension independent
-  build_interface_constraints ();
-};
-
-
-#if deal_II_dimension == 1
-
-template <>
-FiniteElementData<1>
-FESystem<1>::multiply_dof_numbers (const FiniteElementData<1> &fe_data,
-                                  const unsigned int          N)
-{
-  return FiniteElementData<1> (fe_data.dofs_per_vertex * N,
-                              fe_data.dofs_per_line * N,
-                              fe_data.n_transform_functions(),
-                              fe_data.n_components() * N);
-};
-
-
-template <>
-FiniteElementData<1>
-FESystem<1>::multiply_dof_numbers (const FiniteElementData<1> &fe1,
-                                  const unsigned int          N1,
-                                  const FiniteElementData<1> &fe2,
-                                  const unsigned int          N2)
-{
-  return FiniteElementData<1> (fe1.dofs_per_vertex * N1 + fe2.dofs_per_vertex * N2 ,
-                              fe1.dofs_per_line * N1 + fe2.dofs_per_line * N2 ,
-                              fe1.n_transform_functions(),
-                              fe1.n_components() * N1 + fe2.n_components() * N2 );
-};
-
-
-template <>
-FiniteElementData<1>
-FESystem<1>::multiply_dof_numbers (const FiniteElementData<1> &fe1,
-                                  const unsigned int          N1,
-                                  const FiniteElementData<1> &fe2,
-                                  const unsigned int          N2,
-                                  const FiniteElementData<1> &fe3,
-                                  const unsigned int          N3)
-{
-  return FiniteElementData<1> (fe1.dofs_per_vertex * N1
-                              + fe2.dofs_per_vertex * N2
-                              + fe3.dofs_per_vertex * N3,
-                              fe1.dofs_per_line * N1
-                              + fe2.dofs_per_line * N2
-                              + fe3.dofs_per_line * N3,
-                              fe1.n_transform_functions(),
-                              fe1.n_components() * N1
-                              + fe2.n_components() * N2
-                              + fe3.n_components() * N3);
-};
-
-#endif
-
-
-#if deal_II_dimension == 2
 
-template <>
-FiniteElementData<2>
-FESystem<2>::multiply_dof_numbers (const FiniteElementData<2> &fe_data,
-                                  const unsigned int          N)
-{
-  return FiniteElementData<2> (fe_data.dofs_per_vertex * N,
-                              fe_data.dofs_per_line * N,
-                              fe_data.dofs_per_quad * N,
-                              fe_data.n_transform_functions(),
-                              fe_data.n_components() * N);
+                                  // TODO: there's an assertion thrown for
+                                  // dim=3 and for FESystem(FE_Q<dim> (3), 2) and for
+                                  // FESystem<dim>(FE_Q<dim> (1), 2, FE_Q<dim> (3), 1)
+                                  // and for FESystem<dim>(FE_Q<dim> (4), 2))
+  build_interface_constraints ();
 };
 
-template <>
-FiniteElementData<2>
-FESystem<2>::multiply_dof_numbers (const FiniteElementData<2> &fe1,
-                                  const unsigned int          N1,
-                                  const FiniteElementData<2> &fe2,
-                                  const unsigned int          N2)
-{
-  return FiniteElementData<2> (fe1.dofs_per_vertex * N1 + fe2.dofs_per_vertex * N2 ,
-                              fe1.dofs_per_line * N1 + fe2.dofs_per_line * N2 ,
-                              fe1.dofs_per_quad * N1 + fe2.dofs_per_quad * N2 ,
-                              fe1.n_transform_functions(),
-                              fe1.n_components() * N1 + fe2.n_components() * N2 );
-};
 
 
-template <>
-FiniteElementData<2>
-FESystem<2>::multiply_dof_numbers (const FiniteElementData<2> &fe1,
-                                  const unsigned int          N1,
-                                  const FiniteElementData<2> &fe2,
-                                  const unsigned int          N2,
-                                  const FiniteElementData<2> &fe3,
-                                  const unsigned int          N3)
+template <int dim>
+FiniteElementData<dim>
+FESystem<dim>::multiply_dof_numbers (const FiniteElementData<dim> &fe_data,
+                                    const unsigned int            N)
 {
-  return FiniteElementData<2> (fe1.dofs_per_vertex * N1
-                              + fe2.dofs_per_vertex * N2
-                              + fe3.dofs_per_vertex * N3 ,
-                              fe1.dofs_per_line * N1
-                              + fe2.dofs_per_line * N2
-                              + fe3.dofs_per_line * N3 ,
-                              fe1.dofs_per_quad * N1
-                              + fe2.dofs_per_quad * N2
-                              + fe3.dofs_per_quad * N3 ,
-                              fe1.n_transform_functions(),
-                              fe1.n_components() * N1
-                              + fe2.n_components() * N2
-                              + fe3.n_components() * N3 );
+  std::vector<unsigned int> dpo;
+  dpo.push_back(fe_data.dofs_per_vertex * N);
+  dpo.push_back(fe_data.dofs_per_line * N);
+  if (dim>1) dpo.push_back(fe_data.dofs_per_quad * N);
+  if (dim>2) dpo.push_back(fe_data.dofs_per_hex * N);
+  
+  return FiniteElementData<dim> (dpo, fe_data.n_components() * N);
 };
 
-#endif
-
 
-#if deal_II_dimension == 3
 
-template <>
-FiniteElementData<3>
-FESystem<3>::multiply_dof_numbers (const FiniteElementData<3> &fe_data,
-                                  const unsigned int          N)
+template <int dim>
+FiniteElementData<dim>
+FESystem<dim>::multiply_dof_numbers (const FiniteElementData<dim> &fe1,
+                                    const unsigned int            N1,
+                                    const FiniteElementData<dim> &fe2,
+                                    const unsigned int            N2)
 {
-  return FiniteElementData<3> (fe_data.dofs_per_vertex * N,
-                              fe_data.dofs_per_line * N,
-                              fe_data.dofs_per_quad * N,
-                              fe_data.dofs_per_hex * N,
-                              fe_data.n_transform_functions(),
-                              fe_data.n_components() * N);
+  std::vector<unsigned int> dpo;
+  dpo.push_back(fe1.dofs_per_vertex * N1 + fe2.dofs_per_vertex * N2);
+  dpo.push_back(fe1.dofs_per_line * N1 + fe2.dofs_per_line * N2);
+  if (dim>1) dpo.push_back(fe1.dofs_per_quad * N1 + fe2.dofs_per_quad * N2);
+  if (dim>2) dpo.push_back(fe1.dofs_per_hex * N1 + fe2.dofs_per_hex * N2);
+  
+  return FiniteElementData<dim> (dpo,
+                                fe1.n_components() * N1 +
+                                fe2.n_components() * N2);
 };
 
-template <>
-FiniteElementData<3>
-FESystem<3>::multiply_dof_numbers (const FiniteElementData<3> &fe1,
-                                  const unsigned int          N1,
-                                  const FiniteElementData<3> &fe2,
-                                  const unsigned int          N2)
-{
-  return FiniteElementData<3> (fe1.dofs_per_vertex * N1 + fe2.dofs_per_vertex * N2 ,
-                              fe1.dofs_per_line * N1 + fe2.dofs_per_line * N2 ,
-                              fe1.dofs_per_quad * N1 + fe2.dofs_per_quad * N2 ,
-                              fe1.dofs_per_hex * N1 + fe2.dofs_per_hex * N2 ,
-                              fe1.n_transform_functions(),
-                              fe1.n_components() * N1 + fe2.n_components() * N2 );
-};
 
 
-template <>
-FiniteElementData<3>
-FESystem<3>::multiply_dof_numbers (const FiniteElementData<3> &fe1,
-                                  const unsigned int          N1,
-                                  const FiniteElementData<3> &fe2,
-                                  const unsigned int          N2,
-                                  const FiniteElementData<3> &fe3,
-                                  const unsigned int          N3)
+template <int dim>
+FiniteElementData<dim>
+FESystem<dim>::multiply_dof_numbers (const FiniteElementData<dim> &fe1,
+                                    const unsigned int            N1,
+                                    const FiniteElementData<dim> &fe2,
+                                    const unsigned int            N2,
+                                    const FiniteElementData<dim> &fe3,
+                                    const unsigned int            N3)
 {
-  return FiniteElementData<3> (fe1.dofs_per_vertex * N1
-                              + fe2.dofs_per_vertex * N2
-                              + fe3.dofs_per_vertex * N3 ,
-                              fe1.dofs_per_line * N1
-                              + fe2.dofs_per_line * N2
-                              + fe3.dofs_per_line * N3 ,
-                              fe1.dofs_per_quad * N1
-                              + fe2.dofs_per_quad * N2
-                              + fe3.dofs_per_quad * N3 ,
-                              fe1.dofs_per_hex * N1
-                              + fe2.dofs_per_hex * N2
-                              + fe3.dofs_per_hex * N3 ,
-                              fe1.n_transform_functions(),
-                              fe1.n_components() * N1
-                              + fe2.n_components() * N2
-                              + fe3.n_components() * N3 );
+  std::vector<unsigned int> dpo;
+  dpo.push_back(fe1.dofs_per_vertex * N1 +
+               fe2.dofs_per_vertex * N2 +
+               fe3.dofs_per_vertex * N3);
+  dpo.push_back(fe1.dofs_per_line * N1 +
+               fe2.dofs_per_line * N2 +
+               fe3.dofs_per_line * N3);
+  if (dim>1) dpo.push_back(fe1.dofs_per_quad * N1 +
+                          fe2.dofs_per_quad * N2 +
+                          fe3.dofs_per_quad * N3);
+  if (dim>2) dpo.push_back(fe1.dofs_per_hex * N1 +
+                          fe2.dofs_per_hex * N2 +
+                          fe3.dofs_per_hex * N3);
+  
+  return FiniteElementData<dim> (dpo,
+                                fe1.n_components() * N1 +
+                                fe2.n_components() * N2 +
+                                fe3.n_components() * N3);
 };
 
-#endif
 
 
 template <int dim>
@@ -730,370 +1088,45 @@ FESystem<dim>::compute_restriction_is_additive_flags (const FiniteElement<dim> &
 
 
 template <int dim>
-double
-FESystem<dim>::shape_value (const unsigned int i,
-                           const Point<dim>  &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  std::pair<unsigned,unsigned> comp = system_to_component_index(i);
-  
-  return base_element(component_to_base_table[comp.first])
-    .shape_value(comp.second, p);
-};
-
-
-template <int dim>
-Tensor<1,dim>
-FESystem<dim>::shape_grad (const unsigned int  i,
-                          const Point<dim>   &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-  std::pair<unsigned,unsigned> comp = system_to_component_index(i);
-  
-  return base_element(component_to_base_table[comp.first])
-    .shape_grad(comp.second, p);
-};
-
-
-template <int dim>
-Tensor<2,dim>
-FESystem<dim>::shape_grad_grad (const unsigned int  i,
-                               const Point<dim>   &p) const
-{
-  Assert((i<dofs_per_cell), ExcIndexRange(i, 0, dofs_per_cell));
-
-
-  std::pair<unsigned,unsigned> comp = system_to_component_index(i);
-  
-  return base_element(component_to_base_table[comp.first])
-    .shape_grad_grad(comp.second, p);
-};
-
-
-template <int dim>
-void FESystem<dim>::get_unit_support_points (
-  typename std::vector<Point<dim> > &unit_support_points) const
-{
-  Assert(unit_support_points.size() == dofs_per_cell,
-        typename FiniteElementBase<dim>::
-        ExcWrongFieldDimension (unit_support_points.size(),
-                                dofs_per_cell));
-
-  std::vector<Point<dim> > base_unit_support_points (base_element(0).dofs_per_cell);
-  unsigned int component = 0;
-  for (unsigned int base_el=0 ; base_el<n_base_elements(); ++base_el)
-    {
-      const unsigned int base_element_dofs_per_cell
-       =base_element(base_el).dofs_per_cell;
-      base_unit_support_points.resize(base_element_dofs_per_cell);
-      base_element(base_el).get_unit_support_points (base_unit_support_points);
-      for (unsigned int n = 0 ; n < element_multiplicity(base_el); ++n)
-       {
-         for (unsigned int i=0; i<base_element_dofs_per_cell; ++i)
-           {
-             unit_support_points[component_to_system_index(component,i)]
-               = base_unit_support_points[i];
-           }
-         ++component;
-       }
-    }
-
-                                  // An alternative version
-
-                                  // base unit support points
-//   vector<vector<Point<dim> > > base_us_points(n_base_elements());
-//   for (unsigned int base_el=0 ; base_el<n_base_elements(); ++base_el)
-//     {
-//       const unsigned int base_element_dofs_per_cell
-//     =base_element(base_el).dofs_per_cell;
-
-//       base_us_points[base_el].resize(base_element_dofs_per_cell);
-//       base_element(base_el).get_unit_support_points (base_us_points[base_el]);
-//     }
-
-//   for (unsigned int i=0; i<dofs_per_cell; ++i)
-//     {
-//       const unsigned int comp=system_to_component_index(i).first,
-//                  base_dof=system_to_component_index(i).second,
-//                   base_el=component_to_base_table[comp];
-      
-//       unit_support_points[i]=base_us_points[base_el][base_dof];
-//    }
-};
-
-
-template <int dim>
-void FESystem<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       typename std::vector<Point<dim> > &support_points) const
-{
-  Assert(support_points.size() == dofs_per_cell,
-        typename FiniteElementBase<dim>::
-        ExcWrongFieldDimension (support_points.size(),
-                                dofs_per_cell));
-
-  std::vector<Point<dim> > base_support_points (base_element(0).dofs_per_cell);
-  unsigned int component = 0;
-  for (unsigned int base_el=0 ; base_el<n_base_elements(); ++base_el)
-    {
-      const unsigned int base_element_dofs_per_cell
-       =base_element(base_el).dofs_per_cell;
-      
-      base_support_points.resize(base_element_dofs_per_cell);
-      base_element(base_el).get_support_points (cell, base_support_points);
-      for (unsigned int n = 0 ; n < element_multiplicity(base_el); ++n)
-       {
-         for (unsigned int i=0; i<base_element_dofs_per_cell; ++i)
-           {
-             support_points[component_to_system_index(component,i)]
-               = base_support_points[i];
-           }
-         ++component;
-       }
-    }
-};
-
-
-template <int dim>
-void FESystem<dim>::get_face_support_points (const typename DoFHandler<dim>::face_iterator & face,
-                                            typename std::vector<Point<dim> > & support_points) const
-{
-  Assert (support_points.size() == dofs_per_face,
-         typename FiniteElementBase<dim>::
-         ExcWrongFieldDimension (support_points.size(),
-                                 dofs_per_face));
-
-  std::vector<Point<dim> > base_support_points (base_element(0).dofs_per_face);
-  unsigned int comp = 0;
-  for (unsigned int base=0 ; base<n_base_elements(); ++base)
-    {
-      base_support_points.resize(base_element(base).dofs_per_face);
-      base_element(base).get_face_support_points (face, base_support_points);
-      for (unsigned int inbase = 0 ; inbase < element_multiplicity(base); ++inbase)
-       {
-         for (unsigned int i=0; i<base_element(base).dofs_per_face; ++i)
-           {
-             support_points[face_component_to_system_index(comp,i)]
-               = base_support_points[i];
-           }
-         
-         ++comp;
-       }
-    }
-}
-
-
-template <int dim>
-void FESystem<dim>::get_local_mass_matrix (const typename DoFHandler<dim>::cell_iterator &cell,
-                                          FullMatrix<double>  &local_mass_matrix) const
-{
-  Assert (local_mass_matrix.n() == dofs_per_cell,
-         typename FiniteElementBase<dim>::
-         ExcWrongFieldDimension(local_mass_matrix.n(),
-                                dofs_per_cell));
-  Assert (local_mass_matrix.m() == dofs_per_cell,
-         typename FiniteElementBase<dim>::
-         ExcWrongFieldDimension(local_mass_matrix.m(),
-                                dofs_per_cell));
-
-                                  // track which component we are
-                                  // presently working with, since we
-                                  // only have the number of the base
-                                  // element and the number within
-                                  // its multiplicity
-  unsigned int component = 0;  
-  for (unsigned int base_el=0; base_el<n_base_elements(); ++base_el)
-    {
-                                      // first get the local mass matrix for
-                                      // the base object
-      const unsigned int base_element_dofs_per_cell=base_element(base_el).dofs_per_cell;
-      FullMatrix<double> base_mass_matrix (base_element_dofs_per_cell,
-                                          base_element_dofs_per_cell);
-      base_element(base_el).get_local_mass_matrix (cell, base_mass_matrix);
-      
-                                      // now distribute it to the mass matrix
-                                      // of this object
-      const unsigned int el_multiplicity=element_multiplicity(base_el);
-      for (unsigned int n=0; n<el_multiplicity; ++n)
-       {
-         for (unsigned int i=0; i<base_element_dofs_per_cell; ++i)
-           for (unsigned int j=0; j<base_element_dofs_per_cell; ++j)
-                                              // only fill diagonals of the blocks
-             local_mass_matrix (component_to_system_index(component,i),
-                                component_to_system_index(component,j))
-               = base_mass_matrix (i,j);
-         ++component;
-       };
-    };
-  Assert (component == n_components(), ExcInternalError());
-};
-
-
-template <int dim>
-Point<dim> FESystem<dim>::transform_unit_to_real_cell (
-  const typename DoFHandler<dim>::cell_iterator &cell,
-  const Point<dim> &p) const
-{
-  return base_elements[0].first->transform_unit_to_real_cell(cell, p);
-};
-
-
-template <int dim>
-Point<dim> FESystem<dim>::transform_real_to_unit_cell (
-  const typename DoFHandler<dim>::cell_iterator &cell,
-  const Point<dim> &p) const
-{
-  return base_elements[0].first->transform_real_to_unit_cell(cell, p);
-};
-
-
-template <int dim>
-double FESystem<dim>::shape_value_transform (const unsigned int i,
-                                            const Point<dim>  &p) const
-{
-  return base_elements[0].first->shape_value_transform(i,p);
-};
-
-
-template <int dim>
-Tensor<1,dim> FESystem<dim>::shape_grad_transform (const unsigned int i,
-                                                  const Point<dim>  &p) const
-{
-  return base_elements[0].first->shape_grad_transform (i, p);
-};
-
-
-template <int dim>
-void FESystem<dim>::get_face_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       typename std::vector<double>      &face_jacobi_determinants) const
-{
-  base_elements[0].first->get_face_jacobians (face, unit_points,
-                                             face_jacobi_determinants);
-};
-
-
-template <int dim>
-void FESystem<dim>::get_subface_jacobians (const typename DoFHandler<dim>::face_iterator &face,
-                                          const unsigned int           subface_no,
-                                          const typename std::vector<Point<dim-1> > &unit_points,
-                                          typename std::vector<double>      &face_jacobi_determinants) const
+unsigned int
+FESystem<dim>::memory_consumption () const 
 {
-  base_elements[0].first->get_subface_jacobians (face, subface_no, unit_points,
-                                                face_jacobi_determinants);
+                                 // neglect size of data stored in
+                                 // @p{base_elements} due to some
+                                 // problems with teh
+                                 // compiler. should be neglectable
+                                 // after all, considering the size
+                                 // of the data of the subelements
+  unsigned int mem = (FiniteElement<dim>::memory_consumption () +
+                    sizeof (base_elements));
+  for (unsigned int i=0; i<base_elements.size(); ++i)
+    mem += MemoryConsumption::memory_consumption (*base_elements[i].first);
+  return mem;
 };
 
 
 template <int dim>
-void FESystem<dim>::get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       const unsigned int          face_no,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       typename std::vector<Point<dim> >         &normal_vectors) const
-{
-  base_elements[0].first->get_normal_vectors (cell, face_no, unit_points,
-                                             normal_vectors);
-};
+FESystem<dim>::InternalData::InternalData(const unsigned int n_base_elements):
+               base_fe_datas(n_base_elements),
+               base_fe_values_datas(n_base_elements)
+{}
 
 
-template <int dim>
-void FESystem<dim>::get_normal_vectors (const typename DoFHandler<dim>::cell_iterator &cell,
-                                       const unsigned int          face_no,
-                                       const unsigned int          subface_no,
-                                       const typename std::vector<Point<dim-1> > &unit_points,
-                                       typename std::vector<Point<dim> >         &normal_vectors) const
-{
-  base_elements[0].first->get_normal_vectors (cell, face_no, subface_no, unit_points,
-                                             normal_vectors);
-};
-
 
 template <int dim>
-void
-FESystem<dim>::fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                              const typename std::vector<Point<dim> >            &unit_points,
-                              typename std::vector<Tensor<2,dim> >               &jacobians,
-                              const bool              compute_jacobians,
-                              typename std::vector<Tensor<3,dim> > &jacobians_grad,
-                              const bool              compute_jacobians_grad,
-                              typename std::vector<Point<dim> > &support_points,
-                              const bool           compute_support_points,
-                              typename std::vector<Point<dim> > &q_points,
-                              const bool           compute_q_points,
-                              const FullMatrix<double>  &shape_values_transform,
-                              const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grad_transform) const
+FESystem<dim>::InternalData::~InternalData()
 {
-                                  // if we are to compute the support
-                                  // points, then we need to get them
-                                  // from each base element. the
-                                  // following variable is used as
-                                  // temporary
-  std::vector<Point<dim> > supp(compute_support_points ?
-                               base_elements[0].first->dofs_per_cell :
-                               0);
-
-  base_elements[0].first->fill_fe_values (cell, unit_points, jacobians, compute_jacobians,
-                                         jacobians_grad, compute_jacobians_grad,
-                                         supp, compute_support_points,
-                                         q_points, compute_q_points,
-                                         shape_values_transform, shape_grad_transform);
+  for (unsigned int i=0; i<base_fe_datas.size(); ++i)
+    if (base_fe_datas[i])
+      delete base_fe_datas[i];
   
-  if (compute_support_points)
-    {
-                                      // for the first base element, we
-                                      // have obtained the support
-                                      // points above already
-      unsigned int component = 0;
-      for (unsigned int m=0 ; m < element_multiplicity(0) ; ++ m)
-       {
-         for (unsigned int i=0 ; i < base_element(0).dofs_per_cell ; ++i)
-           support_points[component_to_system_index(component,i)] = supp[i];
-         ++component;
-       }
-
-                                      // if there are more base
-                                      // elements, we still have to
-                                      // get the support points from
-                                      // them
-      for (unsigned int base=1 ; base < n_base_elements() ; ++base)
-       {
-         supp.resize(base_elements[base].first->dofs_per_cell);
-         base_elements[base].first->fill_fe_values (cell, unit_points, jacobians, false,
-                                                    jacobians_grad, false,
-                                                    supp, true,
-                                                    q_points, false,
-                                                    shape_values_transform, shape_grad_transform);
-         
-         for (unsigned int m=0 ; m < element_multiplicity(base) ; ++ m)
-           {
-             for (unsigned int i=0 ; i < base_element(base).dofs_per_cell ; ++i)
-               support_points[component_to_system_index(component,i)] = supp[i];
-             ++component;
-           }
-       }    
-    }
+  for (unsigned int i=0; i<base_fe_values_datas.size(); ++i)
+    if (base_fe_values_datas[i])
+      delete base_fe_values_datas[i];
 }
 
 
 
-template <int dim>
-unsigned int
-FESystem<dim>::memory_consumption () const 
-{
-                                  // neglect size of data stored in
-                                  // @p{base_elements} due to some
-                                  // problems with teh
-                                  // compiler. should be neglectable
-                                  // after all, considering the size
-                                  // of the data of the subelements
-  unsigned int mem = (FiniteElement<dim>::memory_consumption () +
-                     sizeof (base_elements));
-  for (unsigned int i=0; i<base_elements.size(); ++i)
-    mem += MemoryConsumption::memory_consumption (*base_elements[i].first);
-  return mem;
-};
-
 
 
 // explicit instantiations
index 5bac6fe5e9011ede20c5236fc9cda2bdf6121c64..09c77b4fb8ac9c25c47dde4415fcf15eb1d3ac5b 100644 (file)
 #include <base/quadrature.h>
 #include <lac/full_matrix.h>
 #include <lac/vector.h>
-#include <grid/persistent_tria.h>
+#include <grid/tria.h>
+#include <grid/grid_generator.h>
 #include <grid/tria_iterator.h>
 #include <fe/fe_tools.h>
 #include <fe/fe.h>
 #include <fe/fe_values.h>
+#include <fe/mapping_q1.h>
 #include <dofs/dof_handler.h>
 #include <dofs/dof_accessor.h>
 
@@ -52,10 +54,18 @@ void FETools::get_interpolation_matrix(const FiniteElement<dim> &fe1,
   fe2.get_unit_support_points (fe2_support_points);
   Quadrature<dim> fe2_support_points_quadrature(fe2_support_points,
                                                phantom_weights);
-  
-  FEValues<dim> fe_values(
-    fe1, fe2_support_points_quadrature, update_values);
 
+                                  // This is a bad workaround as we
+                                  // can't ask the FEs for their shape
+                                  // values any more.
+                                  // TODO: do this better.
+  Triangulation<dim> tria;
+  DoFHandler<dim> dof_handler(tria);
+  GridGenerator::hyper_cube(tria);
+  dof_handler.distribute_dofs(fe1);
+  MappingQ1<dim> mapping_q1;
+  FEValues<dim> fe_values(mapping_q1, fe1, fe2_support_points_quadrature, update_values);
+  fe_values.reinit(dof_handler.begin_active());
   
   for (unsigned int i=0; i<fe2.dofs_per_cell; ++i)     
     {
index b23ff7223518a099c9157ee188f9f9e4c694269b..40b810436d64e9ebdbadd395365919ae2bd64cf7 100644 (file)
@@ -13,6 +13,7 @@
 
 
 #include <fe/fe.h>
+#include <fe/mapping_q1.h>
 #include <fe/fe_values.h>
 #include <base/memory_consumption.h>
 #include <base/quadrature.h>
 #include <lac/vector.h>
 #include <lac/block_vector.h>
 
+#include <iomanip>
 
 // if necessary try to work around a bug in the IBM xlC compiler
 #ifdef XLC_WORK_AROUND_STD_BUG
 using namespace std;
 #endif
 
+static MappingQ1<deal_II_dimension> mapping_q1;
+
+template <int dim>
+void
+FEValuesData<dim>::initialize (const unsigned int n_quadrature_points,
+                              unsigned int n_shapes,
+                              const UpdateFlags flags)
+{
+  if (flags & update_values)
+    shape_values.reinit(n_shapes, n_quadrature_points);
+
+  if (flags & update_gradients)
+    {
+      shape_gradients.resize(n_shapes);
+      for (unsigned int i=0;i<n_shapes;++i)
+       shape_gradients[i].resize(n_quadrature_points);
+    }
+
+  if (flags & update_second_derivatives)
+    {      
+    shape_2nd_derivatives.resize(n_shapes);
+      for (unsigned int i=0;i<n_shapes;++i)
+       shape_2nd_derivatives[i].resize(n_quadrature_points);
+    }
+  
+  if (flags & update_q_points)
+    quadrature_points.resize(n_quadrature_points);
+
+  if (flags & update_JxW_values)
+    JxW_values.resize(n_quadrature_points);
+
+  if (flags & update_boundary_forms)
+    boundary_forms.resize(n_quadrature_points);
+
+  if (flags & update_normal_vectors)
+    normal_vectors.resize(n_quadrature_points);
+
+//Todo: support points missing
+}
+
 
 /*------------------------------- FEValuesBase ---------------------------*/
 
 
 template <int dim>
 FEValuesBase<dim>::FEValuesBase (const unsigned int n_q_points,
-                                const unsigned int n_support_points,
                                 const unsigned int dofs_per_cell,
-                                const unsigned int n_transform_functions,
-                                const unsigned int n_values_arrays,
-                                const UpdateFlags update_flags,
+                                const unsigned int,
+                                const UpdateFlags flags,
+                                const Mapping<dim>       &mapping,
                                 const FiniteElement<dim> &fe)
                :
                n_quadrature_points (n_q_points),
                dofs_per_cell (dofs_per_cell),
-               n_transform_functions (n_transform_functions),
-               shape_values (n_values_arrays, FullMatrix<double>(dofs_per_cell, n_q_points)),
-               shape_gradients (dofs_per_cell, std::vector<Tensor<1,dim> >(n_q_points)),
-               shape_2nd_derivatives (dofs_per_cell, std::vector<Tensor<2,dim> >(n_q_points)),
-               weights (n_q_points, 0),
-               JxW_values (n_q_points, 0),
-               quadrature_points (n_q_points, Point<dim>()),
-               support_points (n_support_points, Point<dim>()),
-               jacobi_matrices (n_q_points, Tensor<2,dim>()),
-               jacobi_matrices_grad (n_q_points, Tensor<3,dim>()),
-               shape_values_transform (n_values_arrays,
-                                       FullMatrix<double>(n_transform_functions,
-                                                          n_quadrature_points)),
-               selected_dataset (0),
-               update_flags (update_flags),
-               fe(&fe)
-{};
-
+               mapping(&mapping),
+               fe(&fe),
+               mapping_data(0),
+               fe_data(0)
+{
+  update_flags = flags;
+}
 
 
 template <int dim>
-double FEValuesBase<dim>::shape_value (const unsigned int i,
-                                      const unsigned int j) const
+FEValuesBase<dim>::~FEValuesBase ()
 {
-  Assert (update_flags & update_values, ExcAccessToUninitializedField());
-  Assert (selected_dataset<shape_values.size(),
-         ExcIndexRange (selected_dataset, 0, shape_values.size()));
-  Assert (i<shape_values[selected_dataset].m(),
-         ExcIndexRange (i, 0, shape_values[selected_dataset].m()));
-  Assert (j<shape_values[selected_dataset].n(),
-         ExcIndexRange (j, 0, shape_values[selected_dataset].n()));
-
-  return shape_values[selected_dataset](i,j);
-};
-
+  if (fe_data)
+    {
+      Mapping<dim>::InternalDataBase *tmp1=fe_data;
+      fe_data=0;
+      delete tmp1;
+    }
+
+  if (mapping_data)
+    {
+      Mapping<dim>::InternalDataBase *tmp1=mapping_data;
+      mapping_data=0;
+      delete tmp1;
+    }
+}
 
 
 template <int dim>
@@ -86,13 +118,11 @@ template <class InputVector, typename number>
 void FEValuesBase<dim>::get_function_values (const InputVector &fe_function,
                                             typename std::vector<number>    &values) const
 {
+  Assert (update_flags & update_values, ExcAccessToUninitializedField());
   Assert (fe->n_components() == 1,
          ExcWrongNoOfComponents());
-  Assert (selected_dataset<shape_values.size(),
-         ExcIndexRange (selected_dataset, 0, shape_values.size()));
   Assert (values.size() == n_quadrature_points,
          ExcWrongVectorSize(values.size(), n_quadrature_points));
-  Assert (update_flags & update_values, ExcAccessToUninitializedField());
 
                                   // get function values of dofs
                                   // on this cell
@@ -110,11 +140,10 @@ void FEValuesBase<dim>::get_function_values (const InputVector &fe_function,
   for (unsigned int point=0; point<n_quadrature_points; ++point)
     for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
       values[point] += (dof_values(shape_func) *
-                       shape_values[selected_dataset](shape_func, point));
+                       shape_values(shape_func, point));
 };
 
 
-
 template <int dim>
 template <class InputVector, typename number>
 void FEValuesBase<dim>::get_function_values (const InputVector       &fe_function,
@@ -122,8 +151,6 @@ void FEValuesBase<dim>::get_function_values (const InputVector       &fe_functio
 {
   Assert (n_quadrature_points == values.size(),
          ExcWrongVectorSize(values.size(), n_quadrature_points));
-  Assert (selected_dataset<shape_values.size(),
-         ExcIndexRange (selected_dataset, 0, shape_values.size()));
   for (unsigned i=0;i<values.size();++i)
     Assert (values[i].size() == fe->n_components(),
            ExcWrongNoOfComponents());
@@ -146,37 +173,67 @@ void FEValuesBase<dim>::get_function_values (const InputVector       &fe_functio
   for (unsigned int point=0; point<n_quadrature_points; ++point)
     for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
       values[point](fe->system_to_component_index(shape_func).first)
-       += (dof_values(shape_func) * shape_values[selected_dataset](shape_func, point));
+       += (dof_values(shape_func) * shape_values(shape_func, point));
 };
 
 
 
 template <int dim>
-const Tensor<1,dim> &
-FEValuesBase<dim>::shape_grad (const unsigned int i,
-                              const unsigned int j) const
+const typename FEValuesData<dim>::ShapeVector &
+FEValuesBase<dim>::get_shape_values () const
+{
+  Assert (update_flags & update_values, ExcAccessToUninitializedField());
+  return shape_values;
+};
+
+
+template <int dim>
+const typename FEValuesData<dim>::GradientVector &
+FEValuesBase<dim>::get_shape_grads () const
 {
-  Assert (i<shape_gradients.size(),
-         ExcIndexRange (i, 0, shape_gradients.size()));
-  Assert (j<shape_gradients[i].size(),
-         ExcIndexRange (j, 0, shape_gradients[i].size()));
   Assert (update_flags & update_gradients, ExcAccessToUninitializedField());
+  return shape_gradients;
+};
+
 
-  return shape_gradients[i][j];
+template <int dim>
+const typename std::vector<typename std::vector<Tensor<2,dim> > > &
+FEValuesBase<dim>::get_shape_2nd_derivatives () const
+{
+  Assert (update_flags & update_second_derivatives, ExcAccessToUninitializedField());
+  return shape_2nd_derivatives;
 };
 
 
+template <int dim>
+const typename std::vector<Point<dim> > &
+FEValuesBase<dim>::get_quadrature_points () const
+{
+  Assert (update_flags & update_q_points, ExcAccessToUninitializedField());
+  return quadrature_points;
+};
+
+
+template <int dim>
+const std::vector<double> &
+FEValuesBase<dim>::get_JxW_values () const
+{
+  Assert (update_flags & update_JxW_values, ExcAccessToUninitializedField());
+  return JxW_values;
+}
+
 
 template <int dim>
 template <class InputVector>
 void FEValuesBase<dim>::get_function_grads (const InputVector      &fe_function,
                                            typename std::vector<Tensor<1,dim> > &gradients) const
 {
+  Assert (update_flags & update_gradients, ExcAccessToUninitializedField());
+
   Assert (fe->n_components() == 1,
          ExcWrongNoOfComponents());
   Assert (gradients.size() == n_quadrature_points,
          ExcWrongVectorSize(gradients.size(), n_quadrature_points));
-  Assert (update_flags & update_gradients, ExcAccessToUninitializedField());
 
                                   // get function values of dofs
                                   // on this cell
@@ -209,8 +266,6 @@ void FEValuesBase<dim>::get_function_grads (const InputVector               &fe_
 {
   Assert (n_quadrature_points == gradients.size(),
          ExcWrongNoOfComponents());
-  Assert (selected_dataset<shape_values.size(),
-         ExcIndexRange (selected_dataset, 0, shape_values.size()));
   for (unsigned i=0;i<gradients.size();++i)
     Assert (gradients[i].size() == fe->n_components(),
            ExcWrongVectorSize(gradients[i].size(), fe->n_components()));
@@ -241,23 +296,6 @@ void FEValuesBase<dim>::get_function_grads (const InputVector               &fe_
 };
 
 
-
-template <int dim>
-const Tensor<2,dim> &
-FEValuesBase<dim>::shape_2nd_derivative (const unsigned int i,
-                                        const unsigned int j) const
-{
-  Assert (i<shape_2nd_derivatives.size(),
-         ExcIndexRange (i, 0, shape_2nd_derivatives.size()));
-  Assert (j<shape_2nd_derivatives[i].size(),
-         ExcIndexRange (j, 0, shape_2nd_derivatives[i].size()));
-  Assert (update_flags & update_second_derivatives, ExcAccessToUninitializedField());
-
-  return shape_2nd_derivatives[i][j];
-};
-
-
-
 template <int dim>
 template <class InputVector>
 void FEValuesBase<dim>::get_function_2nd_derivatives (const InputVector      &fe_function,
@@ -278,7 +316,7 @@ void FEValuesBase<dim>::get_function_2nd_derivatives (const InputVector      &fe
     present_cell->get_interpolated_dof_values(fe_function, dof_values);
 
                                   // initialize with zero
-  fill_n (second_derivatives.begin(), n_quadrature_points, Tensor<2,dim>());
+  std::fill_n (second_derivatives.begin(), n_quadrature_points, Tensor<2,dim>());
 
                                   // add up contributions of trial
                                   // functions
@@ -292,7 +330,6 @@ void FEValuesBase<dim>::get_function_2nd_derivatives (const InputVector      &fe
 };
 
 
-
 template <int dim>
 template <class InputVector>
 void
@@ -302,8 +339,6 @@ get_function_2nd_derivatives (const InputVector               &fe_function,
 {
   Assert (n_quadrature_points == second_derivs.size(),
          ExcWrongNoOfComponents());
-  Assert (selected_dataset<shape_values.size(),
-         ExcIndexRange (selected_dataset, 0, shape_values.size()));
   for (unsigned i=0;i<second_derivs.size();++i)
     Assert (second_derivs[i].size() == fe->n_components(),
            ExcWrongVectorSize(second_derivs[i].size(), fe->n_components()));
@@ -339,31 +374,20 @@ template <int dim>
 const Point<dim> &
 FEValuesBase<dim>::quadrature_point (const unsigned int i) const
 {
-  Assert (i<quadrature_points.size(), ExcIndexRange(i, 0, quadrature_points.size()));
   Assert (update_flags & update_q_points, ExcAccessToUninitializedField());
+  Assert (i<quadrature_points.size(), ExcIndexRange(i, 0, quadrature_points.size()));
   
   return quadrature_points[i];
 };
 
 
 
-template <int dim>
-const Point<dim> &
-FEValuesBase<dim>::support_point (const unsigned int i) const
-{
-  Assert (i<support_points.size(), ExcIndexRange(i, 0, support_points.size()));
-  Assert (update_flags & update_support_points, ExcAccessToUninitializedField());
-  
-  return support_points[i];
-};
-
-
 
 template <int dim>
 double FEValuesBase<dim>::JxW (const unsigned int i) const
 {
-  Assert (i<JxW_values.size(), ExcIndexRange(i, 0, JxW_values.size()));
   Assert (update_flags & update_JxW_values, ExcAccessToUninitializedField());
+  Assert (i<JxW_values.size(), ExcIndexRange(i, 0, JxW_values.size()));
   
   return JxW_values[i];
 };
@@ -377,15 +401,8 @@ FEValuesBase<dim>::memory_consumption () const
   return (MemoryConsumption::memory_consumption (shape_values) +
          MemoryConsumption::memory_consumption (shape_gradients) +
          MemoryConsumption::memory_consumption (shape_2nd_derivatives) +
-         MemoryConsumption::memory_consumption (weights) +
          MemoryConsumption::memory_consumption (JxW_values) +
          MemoryConsumption::memory_consumption (quadrature_points) +
-         MemoryConsumption::memory_consumption (support_points) +
-         MemoryConsumption::memory_consumption (jacobi_matrices) +
-         MemoryConsumption::memory_consumption (jacobi_matrices_grad) +
-         MemoryConsumption::memory_consumption (shape_values_transform) +
-         MemoryConsumption::memory_consumption (selected_dataset) +
-         MemoryConsumption::memory_consumption (jacobi_matrices) +
          sizeof(update_flags) +
          MemoryConsumption::memory_consumption (present_cell) +
          MemoryConsumption::memory_consumption (fe));
@@ -395,141 +412,95 @@ FEValuesBase<dim>::memory_consumption () const
 /*------------------------------- FEValues -------------------------------*/
 
 template <int dim>
-FEValues<dim>::FEValues (const FiniteElement<dim> &fe,
-                        const Quadrature<dim>    &quadrature,
+FEValues<dim>::FEValues (const Mapping<dim>       &mapping,
+                        const FiniteElement<dim> &fe,
+                        const Quadrature<dim>    &q,
                         const UpdateFlags         update_flags)
                :
-               FEValuesBase<dim> (quadrature.n_quadrature_points,
-                                  fe.dofs_per_cell,
+               FEValuesBase<dim> (q.n_quadrature_points,
                                   fe.dofs_per_cell,
-                                  fe.transform_functions,
                                   1,
                                   update_flags,
+                                  mapping,
                                   fe),
-  unit_shape_gradients(fe.dofs_per_cell,
-                      std::vector<Tensor<1,dim> >(quadrature.n_quadrature_points)),
-                        unit_shape_2nd_derivatives(fe.dofs_per_cell,
-                                                   std::vector<Tensor<2,dim> >(quadrature.n_quadrature_points)),
-                                                     unit_shape_gradients_transform(fe.n_transform_functions(),
-                                                                                    std::vector<Tensor<1,dim> >(quadrature.n_quadrature_points)),
-                                                                                      unit_quadrature_points(quadrature.get_points())
+               quadrature (q)
 {
   Assert ((update_flags & update_normal_vectors) == false,
          typename FEValuesBase<dim>::ExcInvalidUpdateFlag());
 
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-    for (unsigned int j=0; j<n_quadrature_points; ++j) 
-      {
-       shape_values[0](i,j) = fe.shape_value(i, unit_quadrature_points[j]);
-       unit_shape_gradients[i][j]
-         = fe.shape_grad(i, unit_quadrature_points[j]);
-       if (update_flags & update_second_derivatives)
-         unit_shape_2nd_derivatives[i][j]
-           = fe.shape_grad_grad(i, unit_quadrature_points[j]);
-      };
+  UpdateFlags flags = mapping.update_once (update_flags);
+  flags |= mapping.update_each (update_flags);
+  flags |= fe.update_once (update_flags);
+  flags |= fe.update_each (update_flags);
 
-  for (unsigned int i=0; i<n_transform_functions; ++i)
-    for (unsigned int j=0; j<n_quadrature_points; ++j)
-      {
-       shape_values_transform[0] (i,j)
-         = fe.shape_value_transform (i, unit_quadrature_points[j]);
-       unit_shape_gradients_transform[i][j]
-         = fe.shape_grad_transform(i, unit_quadrature_points[j]);
-      };
-  
-  weights = quadrature.get_weights ();
+  mapping_data = mapping.get_data(flags, quadrature);
+  fe_data      = fe.get_data(flags, mapping, quadrature);
+
+  UpdateFlags allflags = mapping_data->update_once | mapping_data->update_each;
+  allflags |= fe_data->update_once | fe_data->update_each;
+
+  FEValuesData<dim>::initialize(n_quadrature_points,
+                               dofs_per_cell,
+                               allflags);
 };
 
 
+template <int dim>
+FEValues<dim>::FEValues (const FiniteElement<dim> &fe,
+                        const Quadrature<dim>    &q,
+                        const UpdateFlags         update_flags)
+  :
+  FEValuesBase<dim> (q.n_quadrature_points,
+                    fe.dofs_per_cell,
+                    1,
+                    update_flags,
+                    mapping_q1,
+                    fe),
+  quadrature (q)
+{
+  Assert ((update_flags & update_normal_vectors) == false,
+         FEValuesBase<dim>::ExcInvalidUpdateFlag());
+
+  UpdateFlags flags = mapping_q1.update_once (update_flags);
+  flags |= mapping_q1.update_each (update_flags);
+  flags |= fe.update_once (update_flags);
+  flags |= fe.update_each (update_flags);
+
+  mapping_data = mapping_q1.get_data(flags, quadrature);
+  fe_data      = fe.get_data(flags, mapping_q1, quadrature);
+
+  FEValuesData<dim>::initialize(n_quadrature_points,
+                               dofs_per_cell,
+                               flags);
+}
+
 
 template <int dim>
 void FEValues<dim>::reinit (const typename DoFHandler<dim>::cell_iterator &cell)
 {
-  present_cell = cell;
-
                                   // assert that the finite elements
                                   // passed to the constructor and
                                   // used by the DoFHandler used by
                                   // this cell, are the same
-  Assert (static_cast<const FiniteElementData<dim>&>(*fe)
-         ==
+  Assert (static_cast<const FiniteElementData<dim>&>(*fe) ==
          static_cast<const FiniteElementData<dim>&>(cell->get_dof_handler().get_fe()),
          typename FEValuesBase<dim>::ExcFEDontMatch());
+
+  present_cell = cell;
+
+  get_mapping().fill_fe_values(cell,
+                              quadrature,
+                              *mapping_data,
+                              quadrature_points,
+                              JxW_values);
   
-                                  // fill jacobi matrices and real
-                                  // quadrature points
-  if ((update_flags & update_jacobians)          ||
-      (update_flags & update_JxW_values)         ||
-      (update_flags & update_q_points)           ||
-      (update_flags & update_gradients)          ||
-      (update_flags & update_second_derivatives) ||
-      (update_flags & update_support_points))
-    fe->fill_fe_values (cell,
-                       unit_quadrature_points,
-                       jacobi_matrices,
-                       update_flags & (update_jacobians  |
-                                       update_JxW_values |
-                                       update_gradients  |
-                                       update_second_derivatives),
-                       jacobi_matrices_grad,
-                       update_flags & update_second_derivatives,
-                       support_points,
-                       update_flags & update_support_points,
-                       quadrature_points,
-                       update_flags & update_q_points,
-                       shape_values_transform[0], unit_shape_gradients_transform);
-  
-                                  // compute gradients on real element if
-                                  // requested
-  if (update_flags & update_gradients) 
-    for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
-      for (unsigned int j=0; j<n_quadrature_points; ++j)
-       for (unsigned int s=0; s<dim; ++s)
-         {
-           shape_gradients[i][j][s] = 0;
-           
-                                            // (grad psi)_s =
-                                            // (grad_{\xi\eta})_b J_{bs}
-                                            // with J_{bs}=(d\xi_b)/(dx_s)
-           for (unsigned int b=0; b<dim; ++b)
-             shape_gradients[i][j][s]
-               +=
-               unit_shape_gradients[i][j][b] * jacobi_matrices[j][b][s];
-         };
-  
-  Tensor<2,dim> tmp1, tmp2;
-  if (update_flags & update_second_derivatives)
-    for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
-      for (unsigned int j=0; j<n_quadrature_points; ++j)
-       {
-                                          // tmp1 := (d_k d_l phi) J_lj
-         contract (tmp1, unit_shape_2nd_derivatives[i][j], jacobi_matrices[j]);
-                                          // tmp2 := tmp1_kj J_ki
-         contract (tmp2, tmp1, 1, jacobi_matrices[j], 1);
-
-
-                                          // second part:
-                                          // tmp1 := (d_k J_lj) (d_l phi)
-         contract (tmp1, jacobi_matrices_grad[j], 2, unit_shape_gradients[i][j]);
-                                          // tmp1_kj J_ki
-         contract (shape_2nd_derivatives[i][j],
-                   jacobi_matrices[j], 1,
-                   tmp1, 1);
-
-                                          // add up first contribution
-         shape_2nd_derivatives[i][j] += tmp2;
-       };
-
-
-                                  // compute Jacobi determinants in
-                                  // quadrature points.
-                                  // refer to the general doc for
-                                  // why we take the inverse of the
-                                  // determinant
-  if (update_flags & update_JxW_values) 
-    for (unsigned int i=0; i<n_quadrature_points; ++i)
-      JxW_values[i] = weights[i] / determinant(jacobi_matrices[i]);
-};
+  get_fe().fill_fe_values(get_mapping(),
+                         cell,
+                         quadrature,
+                         *mapping_data,
+                         *fe_data,
+                         *this);
+}
 
 
 
@@ -537,11 +508,7 @@ template <int dim>
 unsigned int
 FEValues<dim>::memory_consumption () const
 {
-  return (FEValuesBase<dim>::memory_consumption () +
-         MemoryConsumption::memory_consumption (unit_shape_gradients) +
-         MemoryConsumption::memory_consumption (unit_shape_2nd_derivatives) +
-         MemoryConsumption::memory_consumption (unit_shape_gradients_transform) +
-         MemoryConsumption::memory_consumption (unit_quadrature_points));
+  return FEValuesBase<dim>::memory_consumption ();
 };
 
 
@@ -550,65 +517,40 @@ FEValues<dim>::memory_consumption () const
 
 template <int dim>
 FEFaceValuesBase<dim>::FEFaceValuesBase (const unsigned int n_q_points,
-                                        const unsigned int n_support_points,
                                         const unsigned int dofs_per_cell,
-                                        const unsigned int n_transform_functions,
                                         const unsigned int n_faces_or_subfaces,
-                                        const UpdateFlags         update_flags,
-                                        const FiniteElement<dim> &fe)
-               :
-               FEValuesBase<dim> (n_q_points,
-                                  n_support_points,
-                                  dofs_per_cell,
-                                  n_transform_functions,
-                                  n_faces_or_subfaces,
-                                  update_flags,
-                                  fe),
-  unit_shape_gradients (n_faces_or_subfaces,
-                       std::vector<std::vector<Tensor<1,dim> > >(dofs_per_cell,
-                                                                 std::vector<Tensor<1,dim> >(n_q_points))),
-                                                                   unit_shape_2nd_derivatives(n_faces_or_subfaces,
-                                                                                              std::vector<std::vector<Tensor<2,dim> > >(dofs_per_cell,
-                                                                                                                                        std::vector<Tensor<2,dim> >(n_q_points))),
-                                                                                                                                          unit_shape_gradients_transform (n_faces_or_subfaces,
-                                                                                                                                                                          std::vector<std::vector<Tensor<1,dim> > >(n_transform_functions,
-                                                                                                                                                                                                                    std::vector<Tensor<1,dim> >(n_q_points))),
-                                                                                                                                                                                                                      unit_face_quadrature_points (n_q_points, Point<dim-1>()),
-                                                                                                                                                                                                                                                     unit_quadrature_points (n_faces_or_subfaces,
-                                                                                                                                                                                                                                                                             std::vector<Point<dim> >(n_q_points, Point<dim>())),
-                                                                                                                                                                                                                                                                                                        face_jacobi_determinants (n_q_points, 0),
-                                                                                                                                                                                                                                                                                                        normal_vectors (n_q_points)
+                                        const UpdateFlags update_flags,
+                                        const Mapping<dim> &mapping,      
+                                        const FiniteElement<dim> &fe,
+                                        const Quadrature<dim-1>& quadrature)
+  :
+  FEValuesBase<dim> (n_q_points,
+                    dofs_per_cell,
+                    n_faces_or_subfaces,
+                    update_flags,
+                    mapping,
+                    fe),
+  quadrature(quadrature)
 {};
 
 
-
 template <int dim>
-const Point<dim> &
-FEFaceValuesBase<dim>::normal_vector (const unsigned int i) const
+const std::vector<Point<dim> > &
+FEFaceValuesBase<dim>::get_normal_vectors () const
 {
-  Assert (i<normal_vectors.size(), ExcIndexRange(i, 0, normal_vectors.size()));
   Assert (update_flags & update_normal_vectors,
          typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-  
-  return normal_vectors[i];
+  return normal_vectors;
 };
 
 
-
-
 template <int dim>
-unsigned int
-FEFaceValuesBase<dim>::memory_consumption () const
+const std::vector<Tensor<1,dim> > &
+FEFaceValuesBase<dim>::get_boundary_forms () const
 {
-  return (FEValuesBase<dim>::memory_consumption () +
-         MemoryConsumption::memory_consumption (unit_shape_gradients) +
-         MemoryConsumption::memory_consumption (unit_shape_2nd_derivatives) +
-         MemoryConsumption::memory_consumption (unit_shape_gradients_transform) +
-         MemoryConsumption::memory_consumption (unit_face_quadrature_points) +
-         MemoryConsumption::memory_consumption (unit_quadrature_points) +
-         MemoryConsumption::memory_consumption (face_jacobi_determinants) +
-         MemoryConsumption::memory_consumption (normal_vectors) +
-         MemoryConsumption::memory_consumption (present_face));
+  Assert (update_flags & update_boundary_forms,
+         FEValuesBase<dim>::ExcAccessToUninitializedField());
+  return boundary_forms;
 };
 
 
@@ -616,233 +558,151 @@ FEFaceValuesBase<dim>::memory_consumption () const
 
 
 template <int dim>
-FEFaceValues<dim>::FEFaceValues (const FiniteElement<dim> &fe,
+FEFaceValues<dim>::FEFaceValues (const Mapping<dim>       &mapping,
+                                const FiniteElement<dim> &fe,
                                 const Quadrature<dim-1>  &quadrature,
                                 const UpdateFlags         update_flags)
                :
                FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
-                                      fe.dofs_per_face,
                                       fe.dofs_per_cell,
-                                      fe.n_transform_functions(),
                                       GeometryInfo<dim>::faces_per_cell,
                                       update_flags,
-                                      fe)
+                                      mapping,
+                                      fe, quadrature)
 {
-  unit_face_quadrature_points = quadrature.get_points();
-  weights = quadrature.get_weights ();  
-
-                                  // set up an array of the unit points
-                                  // on the given face, but in coordinates
-                                  // of the space with @p{dim} dimensions.
-                                  // the points are still on the unit
-                                  // cell, not on the real cell.
-  for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
-    QProjector<dim>::project_to_face (quadrature, face, unit_quadrature_points[face]);
-
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-    for (unsigned int j=0; j<n_quadrature_points; ++j) 
-      for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
-       {
-         shape_values[face](i,j)
-           = fe.shape_value(i, unit_quadrature_points[face][j]);
-         unit_shape_gradients[face][i][j]
-           = fe.shape_grad(i, unit_quadrature_points[face][j]);
-         if (update_flags & update_second_derivatives)
-           unit_shape_2nd_derivatives[face][i][j]
-             = fe.shape_grad_grad(i, unit_quadrature_points[face][j]);
-       };
-
-  for (unsigned int i=0; i<n_transform_functions; ++i)
-    for (unsigned int j=0; j<n_quadrature_points; ++j)
-      for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
-       {
-         shape_values_transform[face] (i,j)
-           = fe.shape_value_transform (i, unit_quadrature_points[face][j]);
-         unit_shape_gradients_transform[face][i][j]
-           = fe.shape_grad_transform(i, unit_quadrature_points[face][j]);
-       };
+  UpdateFlags flags = mapping.update_once (update_flags);
+  flags |= mapping.update_each (update_flags);
+  flags |= fe.update_once (update_flags);
+  flags |= fe.update_each (update_flags);
+
+  mapping_data = mapping.get_face_data(flags, quadrature);
+  fe_data      = fe.get_face_data(flags, mapping, quadrature);
+
+  UpdateFlags allflags = mapping_data->update_once | mapping_data->update_each;
+  allflags |= fe_data->update_once | fe_data->update_each;
+
+  FEValuesData<dim>::initialize(n_quadrature_points,
+                               dofs_per_cell,
+                               allflags);
 };
 
 
+
 template <int dim>
-void FEFaceValues<dim>::reinit (const typename DoFHandler<dim>::cell_iterator &cell,
-                               const unsigned int                             face_no)
+FEFaceValues<dim>::FEFaceValues (const FiniteElement<dim> &fe,
+                                const Quadrature<dim-1>  &quadrature,
+                                const UpdateFlags         update_flags)
+               :
+               FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
+                                      fe.dofs_per_cell,
+                                      GeometryInfo<dim>::faces_per_cell,
+                                      update_flags,
+                                      mapping_q1,
+                                      fe, quadrature)
 {
-  present_cell  = cell;
-  present_face  = cell->face(face_no);
-  selected_dataset = face_no;
+  UpdateFlags flags = mapping_q1.update_once (update_flags);
+  flags |= mapping_q1.update_each (update_flags);
+  flags |= fe.update_once (update_flags);
+  flags |= fe.update_each (update_flags);
+
+  mapping_data = mapping_q1.get_face_data(flags, quadrature);
+  fe_data      = fe.get_face_data(flags, mapping_q1, quadrature);
 
+  FEValuesData<dim>::initialize(n_quadrature_points,
+                               dofs_per_cell,
+                               flags);
+};
+
+
+
+template <int dim>
+void FEFaceValues<dim>::reinit (const typename
+                               DoFHandler<dim>::cell_iterator &cell,
+                               const unsigned int              face_no)
+{
                                   // assert that the finite elements
                                   // passed to the constructor and
                                   // used by the DoFHandler used by
                                   // this cell, are the same
-  Assert (static_cast<const FiniteElementData<dim>&>(*fe)
-         ==
+  Assert (static_cast<const FiniteElementData<dim>&>(*fe) ==
          static_cast<const FiniteElementData<dim>&>(cell->get_dof_handler().get_fe()),
          typename FEValuesBase<dim>::ExcFEDontMatch());
-  Assert (face_no < GeometryInfo<dim>::faces_per_cell,
-         ExcIndexRange (face_no, 0, GeometryInfo<dim>::faces_per_cell));
-  
-                                  // fill jacobi matrices and real
-                                  // quadrature points
-  if ((update_flags & update_jacobians)          ||
-      (update_flags & update_JxW_values)         ||
-      (update_flags & update_q_points)           ||
-      (update_flags & update_gradients)          ||
-      (update_flags & update_second_derivatives) ||
-      (update_flags & update_support_points)     ||
-      (update_flags & update_normal_vectors)     ||
-      (update_flags & update_JxW_values))
-    fe->fill_fe_face_values (cell,
-                            face_no,
-                            unit_face_quadrature_points,
-                            unit_quadrature_points[face_no],
-                            jacobi_matrices,
-                            update_flags & (update_jacobians |
-                                            update_gradients |
-                                            update_JxW_values |
-                                            update_second_derivatives),
-                            jacobi_matrices_grad,
-                            update_flags & update_second_derivatives,
-                            support_points,
-                            update_flags & update_support_points,
-                            quadrature_points,
-                            update_flags & update_q_points,
-                            face_jacobi_determinants,
-                            update_flags & update_JxW_values,
-                            normal_vectors,
-                            update_flags & update_normal_vectors,
-                            shape_values_transform[face_no],
-                            unit_shape_gradients_transform[face_no]);
-
-                                  // compute gradients on real element if
-                                  // requested
-  if (update_flags & update_gradients) 
-    for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
-      {
-       fill_n (shape_gradients[i].begin(),
-               n_quadrature_points,
-               Tensor<1,dim>());
-       for (unsigned int j=0; j<n_quadrature_points; ++j) 
-         for (unsigned int s=0; s<dim; ++s)
-                                            // (grad psi)_s =
-                                            // (grad_{\xi\eta})_b J_{bs}
-                                            // with J_{bs}=(d\xi_b)/(dx_s)
-           for (unsigned int b=0; b<dim; ++b)
-             shape_gradients[i][j][s]
-               += (unit_shape_gradients[face_no][i][j][b] *
-                   jacobi_matrices[j][b][s]);
-      };
 
+  present_cell  = cell;
+  present_face  = cell->face(face_no);
 
-  Tensor<2,dim> tmp1, tmp2;
-  if (update_flags & update_second_derivatives)
-    for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
-      for (unsigned int j=0; j<n_quadrature_points; ++j)
-       {
-                                          // tmp1 := (d_k d_l phi) J_lj
-         contract (tmp1, unit_shape_2nd_derivatives[face_no][i][j], jacobi_matrices[j]);
-                                          // tmp2 := tmp1_kj J_ki
-         contract (tmp2, tmp1, 1, jacobi_matrices[j], 1);
-
-
-                                          // second part:
-                                          // tmp1 := (d_k J_lj) (d_l phi)
-         contract (tmp1,
-                   jacobi_matrices_grad[j], 2,
-                   unit_shape_gradients[face_no][i][j]);
-                                          // tmp1_kj J_ki
-         contract (shape_2nd_derivatives[i][j],
-                   jacobi_matrices[j], 1,
-                   tmp1, 1);
-
-                                          // add up first contribution
-         shape_2nd_derivatives[i][j] += tmp2;
-       };
-
-
-                                  // compute Jacobi determinants in
-                                  // quadrature points.
-                                  // refer to the general doc for
-                                  // why we take the inverse of the
-                                  // determinant
-  if (update_flags & update_JxW_values) 
-    for (unsigned int i=0; i<n_quadrature_points; ++i)
-      JxW_values[i] = weights[i] * face_jacobi_determinants[i];
+  get_mapping().fill_fe_face_values(cell, face_no,
+                                   quadrature,
+                                   *mapping_data,
+                                   quadrature_points,
+                                   JxW_values,
+                                   boundary_forms,
+                                   normal_vectors);
+  
+  get_fe().fill_fe_face_values(get_mapping(),
+                              cell, face_no,
+                         quadrature,
+                         *mapping_data,
+                         *fe_data,
+                         *this);
 };
 
 
 /*------------------------------- FESubFaceValues -------------------------------*/
 
 
+template <int dim>
+FESubfaceValues<dim>::FESubfaceValues (const Mapping<dim>       &mapping,
+                                      const FiniteElement<dim> &fe,
+                                      const Quadrature<dim-1>  &quadrature,
+                                      const UpdateFlags         update_flags)
+               :
+               FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
+                                      fe.dofs_per_cell,
+                                      GeometryInfo<dim>::faces_per_cell * GeometryInfo<dim>::subfaces_per_face,
+                                      update_flags,
+                                      mapping,
+                                      fe, quadrature)
+{
+  UpdateFlags flags = mapping.update_once (update_flags);
+  flags |= mapping.update_each (update_flags);
+  flags |= fe.update_once (update_flags);
+  flags |= fe.update_each (update_flags);
+
+  mapping_data = mapping.get_subface_data(flags, quadrature);
+  fe_data      = fe.get_subface_data(flags, mapping, quadrature);
+
+  FEValuesData<dim>::initialize(n_quadrature_points,
+                               dofs_per_cell,
+                               flags);
+}
+
+
+
 template <int dim>
 FESubfaceValues<dim>::FESubfaceValues (const FiniteElement<dim> &fe,
                                       const Quadrature<dim-1>  &quadrature,
                                       const UpdateFlags         update_flags)
                :
                FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
-                                      0,
                                       fe.dofs_per_cell,
-                                      fe.n_transform_functions(),
                                       GeometryInfo<dim>::faces_per_cell * GeometryInfo<dim>::subfaces_per_face,
                                       update_flags,
-                                      fe)
+                                      mapping_q1,
+                                      fe, quadrature)
 {
-  Assert ((update_flags & update_support_points) == false,
-         typename FEValuesBase<dim>::ExcInvalidUpdateFlag());
-  
-  unit_face_quadrature_points = quadrature.get_points();
-  weights = quadrature.get_weights ();  
-
-                                  // set up an array of the unit points
-                                  // on the given face, but in coordinates
-                                  // of the space with @p{dim} dimensions.
-                                  // the points are still on the unit
-                                  // cell, not on the real cell.
-  for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
-    for (unsigned int subface=0; subface<GeometryInfo<dim>::subfaces_per_face; ++subface)
-      QProjector<dim>::project_to_subface (quadrature,
-                                          face, subface,
-                                          unit_quadrature_points[face*(1<<(dim-1))+subface]);
-
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-    for (unsigned int j=0; j<n_quadrature_points; ++j) 
-      for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
-       for (unsigned int subface=0; subface<GeometryInfo<dim>::subfaces_per_face; ++subface)
-         {
-           shape_values[face*GeometryInfo<dim>::subfaces_per_face+subface](i,j)
-             = fe.shape_value(i, unit_quadrature_points[face *
-                                                       GeometryInfo<dim>::
-                                                       subfaces_per_face+subface][j]);
-           unit_shape_gradients[face*GeometryInfo<dim>::subfaces_per_face+subface][i][j]
-             = fe.shape_grad(i, unit_quadrature_points[face *
-                                                      GeometryInfo<dim>::
-                                                      subfaces_per_face+subface][j]);
-           if (update_flags & update_second_derivatives)
-             unit_shape_2nd_derivatives[face*GeometryInfo<dim>::subfaces_per_face+subface][i][j]
-               = fe.shape_grad_grad(i, unit_quadrature_points[face *
-                                                             GeometryInfo<dim>::
-                                                             subfaces_per_face+subface][j]);
-         };
-  for (unsigned int i=0; i<n_transform_functions; ++i)
-    for (unsigned int j=0; j<n_quadrature_points; ++j)
-      for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
-       for (unsigned int subface=0; subface<GeometryInfo<dim>::subfaces_per_face; ++subface)
-         {
-           shape_values_transform[face*GeometryInfo<dim>::subfaces_per_face+subface] (i,j)
-             = fe.shape_value_transform (i, unit_quadrature_points[face *
-                                                                  GeometryInfo<dim>::
-                                                                  subfaces_per_face +
-                                                                  subface][j]);
-           unit_shape_gradients_transform[face *
-                                         GeometryInfo<dim>::subfaces_per_face +
-                                         subface][i][j]
-             = fe.shape_grad_transform(i, unit_quadrature_points[face *
-                                                                GeometryInfo<dim>::
-                                                                subfaces_per_face +
-                                                                subface][j]);
-         };
-};
+  UpdateFlags flags = mapping_q1.update_once (update_flags);
+  flags |= mapping_q1.update_each (update_flags);
+  flags |= fe.update_once (update_flags);
+  flags |= fe.update_each (update_flags);
+
+  mapping_data = mapping_q1.get_subface_data(flags, quadrature);
+  fe_data      = fe.get_subface_data(flags, mapping_q1, quadrature);
+
+  FEValuesData<dim>::initialize(n_quadrature_points,
+                               dofs_per_cell,
+                               flags);
+}
 
 
 
@@ -851,113 +711,39 @@ void FESubfaceValues<dim>::reinit (const typename DoFHandler<dim>::cell_iterator
                                   const unsigned int         face_no,
                                   const unsigned int         subface_no)
 {
-  Assert (face_no < GeometryInfo<dim>::faces_per_cell,
-         ExcIndexRange (face_no, 0, GeometryInfo<dim>::faces_per_cell));
-  Assert (subface_no < GeometryInfo<dim>::subfaces_per_face,
-         ExcIndexRange (subface_no, 0, GeometryInfo<dim>::subfaces_per_face));
-  Assert (cell->face(face_no)->at_boundary() == false,
-         ExcReinitCalledWithBoundaryFace());
-  Assert (cell->face(face_no)->has_children()== true,
-         ExcFaceHasNoSubfaces());
-  
-  present_cell  = cell;
-  present_face = cell->face(face_no)->child(subface_no);
-  selected_dataset = face_no*(1<<(dim-1)) + subface_no;
-
                                   // assert that the finite elements
                                   // passed to the constructor and
                                   // used by the DoFHandler used by
                                   // this cell, are the same
-  Assert (static_cast<const FiniteElementData<dim>&>(*fe)
-         ==
+  Assert (static_cast<const FiniteElementData<dim>&>(*fe) ==
          static_cast<const FiniteElementData<dim>&>(cell->get_dof_handler().get_fe()),
          typename FEValuesBase<dim>::ExcFEDontMatch());
-    
-                                  // fill jacobi matrices and real
-                                  // quadrature points
-  if ((update_flags & update_jacobians)          ||
-      (update_flags & update_JxW_values)         ||
-      (update_flags & update_q_points)           ||
-      (update_flags & update_gradients)          ||
-      (update_flags & update_second_derivatives) ||
-      (update_flags & update_normal_vectors)     ||
-      (update_flags & update_JxW_values))
-    fe->fill_fe_subface_values (cell,
-                               face_no,
-                               subface_no,
-                               unit_face_quadrature_points,
-                               unit_quadrature_points[selected_dataset],
-                               jacobi_matrices,
-                               update_flags & (update_jacobians |
-                                               update_gradients |
-                                               update_JxW_values|
-                                               update_second_derivatives),
-                               jacobi_matrices_grad,
-                               update_flags & update_second_derivatives,
-                               quadrature_points,
-                               update_flags & update_q_points,
-                               face_jacobi_determinants,
-                               update_flags & update_JxW_values,
-                               normal_vectors,
-                               update_flags & update_normal_vectors,
-                               shape_values_transform[selected_dataset],
-                               unit_shape_gradients_transform[selected_dataset]);
-
-                                  // compute gradients on real element if
-                                  // requested
-  if (update_flags & update_gradients) 
-    for (unsigned int i=0; i<fe->dofs_per_cell; ++i) 
-      {
-       fill_n (shape_gradients[i].begin(),
-               n_quadrature_points,
-               Tensor<1,dim>());
-       for (unsigned int j=0; j<n_quadrature_points; ++j) 
-         for (unsigned int s=0; s<dim; ++s)
-                                            // (grad psi)_s =
-                                            // (grad_{\xi\eta})_b J_{bs}
-                                            // with J_{bs}=(d\xi_b)/(dx_s)
-           for (unsigned int b=0; b<dim; ++b)
-             shape_gradients[i][j][s]
-               += (unit_shape_gradients[selected_dataset][i][j][b] *
-                   jacobi_matrices[j][b][s]);
-      };
+  Assert (face_no < GeometryInfo<dim>::faces_per_cell,
+         ExcIndexRange (face_no, 0, GeometryInfo<dim>::faces_per_cell));
+  Assert (subface_no < GeometryInfo<dim>::subfaces_per_face,
+         ExcIndexRange (subface_no, 0, GeometryInfo<dim>::subfaces_per_face));
 
-  Tensor<2,dim> tmp1, tmp2;
-  if (update_flags & update_second_derivatives)
-    for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
-      for (unsigned int j=0; j<n_quadrature_points; ++j)
-       {
-                                          // tmp1 := (d_k d_l phi) J_lj
-         contract (tmp1,
-                   unit_shape_2nd_derivatives[selected_dataset][i][j],
-                   jacobi_matrices[j]);
-                                          // tmp2 := tmp1_kj J_ki
-         contract (tmp2, tmp1, 1, jacobi_matrices[j], 1);
-
-
-                                          // second part:
-                                          // tmp1 := (d_k J_lj) (d_l phi)
-         contract (tmp1,
-                   jacobi_matrices_grad[j], 2,
-                   unit_shape_gradients[selected_dataset][i][j]);
-                                          // tmp1_kj J_ki
-         contract (shape_2nd_derivatives[i][j],
-                   jacobi_matrices[j], 1,
-                   tmp1, 1);
-
-                                          // add up first contribution
-         shape_2nd_derivatives[i][j] += tmp2;
-       };
-
-
-                                  // compute Jacobi determinants in
-                                  // quadrature points.
-                                  // refer to the general doc for
-                                  // why we take the inverse of the
-                                  // determinant
-  if (update_flags & update_JxW_values) 
-    for (unsigned int i=0; i<n_quadrature_points; ++i)
-      JxW_values[i] = weights[i] * face_jacobi_determinants[i];
+//TODO: Reinsert this assertion? It tests a necessary, not a sufficient condition
+  //  Assert (cell->face(face_no)->at_boundary() == false,
+  //     ExcReinitCalledWithBoundaryFace());
+  
+  present_cell  = cell;
+  present_face  = cell->face(face_no);
+
+  get_mapping().fill_fe_subface_values(cell, face_no, subface_no,
+                                      quadrature,
+                                      *mapping_data,
+                                      quadrature_points,
+                                      JxW_values,
+                                      boundary_forms,
+                                      normal_vectors);
+  
+  get_fe().fill_fe_subface_values(get_mapping(),
+                                 cell, face_no, subface_no,
+                                 quadrature,
+                                 *mapping_data,
+                                 *fe_data,
+                                 *this);
 };
 
 
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8452ebf17e3e624f60bbea0452496decab574f98 100644 (file)
@@ -0,0 +1,79 @@
+//------------------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//------------------------------------------------------------------------
+
+#include <grid/tria.h>
+#include <fe/mapping.h>
+
+
+#if (deal_II_dimension == 1)
+
+template<>
+const unsigned int Mapping<deal_II_dimension>::normal_directions[2] =
+{
+  1, 0
+};
+
+#endif
+
+#if (deal_II_dimension == 2)
+
+template<>
+const unsigned int Mapping<deal_II_dimension>::normal_directions[4] =
+{
+  2, 0, 3, 1
+};
+
+#endif
+
+#if (deal_II_dimension == 3)
+
+template<>
+const unsigned int Mapping<deal_II_dimension>::normal_directions[6] =
+{
+  3, 2, 5, 0, 4, 1
+};
+
+#endif
+
+
+template <int dim>
+Mapping<dim>::~Mapping ()
+{}
+
+
+/*------------------------------ InternalData ------------------------------*/
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase::~InternalDataBase ()
+{}
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase::InternalDataBase ():
+               update_flags(update_default),
+               update_once(update_default),
+               update_each(update_default),
+               first_cell(true)
+{}
+
+
+
+/*------------------------------ InternalData ------------------------------*/
+
+
+
+template class Mapping<deal_II_dimension>;
+
+
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..49fad8d038af6300cf6e2c860d68829061b8911d 100644 (file)
@@ -0,0 +1,567 @@
+//-----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//-----------------------------------------------------------------
+
+#include <base/tensor.h>
+#include <base/quadrature.h>
+#include <lac/full_matrix.h>
+#include <grid/tria.h>
+#include <grid/tria_iterator.h>
+#include <dofs/dof_accessor.h>
+#include <fe/mapping_cartesian.h>
+#include <fe/fe_values.h>
+
+#include <cmath>
+#include <algorithm>
+
+
+
+
+template<int dim>
+MappingCartesian<dim>::InternalData::InternalData (const Quadrature<dim>& q)
+               :
+               length (dim, 0.),
+               quadrature_points (q.get_points ())
+{}
+
+
+
+template <int dim>
+UpdateFlags
+MappingCartesian<dim>::update_once (const UpdateFlags) const
+{
+  return update_default;
+}
+
+template <int dim>
+UpdateFlags
+MappingCartesian<dim>::update_each (const UpdateFlags in) const
+{
+  UpdateFlags out = in;
+  if (out & update_boundary_forms)
+    out |= update_normal_vectors;
+  
+  return out;
+}
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingCartesian<dim>::get_data (const UpdateFlags flags,
+                         const Quadrature<dim>& q) const
+{
+  Assert (flags & update_normal_vectors == 0, ExcNotImplemented());
+  InternalData* data = new InternalData (q);
+  return data;
+}
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingCartesian<dim>::get_face_data (const UpdateFlags,
+                              const Quadrature<dim-1>& quadrature) const
+{
+  QProjector<dim> q (quadrature, false);
+  InternalData* data = new InternalData (q);
+  return data;
+}
+
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingCartesian<dim>::get_subface_data (const UpdateFlags,
+                                 const Quadrature<dim-1>& quadrature) const
+{
+  QProjector<dim> q (quadrature, true);
+  InternalData* data = new InternalData (q);
+  return data;
+}
+
+
+
+
+template <int dim>
+void
+MappingCartesian<dim>::compute_fill (const typename DoFHandler<dim>::cell_iterator &cell,
+                                    const unsigned int face_no,
+                                    const unsigned int sub_no,
+                                    InternalData& data,
+                                    std::vector<Point<dim> > &quadrature_points,
+                                    std::vector<Point<dim> >& normal_vectors) const
+{
+  const UpdateFlags update_flags(data.current_update_flags());
+
+  const unsigned int npts = quadrature_points.size ();
+  unsigned int offset = 0;
+  bool onface = false;
+  
+  if (face_no == static_cast<unsigned int> (-1))
+    {
+      Assert (sub_no == static_cast<unsigned int> (-1), ExcInternalError());
+    } else {
+      onface = true;
+                                      // Add 1 on both sides of
+                                      // assertion to avoid compiler
+                                      // warning about testing
+                                      // unsigned int < 0 in 1d.
+      Assert (face_no+1 < GeometryInfo<dim>::faces_per_cell+1,
+             ExcIndexRange (face_no, 0, GeometryInfo<dim>::faces_per_cell));
+      if (sub_no == static_cast<unsigned int> (-1))
+       offset = face_no * quadrature_points.size();
+      else
+       {
+         Assert (sub_no+1 < GeometryInfo<dim>::subfaces_per_face+1,
+                 ExcIndexRange (sub_no, 0, GeometryInfo<dim>::subfaces_per_face));
+         offset = (face_no * GeometryInfo<dim>::subfaces_per_face + sub_no)
+                  * quadrature_points.size();
+       }
+    }
+  
+                                  // Compute start point and sizes along axes.
+                                  // Strange vertex numbering makes this complicated again.
+  
+  Point<dim> start = cell->vertex (0);
+
+  switch (dim)
+    {
+      case 1:
+       data.length[0] = cell->vertex(1)(0) - start(0);
+       break;
+      case 2:
+       data.length[0] = cell->vertex(1)(0) - start(0);
+       data.length[1] = cell->vertex(3)(1) - start(1);
+       break;
+      case 3:
+       data.length[0] = cell->vertex(1)(0) - start(0);
+       data.length[1] = cell->vertex(4)(1) - start(1);
+       data.length[2] = cell->vertex(3)(2) - start(2);
+       break;
+      default:
+       Assert(false, ExcNotImplemented());
+    }
+  
+  
+  if (update_flags & update_q_points)
+    {
+      Assert (quadrature_points.size() == npts,
+             ExcDimensionMismatch(quadrature_points.size(), npts));
+      for (unsigned int i=0;i<npts;++i)
+       {
+         Point<dim> p = start;
+         for (unsigned int d=0;d<dim;++d)
+           p(d) += data.length[d]*data.quadrature_points[i+offset](d);
+         quadrature_points[i] = p;
+       }
+    }
+
+  
+  if (update_flags & update_normal_vectors)
+    {
+      Point<dim> n;
+      switch (100*dim+face_no)
+       {
+                                          // 2D
+         case 200:
+               n (1) = -1.;
+               break;
+         case 201:
+               n (0) = 1.;
+               break;
+         case 202:
+               n (1) = 1.;
+               break;
+         case 203:
+               n (0) = 1.;
+               break;
+                                          // 3D
+         case 300:
+               n (1) = -1.;
+               break;
+         case 301:
+               n (1) = 1.;
+               break;
+         case 302:
+               n (2) = -1.;
+               break;
+         case 303:
+               n (0) = 1.;
+               break;
+         case 304:
+               n (2) = 1.;
+               break;
+         case 305:
+               n (0) = -1.;
+               break;
+         default:
+               Assert (false, ExcInternalError());
+       }
+      for (unsigned int i=0;i<npts;++i)
+       normal_vectors[i] = n;
+    }
+  
+  data.first_cell = false;
+}
+
+
+template <int dim>
+void
+MappingCartesian<dim>::fill_fe_values (const DoFHandler<dim>::cell_iterator& cell,
+                               const Quadrature<dim>& q, 
+                               Mapping<dim>::InternalDataBase& mapping_data,
+                               std::vector<Point<dim> >& quadrature_points,
+                               std::vector<double>& JxW_values) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  typename std::vector<Point<dim> > dummy;
+  
+  compute_fill (cell, static_cast<unsigned int> (-1), static_cast<unsigned int> (-1),
+               data,
+               quadrature_points,
+               dummy);
+
+  if (data.current_update_flags() & update_JxW_values)
+    {
+      double J = data.length[0];
+      for (unsigned int d=1;d<dim;++d)
+       J *= data.length[d];
+      for (unsigned int i=0; i<JxW_values.size();++i)
+       JxW_values[i] = J * q.weight(i);
+    }
+}
+
+
+
+template <int dim>
+void
+MappingCartesian<dim>::fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                                    const unsigned int       face_no,
+                                    const Quadrature<dim-1> &q,
+                                    typename Mapping<dim>::InternalDataBase &mapping_data,
+                                    std::vector<Point<dim> >     &quadrature_points,
+                                    std::vector<double>          &JxW_values,
+                                    std::vector<Tensor<1,dim> >  &boundary_forms,
+                                    std::vector<Point<dim> >     &normal_vectors) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  compute_fill (cell, face_no, static_cast<unsigned int> (-1),
+               data,
+               quadrature_points,
+               normal_vectors);
+
+  double J = 1.;
+  for (unsigned int d=0;d<dim;++d)
+    if (d != (normal_directions[face_no]/2))
+      J *= data.length[d];
+  
+  if (data.current_update_flags() & update_JxW_values)
+    {
+      for (unsigned int i=0; i<JxW_values.size();++i)
+       JxW_values[i] = J * q.weight(i);
+    }
+
+  if (data.current_update_flags() & update_boundary_forms)
+    {
+      for (unsigned int i=0; i<boundary_forms.size();++i)
+       boundary_forms[i] = J * normal_vectors[i];
+    }
+}
+
+
+template <int dim>
+void
+MappingCartesian<dim>::fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                                       const unsigned int       face_no,
+                                       const unsigned int       sub_no,
+                                       const Quadrature<dim-1> &q,
+                                       typename Mapping<dim>::InternalDataBase &mapping_data,
+                                       std::vector<Point<dim> >     &quadrature_points,
+                                       std::vector<double>          &JxW_values,
+                                       std::vector<Tensor<1,dim> >  &boundary_forms,
+                                       std::vector<Point<dim> >     &normal_vectors) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  compute_fill (cell, face_no, sub_no,
+               data,
+               quadrature_points,
+               normal_vectors);
+
+  double J = 1.;
+  for (unsigned int d=0;d<dim;++d)
+    if (d != (normal_directions[face_no]/2))
+      J *= data.length[d];
+  
+  if (data.current_update_flags() & update_JxW_values)
+    {
+      for (unsigned int i=0; i<JxW_values.size();++i)
+       JxW_values[i] = J * q.weight(i) / GeometryInfo<dim>::subfaces_per_face;
+    }
+
+  if (data.current_update_flags() & update_boundary_forms)
+    {
+      for (unsigned int i=0; i<boundary_forms.size();++i)
+       boundary_forms[i] = J * normal_vectors[i];
+    }
+}
+
+
+#if (deal_II_dimension == 1)
+
+template <>
+void
+MappingCartesian<1>::fill_fe_face_values (const DoFHandler<1>::cell_iterator &,
+                                  const unsigned,
+                                  const Quadrature<0>&,
+                                  Mapping<1>::InternalDataBase&,
+                                  std::vector<Point<1> >&,
+                                  std::vector<double>&,
+                                  std::vector<Tensor<1,1> >&,
+                                  std::vector<Point<1> >&) const
+{
+  Assert(false, ExcNotImplemented());
+}
+
+
+template <>
+void
+MappingCartesian<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &,
+                                     const unsigned,
+                                     const unsigned,
+                                     const Quadrature<0>&,
+                                     Mapping<1>::InternalDataBase&,
+                                     std::vector<Point<1> >&,
+                                     std::vector<double>&,
+                                     std::vector<Tensor<1,1> >&,
+                                     std::vector<Point<1> >&) const
+{
+  Assert(false, ExcNotImplemented());
+}
+#endif
+
+
+template <int dim>
+void
+MappingCartesian<dim>::transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                                    const std::vector<Tensor<1,dim> > &src,
+                                    const Mapping<dim>::InternalDataBase &mapping_data,
+                                    const unsigned int src_offset) const
+{
+  covariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+
+template <int dim>
+void
+MappingCartesian<dim>::transform_covariant (std::vector<Point<dim> >       &dst,
+                                    const std::vector<Point<dim> > &src,
+                                    const Mapping<dim>::InternalDataBase &mapping_data,
+                                    const unsigned int src_offset) const
+{
+  covariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+template <int dim>
+void
+MappingCartesian<dim>::transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                                        const std::vector<Tensor<1,dim> > &src,
+                                        const Mapping<dim>::InternalDataBase &mapping_data,
+                                        const unsigned int src_offset) const
+{
+  contravariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+
+template <int dim>
+void
+MappingCartesian<dim>::transform_contravariant (std::vector<Point<dim> >       &dst,
+                                        const std::vector<Point<dim> > &src,
+                                        const Mapping<dim>::InternalDataBase &mapping_data,
+                                        const unsigned int src_offset) const
+{
+  contravariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+
+
+template <int dim>
+Point<dim> MappingCartesian<dim>::transform_unit_to_real_cell (
+  const typename Triangulation<dim>::cell_iterator cell,
+  const Point<dim> &p,
+  const typename Mapping<dim>::InternalDataBase *const m_data) const
+{
+                                  // If m_data!=0 use this
+                                  // InternalData.
+                                  //
+                                  // Otherwise use the get_data
+                                  // function to create an
+                                  // InternalData with data vectors
+                                  // already of the right size; And
+                                  // compute shape values and mapping
+                                  // support points.
+                                  //
+                                  // Let, at the end, mdata be a
+                                  // pointer to the given or the new
+                                  // created InternalData
+  const InternalData *mdata;
+  if (m_data==0)
+    {
+      static Point<dim> dummy_p;
+      static Quadrature<dim> dummy_quadrature(dummy_p);
+      mdata=dynamic_cast<InternalData *> (get_data(update_default,
+                                                  dummy_quadrature));
+    }
+  else
+    mdata = dynamic_cast<const InternalData *> (m_data);
+  Assert(mdata!=0, ExcInternalError());
+
+                                  // use now the InternalData, that
+                                  // mdata is pointing to, to compute
+                                  // the point in real space.
+  Point<dim> p_real = cell->vertex(0);
+  for (unsigned int d=0;d<dim;++d)
+    p_real(d) += mdata->length[d]*p(d);
+  return p_real;
+}
+
+
+
+template <int dim>
+Point<dim> MappingCartesian<dim>::transform_real_to_unit_cell (
+  const typename Triangulation<dim>::cell_iterator cell,
+  const Point<dim> &p) const
+{
+  const Point<dim>& start =  cell->vertex (0);
+  Point<dim> real = p;
+  real -= start;
+
+  switch (dim)
+    {
+      case 1:
+       real(0) /= cell->vertex(1)(0) - start(0);
+       break;
+      case 2:
+       real(0) /= cell->vertex(1)(0) - start(0);
+       real(1) /= cell->vertex(3)(1) - start(1);
+       break;
+      case 3:
+       real(0) /= cell->vertex(1)(0) - start(0);
+       real(1) /= cell->vertex(4)(1) - start(1);
+       real(2) /= cell->vertex(3)(2) - start(2);
+       break;
+      default:
+       Assert(false, ExcNotImplemented());
+    }
+  return real;
+}
+
+
+
+template <int dim>
+template <typename tensor_>
+inline
+void
+MappingCartesian<dim>::contravariant_transformation (std::vector<tensor_>       &dst,
+                                             const std::vector<tensor_> &src,
+                                             const Mapping<dim>::InternalDataBase &mapping_data,
+                                             const unsigned int src_offset) const
+{
+  Assert(tensor_::dimension==dim && tensor_::rank==1, ExcInvalidData());
+  const InternalData* data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  const InternalData &data=*data_ptr;
+
+  Assert (data.update_flags & update_contravariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+
+  typename std::vector<tensor_>::const_iterator vec = src.begin() + src_offset;
+  typename std::vector<tensor_>::iterator result = dst.begin();
+  typename std::vector<tensor_>::const_iterator end = dst.end();
+  
+  while (result!=end)
+    {
+      for (unsigned int d=0;d<dim;++d)
+       (*result)[d] = (*vec)[d]*data.length[d];
+      vec++;
+      result++;
+    }
+}
+
+
+template <int dim>
+template <typename tensor_>
+inline
+void
+MappingCartesian<dim>::covariant_transformation (std::vector<tensor_>       &dst,
+                                         const std::vector<tensor_> &src,
+                                         const Mapping<dim>::InternalDataBase &mapping_data,
+                                         const unsigned int src_offset) const
+{
+  Assert(tensor_::dimension==dim && tensor_::rank==1, ExcInvalidData());
+  const InternalData *data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  const InternalData &data=*data_ptr;
+
+  Assert (data.update_flags & update_covariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+  
+  typename std::vector<tensor_>::const_iterator vec = src.begin() + src_offset;
+  typename std::vector<tensor_>::iterator result = dst.begin();
+  typename std::vector<tensor_>::const_iterator end = dst.end();
+  
+  while (result!=end)
+    {
+      for (unsigned int d=0;d<dim;++d)
+       (*result)[d] = (*vec)[d]/data.length[d];
+      vec++;
+      result++;
+    }
+}
+
+
+
+//----------------------------------------------------------------------//
+
+template class MappingCartesian<deal_II_dimension>;
+
+template void MappingCartesian<deal_II_dimension>::contravariant_transformation (
+  std::vector<Tensor<1,deal_II_dimension> >       &dst,
+  const std::vector<Tensor<1,deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
+template void MappingCartesian<deal_II_dimension>::contravariant_transformation (
+  std::vector<Point<deal_II_dimension> >       &dst,
+  const std::vector<Point<deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
+template void MappingCartesian<deal_II_dimension>::covariant_transformation (
+  std::vector<Tensor<1,deal_II_dimension> >       &dst,
+  const std::vector<Tensor<1,deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
+template void MappingCartesian<deal_II_dimension>::covariant_transformation (
+  std::vector<Point<deal_II_dimension> >       &dst,
+  const std::vector<Point<deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1ce783904371c6bebe6268b86b4b5b13231dc26d 100644 (file)
+//----------------------------  mapping_q.cc  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  mapping_q.cc  ---------------------------
+
+#include <fe/mapping_q.h>
+#include <fe/fe_q.h>
+#include <base/quadrature.h>
+#include <base/quadrature_lib.h>
+#include <base/tensor_product_polynomials.h>
+#include <lac/full_matrix.h>
+#include <grid/tria_iterator.h>
+#include <grid/tria_boundary.h>
+#include <dofs/dof_accessor.h>
+#include <fe/mapping_q1.h>
+
+#include <numeric>
+
+
+
+template<int dim>
+MappingQ<dim>::InternalData::InternalData (unsigned int n_shape_functions):
+               MappingQ1<dim>::InternalData(n_shape_functions),
+                               use_mapping_q1_on_current_cell(false),
+                               mapping_q1_data(1 << dim)
+{
+  is_mapping_q1_data=false;
+}
+
+
+#if deal_II_dimension == 1
+
+template<>
+MappingQ<1>::MappingQ (unsigned int):
+               laplace_on_quad_vector(0),
+               laplace_on_hex_vector(0),
+               degree(1),
+               n_inner(0),
+               n_outer(0),
+               polynomials(0),
+               tensor_pols(0),
+               n_shape_functions(2),
+               renumber(0),
+               alternative_normals_computation(false),
+               use_mapping_q_on_all_cells(false)
+{}
+
+
+template<>
+MappingQ<1>::~MappingQ ()
+{}
+
+#endif
+
+
+
+template<typename number> static
+number power(number x, unsigned int y)
+{
+  number value=1;
+  for (unsigned int i=0; i<y; ++i)
+    value*=x;
+  return value;
+}
+
+
+template<int dim>
+MappingQ<dim>::MappingQ (unsigned int p):
+               laplace_on_quad_vector(0),
+               laplace_on_hex_vector(0),
+               degree(p),
+               n_inner(power(degree-1, dim)),
+               n_outer((dim==2) ? 4+4*(degree-1)
+                       :8+12*(degree-1)+6*(degree-1)*(degree-1)),
+               polynomials(p+1),
+               tensor_pols(0),
+               n_shape_functions(0),
+               renumber(0),
+               alternative_normals_computation(false),
+               use_mapping_q_on_all_cells(false)
+{
+                                  // Construct the tensor product
+                                  // polynomials used as shape
+                                  // functions for the Qp mapping of
+                                  // cells at the boundary.
+  std::vector<SmartPointer<Polynomial<double> > > pol_pointers(p+1);
+  for (unsigned int i=0; i<=p; ++i)
+    {
+      LagrangeEquidistant lagrange_pol(p, i);
+      polynomials[i] = lagrange_pol;
+      pol_pointers[i] = &(polynomials[i]);
+    }
+  tensor_pols = new TensorProductPolynomials<dim> (pol_pointers);
+  n_shape_functions=tensor_pols->n_tensor_product_polynomials();
+  Assert(n_inner+n_outer==n_shape_functions, ExcInternalError());
+  
+                                  // build the renumbering of the
+                                  // shape functions of the Qp
+                                  // mapping.
+  renumber.resize(n_shape_functions,0);
+  std::vector<unsigned int> dpo(dim+1, 1);
+  for (unsigned int i=1; i<dpo.size(); ++i)
+    dpo[i]=dpo[i-1]*(degree-1);
+  FiniteElementData<dim> fe_data(dpo, 1);
+  FE_Q<dim>::build_renumbering (fe_data, p, renumber);
+
+                                  // build laplace_on_quad_vector
+  if (degree>1)
+    {
+      set_laplace_on_quad_vector(laplace_on_quad_vector);
+      if (dim==3)
+       set_laplace_on_hex_vector(laplace_on_hex_vector);
+    }
+}
+
+
+template<int dim>
+MappingQ<dim>::~MappingQ ()
+{
+  delete tensor_pols;
+}
+
+
+
+#if deal_II_dimension == 1
+
+template<>
+void
+MappingQ<1>::compute_shapes_virtual (const std::vector<Point<1> > &unit_points,
+                                    MappingQ1<1>::InternalData &data) const
+{
+  MappingQ1<1>::compute_shapes_virtual(unit_points, data);
+}
+
+#endif
+
+
+
+template<int dim>
+void
+MappingQ<dim>::compute_shapes_virtual (const std::vector<Point<dim> > &unit_points,
+                                      MappingQ1<dim>::InternalData &data) const
+{
+  
+  const unsigned int n_points=unit_points.size();
+  std::vector<double> values;
+  std::vector<Tensor<1,dim> > grads;
+  if (data.shape_values.size()!=0)
+    {
+      Assert(data.shape_values.size()==n_shape_functions*n_points,
+            ExcInternalError());
+      values.resize(n_shape_functions);
+    }
+  if (data.shape_derivatives.size()!=0)
+    {
+      Assert(data.shape_derivatives.size()==n_shape_functions*n_points,
+            ExcInternalError());
+      grads.resize(n_shape_functions);
+    }
+  
+                                  // dummy variable of size 0
+  std::vector<Tensor<2,dim> > grad2;
+
+  
+  if (data.shape_values.size()!=0 || data.shape_derivatives.size()!=0)
+    for (unsigned int point=0; point<n_points; ++point)
+      {
+       tensor_pols->compute(unit_points[point], values, grads, grad2);
+       
+       if (data.shape_values.size()!=0)
+         for (unsigned int i=0; i<n_shape_functions; ++i)
+           data.shape(point,renumber[i]) = values[i];
+       
+       if (data.shape_derivatives.size()!=0)
+         for (unsigned int i=0; i<n_shape_functions; ++i)
+           data.derivative(point,renumber[i]) = grads[i];
+      }
+}
+
+
+template <int dim>
+UpdateFlags
+MappingQ<dim>::update_each (const UpdateFlags in) const
+{
+  UpdateFlags out=MappingQ1<dim>::update_each(in);
+
+  if (in & update_normal_vectors)
+    if (alternative_normals_computation)
+      out |= update_covariant_transformation;
+
+  return out;
+}
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingQ<dim>::get_data (const UpdateFlags update_flags,
+                        const Quadrature<dim> &quadrature) const
+{
+  InternalData *data = new InternalData(n_shape_functions);
+  compute_data (update_flags, quadrature,
+               quadrature.n_quadrature_points, *data);
+  if (!use_mapping_q_on_all_cells)
+    compute_data (update_flags, quadrature,
+                 quadrature.n_quadrature_points, data->mapping_q1_data);
+  return data;
+}
+
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingQ<dim>::get_face_data (const UpdateFlags update_flags,
+                             const Quadrature<dim-1>& quadrature) const
+{
+  InternalData *data = new InternalData(n_shape_functions);
+  QProjector<dim> q (quadrature, false);
+  compute_face_data (update_flags, q,
+                    quadrature.n_quadrature_points, *data);
+  if (!use_mapping_q_on_all_cells)
+    MappingQ1<dim>::compute_face_data (update_flags, q,
+                                      quadrature.n_quadrature_points,
+                                      data->mapping_q1_data);
+
+  return data;
+}
+
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingQ<dim>::get_subface_data (const UpdateFlags update_flags,
+                                const Quadrature<dim-1>& quadrature) const
+{
+  InternalData *data = new InternalData(n_shape_functions);
+  QProjector<dim> q (quadrature, true);
+  compute_face_data (update_flags, q,
+                    quadrature.n_quadrature_points, *data);
+  if (!use_mapping_q_on_all_cells)
+    MappingQ1<dim>::compute_face_data (update_flags, q,
+                                      quadrature.n_quadrature_points,
+                                      data->mapping_q1_data);
+
+  return data;
+}
+
+
+
+template <int dim>
+void
+MappingQ<dim>::compute_face_data (UpdateFlags update_flags,
+                                 const Quadrature<dim>& q,
+                                 const unsigned int n_original_q_points,
+                                 MappingQ1<dim>::InternalData& mapping_q1_data) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_q1_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+  
+  MappingQ1<dim>::compute_face_data(update_flags, q,
+                                   n_original_q_points, data);
+  
+#if (deal_II_dimension>1)
+  if ((data.update_flags & update_normal_vectors)
+      && alternative_normals_computation)
+    {
+      const unsigned int nfaces = GeometryInfo<dim>::faces_per_cell;
+      data.unit_normals.resize(nfaces);
+      std::vector<Tensor<1,dim> > n(nfaces);
+      if (dim==2)
+       {
+         n[0][1]=-1;
+         n[1][0]=1;
+         n[2][1]=1;
+         n[3][0]=-1;
+       }
+      else if (dim==3)
+       {
+         n[0][1]=-1;
+         n[1][1]=1;
+         n[2][2]=-1;
+         n[3][0]=1;
+         n[4][2]=1;
+         n[5][0]=-1;             
+       }
+      else
+       Assert(false, ExcNotImplemented());
+      
+      for (unsigned int i=0; i<nfaces; ++i)
+       {
+         data.unit_normals[i].resize(n_original_q_points);
+         fill (data.unit_normals[i].begin(),
+               data.unit_normals[i].end(),
+               n[i]);
+       }
+    }
+#endif
+}
+
+
+
+template <int dim>
+void
+MappingQ<dim>::fill_fe_values (const DoFHandler<dim>::cell_iterator &cell,
+                              const Quadrature<dim>                &q,
+                              Mapping<dim>::InternalDataBase      &mapping_data,
+                              std::vector<Point<dim> >                  &quadrature_points,
+                              std::vector<double>                       &JxW_values) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  data.use_mapping_q1_on_current_cell=!(use_mapping_q_on_all_cells
+                                       || cell->has_boundary_lines());
+  
+  if (data.use_mapping_q1_on_current_cell)
+    MappingQ1<dim>::fill_fe_values(cell, q, data.mapping_q1_data,
+                                  quadrature_points, JxW_values);
+  else
+    MappingQ1<dim>::fill_fe_values(cell, q, data,
+                                  quadrature_points, JxW_values);
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                                   const unsigned int       face_no,
+                                   const Quadrature<dim-1> &q,
+                                   typename Mapping<dim>::InternalDataBase &mapping_data,
+                                   std::vector<Point<dim> >     &quadrature_points,
+                                   std::vector<double>          &JxW_values,
+                                   std::vector<Tensor<1,dim> >  &exterior_forms,
+                                   std::vector<Point<dim> >     &normal_vectors) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+  
+  data.use_mapping_q1_on_current_cell=!(use_mapping_q_on_all_cells
+                                       || cell->has_boundary_lines());
+
+  const unsigned int npts=q.n_quadrature_points;
+  const unsigned int offset=face_no*npts;
+
+  if (data.use_mapping_q1_on_current_cell)
+    MappingQ1<dim>::compute_fill_face (cell, face_no, false,
+                                      npts, offset, q.get_weights(),
+                                      data.mapping_q1_data,
+                                      quadrature_points, JxW_values,
+                                      exterior_forms, normal_vectors);
+  else
+    compute_fill_face (cell, face_no, false,
+                      npts, offset, q.get_weights(),
+                      data,
+                      quadrature_points, JxW_values,
+                      exterior_forms, normal_vectors);
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                                      const unsigned int       face_no,
+                                      const unsigned int       sub_no,
+                                      const Quadrature<dim-1> &q,
+                                      typename Mapping<dim>::InternalDataBase &mapping_data,
+                                      std::vector<Point<dim> >     &quadrature_points,
+                                      std::vector<double>          &JxW_values,
+                                      std::vector<Tensor<1,dim> >  &exterior_forms,
+                                      std::vector<Point<dim> >     &normal_vectors) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  data.use_mapping_q1_on_current_cell=!(use_mapping_q_on_all_cells
+                                       || cell->has_boundary_lines());
+
+  const unsigned int npts=q.n_quadrature_points;
+  const unsigned int offset=
+    (face_no*GeometryInfo<dim>::subfaces_per_face + sub_no)*npts;
+
+  if (data.use_mapping_q1_on_current_cell)
+    MappingQ1<dim>::compute_fill_face (cell, face_no, true,
+                                      npts, offset, q.get_weights(),
+                                      data.mapping_q1_data,
+                                      quadrature_points, JxW_values,
+                                      exterior_forms, normal_vectors);
+  else
+    compute_fill_face (cell, face_no, true,
+                      npts, offset, q.get_weights(),
+                      data,
+                      quadrature_points, JxW_values,
+                      exterior_forms, normal_vectors);
+}
+
+
+#if deal_II_dimension==1
+
+template <>
+void
+MappingQ<1>::set_laplace_on_quad_vector(std::vector<std::vector<double> > &) const
+{
+  Assert(false, ExcInternalError());
+}
+
+#else
+
+template <int dim>
+void
+MappingQ<dim>::set_laplace_on_quad_vector(std::vector<std::vector<double> > &loqvs) const
+{
+  Assert(degree>1, ExcInternalError());
+  const unsigned int n_inner_2d=(degree-1)*(degree-1);
+  const unsigned int n_outer_2d=4+4*(degree-1);
+  
+  double const *loqv_ptr=0;
+  if (degree==2)
+    {
+      static const double loqv2[1*8]
+       ={1/16., 1/16., 1/16., 1/16., 3/16., 3/16., 3/16., 3/16.};
+      loqv_ptr=&loqv2[0];
+    }
+  else if (degree==3)
+    {
+      static double loqv3[4*12]
+       ={80/1053., 1/81., 11/1053., 1/81., 25/117., 44/351.,
+         7/117., 16/351., 7/117., 16/351., 25/117., 44/351.,
+         1/81., 80/1053., 1/81., 11/1053., 44/351., 25/117.,
+         25/117., 44/351., 16/351., 7/117., 7/117., 16/351.,
+         1/81., 11/1053., 1/81., 80/1053., 7/117., 16/351.,
+         16/351., 7/117., 25/117., 44/351., 44/351., 25/117.,
+         11/1053., 1/81., 80/1053., 1/81., 16/351., 7/117.,
+         44/351., 25/117., 44/351., 25/117., 16/351., 7/117.};
+      
+      loqv_ptr=&loqv3[0];
+    }
+  
+  if (loqv_ptr!=0)
+    {
+      loqvs.resize(n_inner_2d);
+      for (unsigned int unit_point=0; unit_point<n_inner_2d; ++unit_point)
+       {
+         loqvs[unit_point].resize(n_outer_2d, 0);
+         std::vector<double> &loqv=loqvs[unit_point];
+         for (unsigned int k=0; k<n_outer_2d; ++k)
+           loqv[k]=loqv_ptr[unit_point*n_outer_2d+k];
+       }
+    }
+  else
+    {
+      if (dim==2)
+       compute_laplace_vector(loqvs);
+    }
+
+  
+  for (unsigned int unit_point=0; unit_point<loqvs.size(); ++unit_point)
+    Assert(fabs(accumulate(
+      loqvs[unit_point].begin(),
+      loqvs[unit_point].end(),0.)-1)<1e-13,
+          ExcInternalError());
+  
+                                  // TEST output
+  if (false)
+    {
+      std::cout << "degree=" << degree << std::endl;
+      for (unsigned int unit_point=0; unit_point<loqvs.size(); ++unit_point)
+       for (unsigned int k=0; k<n_outer_2d; ++k)
+         std::cout << loqvs[unit_point][k] << std::endl;
+    }
+}
+
+#endif
+
+
+#if deal_II_dimension==3
+
+template <>
+void
+MappingQ<3>::set_laplace_on_hex_vector(std::vector<std::vector<double> > &lohvs) const
+{
+  Assert(degree>1, ExcInternalError());
+
+  double const *lohv_ptr=0;
+  if (degree==2)
+    {
+      static const double loqv2[26]
+       ={1/128., 1/128., 1/128., 1/128., 1/128., 1/128., 1/128., 1/128.,
+         7/192., 7/192., 7/192., 7/192., 7/192., 7/192., 7/192., 7/192.,
+         7/192., 7/192., 7/192., 7/192.,
+         1/12., 1/12., 1/12., 1/12., 1/12., 1/12.};
+      
+      lohv_ptr=&loqv2[0];
+    }
+  
+  if (lohv_ptr!=0)
+    {
+      lohvs.resize(n_inner);
+      for (unsigned int unit_point=0; unit_point<n_inner; ++unit_point)
+       {
+         lohvs[unit_point].resize(n_outer, 0);
+         std::vector<double> &loqv=lohvs[unit_point];
+         for (unsigned int k=0; k<n_outer; ++k)
+           loqv[k]=lohv_ptr[unit_point*n_outer+k];
+       }
+    }
+  else
+    compute_laplace_vector(lohvs);
+    
+  for (unsigned int unit_point=0; unit_point<n_inner; ++unit_point)
+    Assert(fabs(accumulate(
+      lohvs[unit_point].begin(),
+      lohvs[unit_point].end(),0.)-1)<1e-13,
+          ExcInternalError());
+  
+                                  // TEST output
+  if (false)
+    {
+      std::cout << "degree=" << degree << std::endl;
+      for (unsigned int unit_point=0; unit_point<n_inner; ++unit_point)
+       for (unsigned int k=0; k<n_outer; ++k)
+         std::cout << lohvs[unit_point][k] << std::endl;
+    }
+}
+
+#endif
+
+
+template <int dim>
+void
+MappingQ<dim>::set_laplace_on_hex_vector(std::vector<std::vector<double> > &) const
+{
+  Assert(false, ExcInternalError());
+}
+
+
+
+
+#if deal_II_dimension==1
+
+template <>
+void
+MappingQ<1>::compute_laplace_vector(std::vector<std::vector<double> > &) const
+{
+  Assert(false, ExcInternalError());
+}
+
+#else
+
+
+template <int dim>
+void
+MappingQ<dim>::compute_laplace_vector(std::vector<std::vector<double> > &lvs) const
+{
+  Assert(lvs.size()==0, ExcInternalError());
+  Assert(dim==2 || dim==3, ExcNotImplemented());
+  Assert(degree>1, ExcInternalError());
+
+                                  // compute the shape
+                                  // gradients at the quadrature
+                                  // points on the unit cell
+  QGauss4<dim> quadrature;
+  const unsigned int n_q_points=quadrature.n_quadrature_points;
+  
+  InternalData quadrature_data(n_shape_functions);
+  quadrature_data.shape_derivatives
+    .resize(n_shape_functions * n_q_points);
+  compute_shapes(quadrature.get_points(), quadrature_data);
+  
+                                  // Compute the stiffness matrix of
+                                  // the inner dofs
+  FullMatrix<double> S(n_inner);
+  for (unsigned int point=0; point<n_q_points; ++point)
+    for (unsigned int i=0; i<n_inner; ++i)
+      for (unsigned int j=0; j<n_inner; ++j)
+       S(i,j)+=contract(quadrature_data.derivative(point, n_outer+i),
+                        quadrature_data.derivative(point, n_outer+j))
+               *quadrature.weight(point);
+  
+                                  // Compute the components of T to be the
+                                  // product of gradients of inner and
+                                  // outer shape functions.
+  FullMatrix<double> T(n_inner, n_outer);
+  for (unsigned int point=0; point<n_q_points; ++point)
+    for (unsigned int i=0; i<n_inner; ++i)
+      for (unsigned int k=0; k<n_outer; ++k)
+       T(i,k)+=contract(quadrature_data.derivative(point, n_outer+i),
+                        quadrature_data.derivative(point, k))
+               *quadrature.weight(point);
+  
+  FullMatrix<double> S_1(n_inner);
+  S_1.invert(S);
+  
+  FullMatrix<double> S_1_T(n_inner, n_outer);
+  
+                                  // S:=S_1*T
+  S_1.mmult(S_1_T,T);
+  
+                                  // compute the inner
+                                  // unit_support_points
+  std::vector<Point<dim> > inner_unit_support_points(n_inner);
+  const double step = 1./degree;
+  const unsigned int z_end=(dim==3) ? degree : 2;
+  unsigned int iall=0;
+  for (unsigned int iz=1; iz<z_end; ++iz)
+    for (unsigned int iy=1; iy<degree; ++iy)
+      for (unsigned int ix=1; ix<degree; ++ix, ++iall)
+       {
+         Point<dim> &p=inner_unit_support_points[iall];
+         p(0)=ix*step;
+         p(1)=iy*step;
+         if (dim==3)
+           p(2)=iz*step;
+       }
+  Assert(iall==n_inner, ExcInternalError());
+  
+                                  // Compute the shape values at
+                                  // the inner
+                                  // unit_support_points
+  InternalData support_data(n_shape_functions);
+  support_data.shape_values.resize(n_shape_functions * n_inner);
+  
+  compute_shapes(inner_unit_support_points, support_data);
+  
+                                  // Resize and initialize the
+                                  // lvs
+  lvs.resize(n_inner);
+  for (unsigned int unit_point=0; unit_point<n_inner; ++unit_point)
+    lvs[unit_point].resize(n_outer, 0);
+  
+                                  // fill this vector
+  for (unsigned int unit_point=0; unit_point<n_inner; ++unit_point)
+    {
+      std::vector<double> &lv=lvs[unit_point];
+      for (unsigned int k=0; k<n_outer; ++k)
+       {
+         double sum=0;
+         for (unsigned int i=0; i<n_inner; ++i)
+           sum+=support_data.shape(unit_point, n_outer+i)
+                * S_1_T(i,k);
+             
+         lv[k]=-sum+support_data.shape(unit_point, k);
+       }
+    }
+}
+
+#endif
+
+
+
+template <int dim>
+void
+MappingQ<dim>::apply_laplace_vector(const std::vector<std::vector<double> > &lvs,
+                                   std::vector<Point<dim> > &a) const
+{
+  Assert(lvs.size()!=0, ExcLaplaceVectorNotSet(degree));
+  const unsigned int n_inner_apply=lvs.size();
+  Assert(n_inner_apply==n_inner || n_inner_apply==(degree-1)*(degree-1),
+        ExcInternalError());
+  const unsigned int n_outer_apply=lvs[0].size();
+  Assert(a.size()==n_outer_apply, ExcDimensionMismatch(a.size(), n_outer_apply));
+
+  for (unsigned int unit_point=0; unit_point<n_inner_apply; ++unit_point)
+    {
+      const std::vector<double> &lv=lvs[unit_point];
+      Assert(lv.size()==n_outer_apply, ExcInternalError());
+      Point<dim> p;
+      for (unsigned int k=0; k<n_outer_apply; ++k)
+       p+=lv[k]*a[k];
+
+      a.push_back(p);
+    }
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::compute_mapping_support_points(
+  const typename Triangulation<dim>::cell_iterator &cell,
+  std::vector<Point<dim> > &a) const
+{
+  if (use_mapping_q_on_all_cells || cell->has_boundary_lines())
+    compute_support_points_laplace(cell, a);
+//  compute_support_points_simple(cell, a);
+  else
+    {
+      a.resize(GeometryInfo<dim>::vertices_per_cell);
+      
+      for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+       a[i] = cell->vertex(vertex_mapping[i]);
+    }
+}
+
+  
+template <int dim>
+void
+MappingQ<dim>::compute_support_points_laplace(const typename Triangulation<dim>::cell_iterator &cell,
+                                             std::vector<Point<dim> > &a) const
+{
+  a.resize(0);
+                                  // the vertices first
+  for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+    a.push_back(cell->vertex(i));
+  
+  if (degree>1)
+    {
+      if (dim==1)
+       {
+         Assert(false, ExcNotImplemented());
+       }
+      else
+       {
+                                          // then the points on lines
+                                          // (for dim=2,3)
+         add_line_support_points (cell, a);
+         
+         if (dim==2)
+           apply_laplace_vector(laplace_on_quad_vector,a);
+         else if (dim==3)
+           {
+             add_face_support_points(cell, a);
+             
+              apply_laplace_vector(laplace_on_hex_vector, a);
+           }
+       }
+    }    
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::compute_support_points_simple(const typename Triangulation<dim>::cell_iterator &cell,
+                                            std::vector<Point<dim> > &a) const
+{
+                                  // the vertices first
+  for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+    a.push_back(cell->vertex(i));
+  
+  if (degree>1)
+    {
+                                      // then the points on lines
+                                      // (for dim=2,3)
+      add_line_support_points (cell, a);
+      
+                                      // then the points on quads
+                                      // (for dim=3)
+      fill_quad_support_points_simple (cell, a);
+      
+                                      // then the points in cell    
+      Point<dim> middle;
+      compute_midpoint(a, middle);
+      
+      if (degree==2)
+       a.push_back(middle);
+      else if (degree==3)
+                                        // The four points in the
+                                        // cell are located at the
+                                        // midpoint between the
+                                        // middle point and the 4
+                                        // vertices
+
+                                        // TODO: better position of
+                                        // points: transform them by
+                                        // a Q2 transformation.
+       for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+         a.push_back(middle*2./3.+cell->vertex(vertex_mapping[i])/3.);
+      else if (degree==4)
+       {
+         Assert(a.size()==16, ExcInternalError());
+         a.insert(a.end(), 9, Point<dim>());
+
+         const unsigned int inner_map[8]=
+         { 0, 1, 2, 5, 8, 7, 6, 3 };
+         
+         
+                                          // The nine points in the
+                                          // cell are located at the
+                                          // midpoint between the
+                                          // middle point and (the 4
+                                          // vertices and the face
+                                          // midpoints)
+
+         a[16+4]=middle;
+         for (unsigned int i=0, j=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+           {
+             a[16+inner_map[j++]]=(middle+cell->vertex(i))/2.;
+             a[16+inner_map[j++]]=(middle+(cell->vertex(i)+cell->vertex((i+1)%4))/2.)/2.;
+           }
+       }
+      else
+       Assert(false, ExcNotImplemented());
+    }
+  Assert(a.size()==n_shape_functions, ExcInternalError());
+
+}
+
+
+
+template <int dim> static
+void compute_midpoint(const std::vector<Point<dim> > &points, Point<dim> &m)
+{
+  typename std::vector<Point<dim> >::const_iterator p_iter=points.begin();
+  const typename std::vector<Point<dim> >::const_iterator p_end=points.end();
+  for (; p_iter!=p_end; ++p_iter)
+    m+=*p_iter;
+  m/=points.size();
+}
+
+
+
+#if deal_II_dimension==1
+
+template <>
+void
+MappingQ<1>::add_line_support_points (const Triangulation<1>::cell_iterator &,
+                                  std::vector<Point<1> > &) const
+{}
+
+#endif
+
+
+template <int dim>
+void
+MappingQ<dim>::add_line_support_points (const Triangulation<dim>::cell_iterator &cell,
+                                    std::vector<Point<dim> > &a) const
+{
+  const Boundary<dim> *boundary;
+
+  std::vector<Point<dim> > line_points;
+  if (degree>2)
+    line_points.resize(degree-1);
+  
+  Triangulation<dim>::line_iterator line;
+  for (unsigned int line_no=0; line_no<GeometryInfo<dim>::lines_per_cell; ++line_no)
+    {
+      line = cell->line(line_no);
+      if (line->at_boundary())
+       boundary=&line->get_triangulation().get_boundary(line->boundary_indicator());
+      else
+       boundary=&straight_boundary;
+      
+      if (degree==2)
+       a.push_back(boundary->get_new_point_on_line(line));
+      else
+       {
+         boundary->get_intermediate_points_on_line (line, line_points);
+         for (unsigned int i=0; i<line_points.size(); ++i)
+           a.push_back(line_points[i]);
+       } 
+    }
+}
+
+
+
+
+#if deal_II_dimension==3
+
+template<>
+void
+MappingQ<3>::add_face_support_points(const Triangulation<3>::cell_iterator &cell,
+                                  std::vector<Point<3> > &a) const
+{
+  const unsigned int faces_per_cell=GeometryInfo<3>::faces_per_cell,
+                 vertices_per_face=GeometryInfo<3>::vertices_per_face,
+                    lines_per_face=GeometryInfo<3>::lines_per_face,
+                 vertices_per_cell=GeometryInfo<3>::vertices_per_cell;
+  
+  static const unsigned int face_vertex_to_cell_vertex
+    [faces_per_cell][vertices_per_face]={{0,1,2,3},
+                                        {4,5,6,7},
+                                        {0,1,5,4},
+                                        {1,5,6,2},
+                                        {3,2,6,7},
+                                        {0,4,7,3}};
+  
+  static const unsigned int face_line_to_cell_line
+    [faces_per_cell][lines_per_face]={{0,1,2,3},
+                                     {4,5,6,7},
+                                     {0,9,4,8},
+                                     {9,5,10,1},
+                                     {2,10,6,11},
+                                     {8,7,11,3}};
+  
+  
+  Triangulation<3>::face_iterator face;
+  for (unsigned int face_no=0; face_no<faces_per_cell; ++face_no)
+    {
+      face=cell->face(face_no);
+      for (unsigned int i=0; i<vertices_per_face; ++i)
+       Assert(face->vertex_index(i)==
+              cell->vertex_index(face_vertex_to_cell_vertex[face_no][i]),
+              ExcInternalError());
+      
+      for (unsigned int i=0; i<lines_per_face; ++i)
+       Assert(face->line(i)==
+              cell->line(face_line_to_cell_line[face_no][i]),
+              ExcInternalError());
+      
+      if (face->at_boundary())
+       {
+         std::vector<Point<3> > quad_points;
+         quad_points.resize((degree-1)*(degree-1));
+
+         face->get_triangulation().get_boundary(face->boundary_indicator())
+           .get_intermediate_points_on_quad (face, quad_points);
+         
+         for (unsigned int i=0; i<quad_points.size(); ++i)
+           a.push_back(quad_points[i]);
+       }
+      else
+       {
+         unsigned int lines_at_boundary=0;
+         for (unsigned int i=0; i<lines_per_face; ++i)
+           if (face->line(i)->at_boundary())
+             ++lines_at_boundary;
+         
+         Assert(lines_at_boundary<lines_per_face, ExcInternalError());
+         
+         if (lines_at_boundary>0)
+           {
+                                              // sort the points into b
+             static std::vector<Point<3> > b;
+             b.resize(4*degree);
+             Assert(4*degree==vertices_per_face+lines_per_face*(degree-1),
+                    ExcDimensionMismatch(4*degree,
+                                         vertices_per_face+lines_per_face*(degree-1)));
+             for (unsigned int i=0; i<vertices_per_face; ++i)
+               b[i]=a[face_vertex_to_cell_vertex[face_no][i]];
+                     
+             for (unsigned int i=0; i<lines_per_face; ++i)
+               for (unsigned int j=0; j<degree-1; ++j)
+                 b[vertices_per_face+i*(degree-1)+j]=
+                   a[vertices_per_cell+face_line_to_cell_line[face_no][i]*(degree-1)+j];
+                 
+             apply_laplace_vector(laplace_on_quad_vector, b);
+             Assert(b.size()==4*degree+(degree-1)*(degree-1),
+                    ExcDimensionMismatch(b.size(), 4*degree+(degree-1)*(degree-1)));
+             
+             for (unsigned int i=0; i<(degree-1)*(degree-1); ++i)
+               a.push_back(b[4*degree+i]);
+           }
+         else
+           {
+             std::vector<Point<3> > quad_points;
+             quad_points.resize((degree-1)*(degree-1));
+             
+             straight_boundary.get_intermediate_points_on_quad (face, quad_points);
+             
+             for (unsigned int i=0; i<quad_points.size(); ++i)
+               a.push_back(quad_points[i]);
+           }
+       }
+    }
+}
+
+#endif
+
+template<int dim>
+void
+MappingQ<dim>::add_face_support_points(const typename Triangulation<dim>::cell_iterator &,
+                                      std::vector<Point<dim> > &) const
+{
+  Assert(false, ExcInternalError());
+}
+
+
+
+
+#if deal_II_dimension==3
+
+template <>
+void
+MappingQ<3>::fill_quad_support_points_simple (const Triangulation<3>::cell_iterator &cell,
+                                  std::vector<Point<3> > &a) const
+{
+  const Boundary<3> *boundary;
+
+  std::vector<Point<3> > quad_points;
+  Assert(degree>1, ExcInternalError());
+  quad_points.resize((degree-1)*(degree-1));
+  
+  Triangulation<3>::quad_iterator quad;
+  for (unsigned int quad_no=0; quad_no<GeometryInfo<3>::quads_per_cell; ++quad_no)
+    {
+      quad = cell->face(quad_no);
+      if (quad->at_boundary())
+       boundary=&quad->get_triangulation().get_boundary(quad->boundary_indicator());
+      else
+       boundary=&straight_boundary;
+
+      boundary->get_intermediate_points_on_quad (quad, quad_points);
+      for (unsigned int i=0; i<quad_points.size(); ++i)
+       a.push_back(quad_points[i]);
+    }
+}
+
+#endif
+
+template <int dim>
+void
+MappingQ<dim>::fill_quad_support_points_simple (const Triangulation<dim>::cell_iterator &,
+                                               std::vector<Point<dim> > &) const
+{}
+
+
+
+//TODO: remove call of cross_product for dim==2
+#if deal_II_dimension==2
+
+void cross_product (Tensor<1,2> &, const Tensor<1,2> &, const Tensor<1,2> &)
+{
+  Assert(false, ExcInternalError());
+}
+
+#endif
+
+template <int dim>
+void
+MappingQ<dim>::compute_fill_face (const typename DoFHandler<dim>::cell_iterator &cell,
+                                 const unsigned int            face_no,
+                                 const bool                    is_subface,
+                                 const unsigned int            npts,
+                                 const unsigned int            offset,
+                                 const std::vector<double>         &weights,
+                                 MappingQ1<dim>::InternalData &mapping_q1_data,
+                                 std::vector<Point<dim> >          &quadrature_points,
+                                 std::vector<double>               &JxW_values,
+                                 std::vector<Tensor<1,dim> >       &boundary_forms,
+                                 std::vector<Point<dim> >          &normal_vectors) const
+{
+  MappingQ1<dim>::compute_fill_face (cell, face_no, is_subface,
+                                    npts,
+                                    offset,
+                                    weights,
+                                    mapping_q1_data,
+                                    quadrature_points,
+                                    JxW_values,
+                                    boundary_forms,
+                                    normal_vectors);
+  
+  const UpdateFlags update_flags(mapping_q1_data.current_update_flags());
+
+  if ((update_flags & update_normal_vectors)
+      && alternative_normals_computation)
+    {
+      InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_q1_data);
+      Assert(data_ptr!=0, ExcInternalError());
+      InternalData &data=*data_ptr;
+
+      transform_covariant(normal_vectors,
+                         data.unit_normals[face_no],
+                         data, 0);
+      
+      for (unsigned int i=0; i<normal_vectors.size(); ++i)
+       normal_vectors[i] /= sqrt(normal_vectors[i].square());
+    }
+}
+
+
+
+template <int dim>
+void
+MappingQ<dim>::transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                                   const std::vector<Tensor<1,dim> > &src,
+                                   const Mapping<dim>::InternalDataBase &mapping_data,
+                                   const unsigned int src_offset) const
+{
+  const MappingQ1<dim>::InternalData *q1_data_ptr =
+    dynamic_cast<const MappingQ1<dim>::InternalData *> (&mapping_data);
+  Assert(q1_data_ptr!=0, ExcInternalError());
+  const MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
+
+  if (q1_data.is_mapping_q1_data)
+    covariant_transformation(dst, src, q1_data, src_offset);
+  else
+    {
+      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
+      Assert(data_ptr!=0, ExcInternalError());
+      const InternalData &data=*data_ptr;
+
+      if (data.use_mapping_q1_on_current_cell)
+       covariant_transformation(dst, src, data.mapping_q1_data, src_offset);
+      else
+       covariant_transformation(dst, src, data, src_offset);    
+    }
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::transform_covariant (std::vector<Point<dim> >       &dst,
+                                   const std::vector<Point<dim> > &src,
+                                   const Mapping<dim>::InternalDataBase &mapping_data,
+                                   const unsigned int src_offset) const
+{
+  const MappingQ1<dim>::InternalData *q1_data_ptr =
+    dynamic_cast<const MappingQ1<dim>::InternalData *> (&mapping_data);
+  Assert(q1_data_ptr!=0, ExcInternalError());
+  const MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
+
+  if (q1_data.is_mapping_q1_data)
+    covariant_transformation(dst, src, q1_data, src_offset);
+  else
+    {
+      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
+      Assert(data_ptr!=0, ExcInternalError());
+      const InternalData &data=*data_ptr;
+
+      if (data.use_mapping_q1_on_current_cell)
+       covariant_transformation(dst, src, data.mapping_q1_data, src_offset);
+      else
+       covariant_transformation(dst, src, data, src_offset);    
+    }  
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                                       const std::vector<Tensor<1,dim> > &src,
+                                       const Mapping<dim>::InternalDataBase &mapping_data,
+                                       const unsigned int src_offset) const
+{
+  const MappingQ1<dim>::InternalData *q1_data_ptr =
+    dynamic_cast<const MappingQ1<dim>::InternalData *> (&mapping_data);
+  Assert(q1_data_ptr!=0, ExcInternalError());
+  const MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
+
+  if (q1_data.is_mapping_q1_data)
+    contravariant_transformation(dst, src, q1_data, src_offset);
+  else
+    {
+      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
+      Assert(data_ptr!=0, ExcInternalError());
+      const InternalData &data=*data_ptr;
+
+      if (data.use_mapping_q1_on_current_cell)
+       contravariant_transformation(dst, src, data.mapping_q1_data, src_offset);
+      else
+       contravariant_transformation(dst, src, data, src_offset);    
+    }
+}
+
+
+template <int dim>
+void
+MappingQ<dim>::transform_contravariant (std::vector<Point<dim> >       &dst,
+                                       const std::vector<Point<dim> > &src,
+                                       const Mapping<dim>::InternalDataBase &mapping_data,
+                                       const unsigned int src_offset) const
+{
+  const MappingQ1<dim>::InternalData *q1_data_ptr =
+    dynamic_cast<const MappingQ1<dim>::InternalData *> (&mapping_data);
+  Assert(q1_data_ptr!=0, ExcInternalError());
+  const MappingQ1<dim>::InternalData &q1_data=*q1_data_ptr;
+
+  if (q1_data.is_mapping_q1_data)
+    contravariant_transformation(dst, src, q1_data, src_offset);
+  else
+    {
+      const InternalData *data_ptr = dynamic_cast<const InternalData *> (q1_data_ptr);
+      Assert(data_ptr!=0, ExcInternalError());
+      const InternalData &data=*data_ptr;
+
+      if (data.use_mapping_q1_on_current_cell)
+       contravariant_transformation(dst, src, data.mapping_q1_data, src_offset);
+      else
+       contravariant_transformation(dst, src, data, src_offset);    
+    }  
+}
+
+
+
+
+template class MappingQ<deal_II_dimension>;
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..79b70e7c79827c76b52d3a0cd77a75c1763a6f16 100644 (file)
+//----------------------------  mapping_q1.cc  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  mapping_q1.cc  ---------------------------
+
+#include <base/tensor.h>
+#include <base/quadrature.h>
+#include <lac/full_matrix.h>
+#include <grid/tria.h>
+#include <grid/tria_iterator.h>
+#include <dofs/dof_accessor.h>
+#include <fe/mapping_q1.h>
+#include <fe/fe_values.h>
+
+#include <cmath>
+#include <algorithm>
+
+
+
+
+template<int dim>
+MappingQ1<dim>::InternalData::InternalData (unsigned int n_shape_functions):
+               n_shape_functions(n_shape_functions),
+               is_mapping_q1_data(true)
+{}
+
+
+template<int dim> inline
+double
+MappingQ1<dim>::InternalData::shape (unsigned int qpoint,
+                                    unsigned int shape_nr) const
+{
+  Assert(qpoint*n_shape_functions + shape_nr < shape_values.size(),
+        ExcIndexRange(qpoint*n_shape_functions + shape_nr, 0, shape_values.size()));
+  return shape_values [qpoint*n_shape_functions + shape_nr];
+}
+
+
+
+template<int dim> inline
+double&
+MappingQ1<dim>::InternalData::shape (unsigned int qpoint,
+                                    unsigned int shape_nr)
+{
+  Assert(qpoint*n_shape_functions + shape_nr < shape_values.size(),
+        ExcIndexRange(qpoint*n_shape_functions + shape_nr, 0, shape_values.size()));
+  return shape_values [qpoint*n_shape_functions + shape_nr];
+}
+
+
+template<int dim> inline
+Tensor<1,dim>
+MappingQ1<dim>::InternalData::derivative (unsigned int qpoint,
+                                         unsigned int shape_nr) const
+{
+  Assert(qpoint*n_shape_functions + shape_nr < shape_derivatives.size(),
+        ExcIndexRange(qpoint*n_shape_functions + shape_nr, 0, shape_derivatives.size()));
+  return shape_derivatives [qpoint*n_shape_functions + shape_nr];
+}
+
+
+
+template<int dim> inline
+Tensor<1,dim>&
+MappingQ1<dim>::InternalData::derivative (unsigned int qpoint,
+                                         unsigned int shape_nr)
+{
+  Assert(qpoint*n_shape_functions + shape_nr < shape_derivatives.size(),
+        ExcIndexRange(qpoint*n_shape_functions + shape_nr, 0, shape_derivatives.size()));
+  return shape_derivatives [qpoint*n_shape_functions + shape_nr];
+}
+
+
+template<int dim>
+void
+MappingQ1<dim>::compute_shapes (const std::vector<Point<dim> > &unit_points,
+                               InternalData &data) const
+{
+  if (data.is_mapping_q1_data)
+    MappingQ1<dim>::compute_shapes_virtual(unit_points, data);
+  else
+    compute_shapes_virtual(unit_points, data);
+}
+
+
+#if (deal_II_dimension == 1)
+
+template<>
+const unsigned int MappingQ1<deal_II_dimension>::vertex_mapping[2] =
+{ 0, 1
+};
+
+
+template<>
+void
+MappingQ1<1>::compute_shapes_virtual (const std::vector<Point<1> > &unit_points,
+                                     InternalData& data) const
+{
+  const unsigned int n_points=unit_points.size();
+  for (unsigned int k = 0 ; k < n_points ; ++k)
+    {
+      double x = unit_points[k](0);
+      
+      if (data.shape_values.size()!=0)
+       {
+         Assert(data.shape_values.size()==n_shape_functions*n_points,
+                ExcInternalError());
+         data.shape(k,0) = 1.-x;
+         data.shape(k,1) = x;
+       }
+      if (data.shape_derivatives.size()!=0)
+       {
+         Assert(data.shape_derivatives.size()==n_shape_functions*n_points,
+                ExcInternalError());
+         data.derivative(k,0)[0] = -1.;
+         data.derivative(k,1)[0] = 1.;
+       }
+    }
+}
+
+#endif
+
+#if (deal_II_dimension == 2)
+
+template<> const unsigned int
+MappingQ1<2>::vertex_mapping[4] =
+{
+  0, 1, 3, 2
+};
+
+
+template<>
+void
+MappingQ1<2>::compute_shapes_virtual (const std::vector<Point<2> > &unit_points,
+                                     InternalData &data) const
+{
+  const unsigned int n_points=unit_points.size();
+  for (unsigned int k = 0 ; k < n_points ; ++k)
+    {
+      double x = unit_points[k](0);
+      double y = unit_points[k](1);
+      
+      if (data.shape_values.size()!=0)
+       {
+         Assert(data.shape_values.size()==n_shape_functions*n_points,
+                ExcInternalError());
+         data.shape(k,0) = (1.-x)*(1.-y);
+         data.shape(k,1) = x*(1.-y);
+         data.shape(k,2) = (1.-x)*y;
+         data.shape(k,3) = x*y;
+       }
+      if (data.shape_derivatives.size()!=0)
+       {
+         Assert(data.shape_derivatives.size()==n_shape_functions*n_points,
+                ExcInternalError());
+         data.derivative(k,0)[0] = (y-1.);
+         data.derivative(k,1)[0] = (1.-y);
+         data.derivative(k,2)[0] = -y;
+         data.derivative(k,3)[0] = y;
+         data.derivative(k,0)[1] = (x-1.);
+         data.derivative(k,1)[1] = -x;
+         data.derivative(k,2)[1] = (1.-x);
+         data.derivative(k,3)[1] = x;
+       }
+    }
+}
+
+#endif
+
+#if (deal_II_dimension == 3)
+
+template<>
+const unsigned int MappingQ1<deal_II_dimension>::vertex_mapping[8] =
+{
+  0, 1, 4, 5, 3, 2, 7, 6
+};
+
+
+template<>
+void
+MappingQ1<3>::compute_shapes_virtual (const std::vector<Point<3> > &unit_points,
+                                     InternalData &data) const
+{
+  const unsigned int n_points=unit_points.size();
+  for (unsigned int k = 0 ; k < n_points ; ++k)
+    {
+      double x = unit_points[k](0);
+      double y = unit_points[k](1);
+      double z = unit_points[k](2);
+      
+      if (data.shape_values.size()!=0)
+       {
+         Assert(data.shape_values.size()==n_shape_functions*n_points,
+                ExcInternalError());
+         data.shape(k,0) = (1.-x)*(1.-y)*(1.-z);
+         data.shape(k,1) = x*(1.-y)*(1.-z);
+         data.shape(k,2) = (1.-x)*y*(1.-z);
+         data.shape(k,3) = x*y*(1.-z);
+         data.shape(k,4) = (1.-x)*(1.-y)*z;
+         data.shape(k,5) = x*(1.-y)*z;
+         data.shape(k,6) = (1.-x)*y*z;
+         data.shape(k,7) = x*y*z;
+       }
+      if (data.shape_derivatives.size()!=0)
+       {
+         Assert(data.shape_derivatives.size()==n_shape_functions*n_points,
+                ExcInternalError());
+         data.derivative(k,0)[0] = (y-1.)*(1.-z);
+         data.derivative(k,1)[0] = (1.-y)*(1.-z);
+         data.derivative(k,2)[0] = -y*(1.-z);
+         data.derivative(k,3)[0] = y*(1.-z);
+         data.derivative(k,4)[0] = (y-1.)*z;
+         data.derivative(k,5)[0] = (1.-y)*z;
+         data.derivative(k,6)[0] = -y*z;
+         data.derivative(k,7)[0] = y*z;
+         data.derivative(k,0)[1] = (x-1.)*(1.-z);
+         data.derivative(k,1)[1] = -x*(1.-z);
+         data.derivative(k,2)[1] = (1.-x)*(1.-z);
+         data.derivative(k,3)[1] = x*(1.-z);
+         data.derivative(k,4)[1] = (x-1.)*z;
+         data.derivative(k,5)[1] = -x*z;
+         data.derivative(k,6)[1] = (1.-x)*z;
+         data.derivative(k,7)[1] = x*z;
+         data.derivative(k,0)[2] = (x-1)*(1.-y);
+         data.derivative(k,1)[2] = x*(y-1.);
+         data.derivative(k,2)[2] = (x-1.)*y;
+         data.derivative(k,3)[2] = -x*y;
+         data.derivative(k,4)[2] = (1.-x)*(1.-y);
+         data.derivative(k,5)[2] = x*(1.-y);
+         data.derivative(k,6)[2] = (1.-x)*y;
+         data.derivative(k,7)[2] = x*y;
+       }
+    }
+}
+
+#endif
+
+template <int dim>
+UpdateFlags
+MappingQ1<dim>::update_once (const UpdateFlags in) const
+{
+  UpdateFlags out = UpdateFlags(in & (update_transformation_values
+                                     | update_transformation_gradients));
+
+                                  // Shape function values
+  if (in & update_q_points)
+    out |= update_transformation_values;
+
+                                  // Shape function gradients
+  if (in & (update_covariant_transformation
+           | update_contravariant_transformation
+           | update_JxW_values
+           | update_gradients
+           | update_boundary_forms
+           | update_normal_vectors))
+    out |= update_transformation_gradients;
+
+  //  cerr << "Once: " << hex << out << dec << endl;
+
+  return out;
+}
+
+template <int dim>
+UpdateFlags
+MappingQ1<dim>::update_each (const UpdateFlags in) const
+{
+                                  // Select flags of concern for the
+                                  // transformation.
+  UpdateFlags out = UpdateFlags(in & (update_q_points
+                                     | update_covariant_transformation
+                                     | update_contravariant_transformation
+                                     | update_JxW_values
+                                     | update_boundary_forms
+                                     | update_normal_vectors));
+
+  //  cerr << "Mapping-each " << hex << in << ' ' << out;
+  
+  if (in & update_normal_vectors)
+    out |= update_boundary_forms;
+  
+  if (in & (update_covariant_transformation
+           | update_JxW_values
+           | update_boundary_forms
+           | update_normal_vectors))
+    out |= update_contravariant_transformation;
+
+  //  cerr << "  " << hex << out << dec << endl;
+  
+  return out;
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::compute_data (const UpdateFlags update_flags,
+                             const Quadrature<dim>& q,
+                             const unsigned int n_original_q_points,
+                             InternalData& data) const
+{
+  const unsigned int npts = q.n_quadrature_points;
+
+  data.update_once = update_once(update_flags);
+  data.update_each = update_each(update_flags);
+  data.update_flags = data.update_once | data.update_each;
+
+  const UpdateFlags flags(data.update_flags);
+  
+  //  cerr << "Data: " << hex << flags << dec << endl;
+
+  if (flags & update_transformation_values)
+    data.shape_values.resize(data.n_shape_functions * npts);
+
+  if (flags & update_transformation_gradients)
+    data.shape_derivatives.resize(data.n_shape_functions * npts);
+
+  if (flags & update_covariant_transformation)
+    data.covariant.resize(n_original_q_points);
+
+  if (flags & update_contravariant_transformation)
+    data.contravariant.resize(n_original_q_points);
+
+  compute_shapes (q.get_points(), data);
+}
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingQ1<dim>::get_data (const UpdateFlags update_flags,
+                         const Quadrature<dim>& q) const
+{
+  InternalData* data = new InternalData(n_shape_functions);
+  compute_data (update_flags, q, q.n_quadrature_points, *data);
+  return data;
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::compute_face_data (UpdateFlags update_flags,
+                                  const Quadrature<dim>& q,
+                                  const unsigned int n_original_q_points,
+                                  InternalData& data) const
+{
+  if (update_flags & update_JxW_values)
+    update_flags |= update_boundary_forms;
+  
+   compute_data (update_flags, q, n_original_q_points, data);
+
+#if (deal_II_dimension>1)
+  if (data.update_flags & update_boundary_forms)
+    {
+      data.aux.resize(dim-1);
+      for (unsigned int i=0;i<dim-1;++i)
+       data.aux[i].resize(n_original_q_points);
+      
+                                      // Compute tangentials to the
+                                      // unit cell.
+      const unsigned int nfaces = GeometryInfo<dim>::faces_per_cell;
+      data.unit_tangentials.resize(nfaces*(dim-1));
+      for (unsigned int i=0;i<nfaces;++i)
+       {
+                                          // Base index of the
+                                          // non-zero entry of the
+                                          // tangential vector.  Add
+                                          // dim so we can subtract 1
+                                          // without getting negative
+                                          // values.
+         unsigned int nindex = normal_directions[i]/2 + dim;
+
+                                          // First tangential has a
+                                          // non-zero in component
+                                          // (i+1)%dim, if normal is
+                                          // non-zero in i.
+         Tensor<1,dim> tangential;
+         tangential[(nindex+1)%dim] = (normal_directions[i]%2) ? -1 : 1;
+         data.unit_tangentials[i].resize(n_original_q_points);
+         fill (data.unit_tangentials[i].begin(),
+               data.unit_tangentials[i].end(),
+               tangential);
+         
+         if (dim>2)
+           {
+                                              // Second tangential
+                                              // has a non-zero in
+                                              // component (i-1)%dim,
+                                              // if normal is
+                                              // non-zero in
+                                              // i. Creates a
+                                              // right-handed system.
+             Tensor<1,dim> tangential;
+             tangential[(nindex-1)%dim] = 1.;
+             data.unit_tangentials[i+nfaces].resize(n_original_q_points);
+             fill (data.unit_tangentials[i+nfaces].begin(),
+                   data.unit_tangentials[i+nfaces].end(),
+                   tangential);
+           }
+       }
+    }
+#endif
+}
+
+  
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingQ1<dim>::get_face_data (const UpdateFlags update_flags,
+                              const Quadrature<dim-1>& quadrature) const
+{
+  InternalData* data = new InternalData(n_shape_functions);
+  QProjector<dim> q (quadrature, false);
+  compute_face_data (update_flags, q, quadrature.n_quadrature_points, *data);
+
+  return data;
+}
+
+
+
+template <int dim>
+Mapping<dim>::InternalDataBase*
+MappingQ1<dim>::get_subface_data (const UpdateFlags update_flags,
+                                 const Quadrature<dim-1>& quadrature) const
+{
+  InternalData* data = new InternalData(n_shape_functions);
+  QProjector<dim> q (quadrature, true);
+  compute_face_data (update_flags, q, quadrature.n_quadrature_points, *data);
+
+  return data;
+}
+
+
+
+
+template <int dim>
+void
+MappingQ1<dim>::compute_fill (const typename DoFHandler<dim>::cell_iterator &cell,
+                             const unsigned int   npts,
+                             const unsigned int   offset,
+                             InternalData        &data,
+                             std::vector<Point<dim> > &quadrature_points) const
+{
+  const UpdateFlags update_flags(data.current_update_flags());
+
+  if (update_flags & update_q_points)
+    {
+      Assert (quadrature_points.size() == npts,
+             ExcDimensionMismatch(quadrature_points.size(), npts));
+      fill(quadrature_points.begin(),
+          quadrature_points.end(),
+          Point<dim>());
+    }
+
+  if (update_flags & update_covariant_transformation)
+    {
+      Assert (data.covariant.size() == npts,
+             ExcDimensionMismatch(data.covariant.size(), npts));
+    }
+  
+  if (update_flags & update_contravariant_transformation)
+    {
+      Assert (data.contravariant.size() == npts,
+             ExcDimensionMismatch(data.contravariant.size(), npts));
+      fill(data.contravariant.begin(),
+          data.contravariant.end(),
+          Tensor<2,dim>());
+    }
+  
+  if (update_flags & update_jacobian_grads)
+    {
+      Assert(false, ExcNotImplemented());
+//      Assert (covariant_grads.size () == npts,
+//           ExcDimensionMismatch(covariant_grads.size(), npts));
+    }
+  
+  std::vector<Point<dim> > &a=data.mapping_support_points;
+  
+                                  // store all Lagrangian
+                                  // support points in a
+  if (a.size()==0
+      || (&cell->get_triangulation() !=
+         &data.cell_of_current_support_points->get_triangulation())
+      || (cell!=data.cell_of_current_support_points))
+    {
+      compute_mapping_support_points(cell, a);
+      data.cell_of_current_support_points=cell;
+    }
+  
+  for (unsigned int point=0; point<npts; ++point)
+    {
+                                      // First, compute function
+                                      // values and derivatives
+      for (unsigned int k=0; k<data.n_shape_functions; ++k)
+       {
+         if (update_flags & update_q_points)
+           {
+             quadrature_points[point]
+               += data.shape(point+offset,k) * a[k];
+           }
+         if (update_flags & update_contravariant_transformation)
+           {
+             for (unsigned int i=0; i<dim; ++i)
+               for (unsigned int j=0; j<dim; ++j)
+                 data.contravariant[point][i][j]
+                   += data.derivative(point+offset, k)[j]
+                   * a[k][i];
+           }
+       }
+
+                                      // Invert contravariant for
+                                      // covariant transformation
+                                      // matrices
+      if (update_flags & update_covariant_transformation)
+       data.covariant[point]
+         = invert(data.contravariant[point]);
+    }
+  data.first_cell = false;
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::compute_mapping_support_points(
+  const typename Triangulation<dim>::cell_iterator &cell,
+  std::vector<Point<dim> > &a) const
+{
+  a.resize(GeometryInfo<dim>::vertices_per_cell);
+
+  for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+    a[i] = cell->vertex(vertex_mapping[i]);
+}
+
+
+
+template <int dim>
+void
+MappingQ1<dim>::fill_fe_values (const DoFHandler<dim>::cell_iterator &cell,
+                               const Quadrature<dim>                &q,
+                               Mapping<dim>::InternalDataBase      &mapping_data,
+                               std::vector<Point<dim> >                  &quadrature_points,
+                               std::vector<double>                       &JxW_values) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  const unsigned int npts=q.n_quadrature_points;
+  
+  compute_fill (cell,
+               npts,
+               0,
+               data,
+               quadrature_points);
+
+  
+  const UpdateFlags update_flags(data.current_update_flags());
+  const std::vector<double> &weights=q.get_weights();
+
+                                  // Multiply quadrature weights
+                                  // by Jaconian determinants
+ //TODO: compute Jacobi determinants directly, if co/contravariant is not needed
+  if (update_flags & update_JxW_values)
+    {      
+      Assert (JxW_values.size() == npts,
+             ExcDimensionMismatch(JxW_values.size(), npts));
+      for (unsigned int point=0; point<npts; ++point)
+       JxW_values[point]
+        = determinant(data.contravariant[point])*weights[point];
+    }
+}
+
+
+
+template <int dim>
+void
+MappingQ1<dim>::compute_fill_face (const typename DoFHandler<dim>::cell_iterator &cell,
+                                  const unsigned int      face_no,
+                                  const bool              is_subface,
+                                  const unsigned int      npts,
+                                  const unsigned int      offset,
+                                  const std::vector<double>   &weights,
+                                  InternalData           &data,
+                                  std::vector<Point<dim> >    &quadrature_points,
+                                  std::vector<double>         &JxW_values,
+                                  std::vector<Tensor<1,dim> > &boundary_forms,
+                                  std::vector<Point<dim> >    &normal_vectors) const
+{
+  compute_fill (cell,
+               npts,
+               offset,
+               data,
+               quadrature_points);
+
+  const UpdateFlags update_flags(data.current_update_flags());
+  
+  if (update_flags & update_boundary_forms)
+    {
+      Assert (boundary_forms.size()==npts,
+             ExcDimensionMismatch(boundary_forms.size(), npts));
+      if (update_flags & update_normal_vectors)
+       Assert (normal_vectors.size()==npts,
+               ExcDimensionMismatch(normal_vectors.size(), npts));
+      if (update_flags & update_JxW_values)
+       Assert (JxW_values.size() == npts,
+               ExcDimensionMismatch(JxW_values.size(), npts));
+      
+      
+      transform_contravariant(data.aux[0],
+                             data.unit_tangentials[face_no],
+                             data, 0);
+
+      typename std::vector<Tensor<1,dim> >::iterator
+       result = boundary_forms.begin();
+      typename std::vector<Tensor<1,dim> >::const_iterator
+       end = boundary_forms.end();
+      typename std::vector<Tensor<1,dim> >::const_iterator
+       tang1 = data.aux[0].begin();
+      
+      switch (dim)
+       {
+         case 2:
+         {
+           for (; result != end; ++result, ++tang1)
+             cross_product (*result, *tang1);
+           break;
+         };
+
+         case 3:
+         {
+           transform_contravariant(data.aux[1],
+                                   data.unit_tangentials[
+                                     face_no+GeometryInfo<dim>::faces_per_cell],
+                                   data, 0);
+           typename std::vector<Tensor<1,dim> >::const_iterator
+             tang2 = data.aux[1].begin();
+           for (;result != end; ++result, ++tang1, ++tang2)
+             cross_product (*result, *tang1, *tang2);
+           break;
+         };
+
+         default:
+               Assert(false, ExcNotImplemented());
+       }
+      
+      if (update_flags & (update_normal_vectors
+                         | update_JxW_values))
+       for (unsigned int i=0;i<boundary_forms.size();++i)
+         {
+           double f = sqrt(contract(boundary_forms[i],
+                                    boundary_forms[i]));
+           if (update_flags & update_JxW_values)
+             {
+               JxW_values[i] = f * weights[i];
+               if (is_subface)
+                 JxW_values[i]/=GeometryInfo<dim>::subfaces_per_face;
+             }
+           if (update_flags & update_normal_vectors)
+             {
+               normal_vectors[i] = boundary_forms[i];
+               normal_vectors[i] /= f;
+             }
+         }
+    }
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::fill_fe_face_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                                    const unsigned int       face_no,
+                                    const Quadrature<dim-1> &q,
+                                    typename Mapping<dim>::InternalDataBase &mapping_data,
+                                    std::vector<Point<dim> >     &quadrature_points,
+                                    std::vector<double>          &JxW_values,
+                                    std::vector<Tensor<1,dim> >  &boundary_forms,
+                                    std::vector<Point<dim> >     &normal_vectors) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  const unsigned int npts=q.n_quadrature_points;
+  const unsigned int offset=face_no*npts;
+  
+  compute_fill_face (cell, face_no, false,
+                    npts,
+                    offset,
+                    q.get_weights(),
+                    data,
+                    quadrature_points,
+                    JxW_values,
+                    boundary_forms,
+                    normal_vectors);
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::fill_fe_subface_values (const typename DoFHandler<dim>::cell_iterator &cell,
+                                       const unsigned int       face_no,
+                                       const unsigned int       sub_no,
+                                       const Quadrature<dim-1> &q,
+                                       typename Mapping<dim>::InternalDataBase &mapping_data,
+                                       std::vector<Point<dim> >     &quadrature_points,
+                                       std::vector<double>          &JxW_values,
+                                       std::vector<Tensor<1,dim> >  &boundary_forms,
+                                       std::vector<Point<dim> >     &normal_vectors) const
+{
+  InternalData *data_ptr = dynamic_cast<InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  InternalData &data=*data_ptr;
+
+  const unsigned int npts=q.n_quadrature_points;
+  const unsigned int offset=
+    (face_no*GeometryInfo<dim>::subfaces_per_face + sub_no)*npts;
+  
+  compute_fill_face (cell, face_no, true,
+                    npts,
+                    offset,
+                    q.get_weights(),
+                    data,
+                    quadrature_points,
+                    JxW_values,
+                    boundary_forms,
+                    normal_vectors);
+}
+
+
+#if (deal_II_dimension == 1)
+
+template <>
+void
+MappingQ1<1>::compute_fill_face (const DoFHandler<1>::cell_iterator &,
+                                const unsigned int,
+                                const bool,
+                                const unsigned int,
+                                const unsigned int,
+                                const std::vector<double> &,
+                                InternalData &,
+                                std::vector<Point<1> > &,
+                                std::vector<double> &,
+                                std::vector<Tensor<1,1> > &,
+                                std::vector<Point<1> > &) const
+{
+  Assert(false, ExcNotImplemented());
+}
+
+
+template <>
+void
+MappingQ1<1>::fill_fe_face_values (const DoFHandler<1>::cell_iterator &,
+                                  const unsigned,
+                                  const Quadrature<0>&,
+                                  Mapping<1>::InternalDataBase&,
+                                  std::vector<Point<1> >&,
+                                  std::vector<double>&,
+                                  std::vector<Tensor<1,1> >&,
+                                  std::vector<Point<1> >&) const
+{
+  Assert(false, ExcNotImplemented());
+}
+
+
+template <>
+void
+MappingQ1<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &,
+                                     const unsigned,
+                                     const unsigned,
+                                     const Quadrature<0>&,
+                                     Mapping<1>::InternalDataBase&,
+                                     std::vector<Point<1> >&,
+                                     std::vector<double>&,
+                                     std::vector<Tensor<1,1> >&,
+                                     std::vector<Point<1> >&) const
+{
+  Assert(false, ExcNotImplemented());
+}
+#endif
+
+
+template <int dim>
+void
+MappingQ1<dim>::transform_covariant (std::vector<Tensor<1,dim> >       &dst,
+                                    const std::vector<Tensor<1,dim> > &src,
+                                    const Mapping<dim>::InternalDataBase &mapping_data,
+                                    const unsigned int src_offset) const
+{
+  covariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::transform_covariant (std::vector<Point<dim> >       &dst,
+                                    const std::vector<Point<dim> > &src,
+                                    const Mapping<dim>::InternalDataBase &mapping_data,
+                                    const unsigned int src_offset) const
+{
+  covariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+template <int dim>
+void
+MappingQ1<dim>::transform_contravariant (std::vector<Tensor<1,dim> >       &dst,
+                                        const std::vector<Tensor<1,dim> > &src,
+                                        const Mapping<dim>::InternalDataBase &mapping_data,
+                                        const unsigned int src_offset) const
+{
+  contravariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+
+template <int dim>
+void
+MappingQ1<dim>::transform_contravariant (std::vector<Point<dim> >       &dst,
+                                        const std::vector<Point<dim> > &src,
+                                        const Mapping<dim>::InternalDataBase &mapping_data,
+                                        const unsigned int src_offset) const
+{
+  contravariant_transformation(dst, src, mapping_data, src_offset);
+}
+
+
+
+template <int dim>
+Point<dim> MappingQ1<dim>::transform_unit_to_real_cell (
+  const typename Triangulation<dim>::cell_iterator cell,
+  const Point<dim> &p,
+  const typename Mapping<dim>::InternalDataBase *const m_data) const
+{
+                                  // If m_data!=0 use this
+                                  // InternalData.
+                                  //
+                                  // Otherwise use the get_data
+                                  // function to create an
+                                  // InternalData with data vectors
+                                  // already of the right size; And
+                                  // compute shape values and mapping
+                                  // support points.
+                                  //
+                                  // Let, at the end, mdata be a
+                                  // pointer to the given or the new
+                                  // created InternalData
+  const InternalData *mdata;
+  InternalData *mdata_local=0;
+  if (m_data==0)
+    {
+      static Point<dim> dummy_p;
+      static Quadrature<dim> dummy_quadrature(dummy_p);
+      mdata_local=dynamic_cast<InternalData *> (get_data(update_transformation_values,
+                                                        dummy_quadrature));
+      Assert(mdata_local!=0, ExcInternalError());
+      
+      compute_shapes(std::vector<Point<dim> > (1, p), *mdata_local);
+
+      compute_mapping_support_points(cell, mdata_local->mapping_support_points);      
+      
+      mdata=mdata_local;
+    }
+  else
+    mdata = dynamic_cast<const InternalData *> (m_data);
+  Assert(mdata!=0, ExcInternalError());
+
+                                  // use now the InternalData, that
+                                  // mdata is pointing to, to compute
+                                  // the point in real space.
+  Point<dim> p_real;
+  for (unsigned int i=0; i<mdata->mapping_support_points.size(); ++i)
+    p_real+=mdata->mapping_support_points[i] * mdata->shape(0,i);
+
+  if (m_data==0)
+    delete mdata_local;
+  return p_real;
+}
+
+
+
+template <int dim>
+Point<dim> MappingQ1<dim>::transform_real_to_unit_cell (
+  const typename Triangulation<dim>::cell_iterator cell,
+  const Point<dim> &p) const
+{
+                                  // Use the get_data
+                                  // function to create an
+                                  // InternalData with data vectors
+                                  // already of the right size.
+  static Point<dim> dummy_p;
+  static Quadrature<dim> dummy_quadrature(dummy_p);
+  Quadrature<dim> dummy_q(Point<dim>());
+  InternalData *mdata=
+    dynamic_cast<InternalData *> (get_data(update_transformation_values
+                                          | update_transformation_gradients,
+                                          dummy_quadrature));
+  Assert(mdata!=0, ExcInternalError());
+
+                                  // compute the mapping support
+                                  // points
+  std::vector<Point<dim> > &points=mdata->mapping_support_points;
+  compute_mapping_support_points(cell, points);
+  
+                                  // Newton iteration to solve
+                                  // f(x)=p(x)-p=0
+                                  // x_{n+1}=x_n-[f'(x)]^{-1}f(x)
+  
+                                  // Let the start value be the
+                                  // center of the unit cell
+                                  // (p_unit stands for x)
+  Point<dim> p_unit;
+  for (unsigned int i=0; i<dim; ++i)
+    p_unit(i)=0.5;
+  
+                                  // compute shape values and
+                                  // derivatives of the mapping
+  compute_shapes(std::vector<Point<dim> > (1, p_unit), *mdata);
+  
+                                  // f(x)
+  Point<dim> p_real(transform_unit_to_real_cell(cell, p_unit, mdata));
+  Point<dim> f = p_real-p;
+
+  const double eps=1e-15*cell->diameter();
+  unsigned int loop=0;
+  while (f.square()>eps*eps && loop++<10)
+    {      
+                                      // f'(x)
+      Tensor<2,dim> df;
+      for (unsigned int k=0; k<mdata->n_shape_functions; ++k)
+       {
+         const Tensor<1,dim> &grad_transform=mdata->derivative(0,k);
+         const Point<dim> &point=points[k];
+         
+         for (unsigned int i=0; i<dim; ++i)
+           for (unsigned int j=0; j<dim; ++j)
+             df[i][j]+=point[i]*grad_transform[j];
+       }
+      
+                                      // Solve  [f'(x)]d=f(x)
+      Point<dim> d;
+      Tensor<2,dim> df_1;
+
+      df_1 = invert(df);
+      contract (d, df_1, f);
+
+                                      // update of p_unit
+      p_unit -= d;
+                                      // shape values and derivatives
+                                      // at new p_unit point
+      compute_shapes(std::vector<Point<dim> > (1, p_unit), *mdata);
+      
+                                      // f(x)
+      p_real=transform_unit_to_real_cell(cell, p_unit, mdata);
+      f = p_real-p;
+    }
+  
+  return p_unit;
+}
+
+
+
+template <int dim>
+template <typename tensor_>
+inline
+void
+MappingQ1<dim>::contravariant_transformation (std::vector<tensor_>       &dst,
+                                             const std::vector<tensor_> &src,
+                                             const Mapping<dim>::InternalDataBase &mapping_data,
+                                             const unsigned int src_offset) const
+{
+  Assert(tensor_::dimension==dim && tensor_::rank==1, ExcInvalidData());
+  const InternalData* data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  const InternalData &data=*data_ptr;
+
+  Assert (data.update_flags & update_contravariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+  
+  Assert (src.size() + src_offset >= data.contravariant.size(),
+         ExcDimensionMismatch(src.size(), data.contravariant.size()));
+  Assert (dst.size() == data.contravariant.size(),
+         ExcDimensionMismatch(dst.size(), data.contravariant.size()));
+
+  typename std::vector<tensor_>::const_iterator vec = src.begin()+src_offset;
+  typename std::vector<Tensor<2,dim> >::const_iterator tensor = data.contravariant.begin();
+  typename std::vector<tensor_>::iterator result = dst.begin();
+  typename std::vector<tensor_>::const_iterator end = dst.end();
+  
+  while (result!=end)
+    {
+      contract (*(result++), *(tensor++), *(vec++));
+    }
+}
+
+
+template <int dim>
+template <typename tensor_>
+inline
+void
+MappingQ1<dim>::covariant_transformation (std::vector<tensor_>       &dst,
+                                         const std::vector<tensor_> &src,
+                                         const Mapping<dim>::InternalDataBase &mapping_data,
+                                         const unsigned int src_offset) const
+{
+  Assert(tensor_::dimension==dim && tensor_::rank==1, ExcInvalidData());
+  const InternalData *data_ptr = dynamic_cast<const InternalData *> (&mapping_data);
+  Assert(data_ptr!=0, ExcInternalError());
+  const InternalData &data=*data_ptr;
+
+  Assert (data.update_flags & update_covariant_transformation,
+         typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+  
+  Assert (src.size() + src_offset >= data.contravariant.size(),
+         ExcDimensionMismatch(src.size() + src_offset, data.contravariant.size()));
+  Assert (dst.size() == data.contravariant.size(),
+         ExcDimensionMismatch(dst.size() + src_offset, data.contravariant.size()));
+
+  typename std::vector<tensor_>::const_iterator vec = src.begin() + src_offset;
+  typename std::vector<Tensor<2,dim> >::const_iterator tensor = data.covariant.begin();
+  typename std::vector<tensor_>::iterator result = dst.begin();
+  typename std::vector<tensor_>::const_iterator end = dst.end();
+  
+  while (result!=end)
+    {
+      contract (*(result++), *(vec++), *(tensor++));
+    }
+}
+
+
+
+//----------------------------------------------------------------------//
+
+template class MappingQ1<deal_II_dimension>;
+
+template void MappingQ1<deal_II_dimension>::contravariant_transformation (
+  std::vector<Tensor<1,deal_II_dimension> >       &dst,
+  const std::vector<Tensor<1,deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
+template void MappingQ1<deal_II_dimension>::contravariant_transformation (
+  std::vector<Point<deal_II_dimension> >       &dst,
+  const std::vector<Point<deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
+template void MappingQ1<deal_II_dimension>::covariant_transformation (
+  std::vector<Tensor<1,deal_II_dimension> >       &dst,
+  const std::vector<Tensor<1,deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
+template void MappingQ1<deal_II_dimension>::covariant_transformation (
+  std::vector<Point<deal_II_dimension> >       &dst,
+  const std::vector<Point<deal_II_dimension> > &src,
+  const Mapping<deal_II_dimension>::InternalDataBase& internal,
+  const unsigned int src_offset) const;
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2470f44980ddb123fab032a557809d6b260c464b 100644 (file)
@@ -0,0 +1,141 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+// Transfer matrices for finite elements
+
+static double dgq0_into_dgq0_refined[] =
+{
+  1., 1.
+};
+
+static double dgq1_into_dgq1_refined[] =
+{
+  1., 0.,
+  13.5/27., 13.5/27.,
+};
+
+static double dgq2_into_dgq2_refined[] =
+{
+ 1., 0., 0.,
+ 10.125/27., 20.25/27., -3.375/27.,
+ 0., 1., 0.,
+};
+
+static double dgq3_into_dgq3_refined[] =
+{
+ 1., 0., 0., 0.,
+ 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27.,
+ 0., 1., 0., 0.,
+ -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27.,
+};
+
+static double dgq4_into_dgq4_refined[] =
+{
+ 1., 0., 0., 0., 0.,
+ 7.3828125/27., 29.53125/27., -14.765625/27., 5.90625/27., -1.0546875/27.,
+ 0., 1., 0., 0., 0.,
+ -1.0546875/27., 12.65625/27., 18.984375/27., -4.21875/27., 0.6328125/27.,
+ 0., -2.91892343e-13/27., 1., 0., 0.,
+};
+
+static double * embedding[] =
+{
+  dgq0_into_dgq0_refined,
+  dgq1_into_dgq1_refined,
+  dgq2_into_dgq2_refined,
+  dgq3_into_dgq3_refined,
+  dgq4_into_dgq4_refined,
+  0,0,0,0,0,0
+};
+
+
+static double dgq0_refined_onto_dgq0[] =
+{
+ 0.5,
+};
+
+static double dgq1_refined_onto_dgq1[] =
+{
+ 0.75, 0.5,
+ -0.25, 0,
+};
+
+static double dgq2_refined_onto_dgq2[] =
+{
+ 0.6875, 0.75, -0.1875,
+ -0.09375, 0.375, 0.21875,
+ 0.1875, -0.25, -0.1875,
+};
+static double dgq3_refined_onto_dgq3[] =
+{
+ 0.6875, 0.9375, -0.75, -0.0625,
+ -0.055555556, 0.24305556, 0.61805556, 0.12268519,
+ 0.034722222, -0.11805556, 0.069444444, 0.085648148,
+ -0.125, 0.1875, 0.1875, -0.0625,
+};
+
+static double dgq4_refined_onto_dgq4[] =
+{
+ 0.72569444, 0.97222222, -1.0416667, 0.13888889, 0.017361111,
+ -0.068223741, 0.30056424, 0.52115885, 0.28103299, 0.031873915,
+ 0.01953125, -0.052083333, -0.078125, 0.46875, 0.14192708,
+ -0.0074598524, 0.036675347, -0.030924479, -0.066189236, 0.0014919705,
+ 0.086805556, -0.13888889, -0.20833333, 0.36111111, 0.086805556,
+};
+
+static double dgq5_refined_onto_dgq5[] =
+{
+ 0.76529948, 0.96028646, -1.2858073, 0.42317708, 0.18717448, 0.10611979,
+ -0.064940104, 0.29386458, 0.53121354, 0.25160417, 0.056143229, -0.012855417,
+ 0.036778646, -0.14359896, 0.12031771, 0.22294792, 0.53740365, 0.10436104,
+ -0.0056692708, 0.022895833, 0.012755208, -0.16279167, 0.17783073, 0.076769167,
+ -0.0047838542, 0.0020989583, 0.018526042, 0.016885417, -0.070075521, -0.017681042,
+ -0.071940104, 0.16276042, 0.081380208, -0.32552083, -0.040690104, 0.037760417,
+};
+
+static double dgq6_refined_onto_dgq6[] =
+{
+ 0.79257813, 0.984375, -1.6734375, 1.09375, -0.17226562, 0.196875, -0.065625,
+ -0.056868389, 0.26796875, 0.56824544, 0.18953832, 0.14839681, -0.089322917, -0.019566816,
+ 0.03079829, -0.109375, 0.018229167, 0.41571502, 0.32044271, 0.328125, 0.038888889,
+ -0.01965332, 0.0984375, -0.16918945, 0.109375, -0.1307373, 0.4921875, 0.11958008,
+ -0.0025543338, -0.003125, 0.025520833, 0.0084619342, -0.081119792, -0.0072916667, 0.017283951,
+ 0.010613285, -0.02734375, 0.00079752604, 0.016814558, 0.058162435, -0.04921875, -0.018216508,
+ 0.062890625, -0.196875, 0.0984375, 0.13125, 0.12304687, -0.309375, -0.065625,
+};
+
+static double dgq7_refined_onto_dgq7[] =
+{
+ 0.81508102, 1.0095262, -2.1220573, 2.1159252, -1.1456019, 0.72957682, -0.50176794, -0.037400897,
+ -0.048702752, 0.24752223, 0.56041891, 0.24320734, 0.11116474, -0.063333627, -0.094508404, -0.012366406,
+ 0.028512974, -0.11272486, 0.058287533, 0.34450213, 0.37238149, 0.28423557, 0.10277054, 0.00045127394,
+ -0.01556376, 0.056866734, 0.0023941134, -0.26908091, 0.36033153, 0.082017998, 0.54686868, 0.092819904,
+ 0.0063367825, -0.046119071, 0.12266792, -0.15184748, 0.13891781, -0.23206465, 0.23358346, 0.071870952,
+ 0.0077008445, -0.01866856, -0.01883456, 0.072907425, -0.023311084, -0.0010966409, -0.086150953, -0.010963118,
+ -0.012439378, 0.040990099, -0.017439155, -0.050376157, 0.0042995099, 0.054999345, 0.038394855, -0.001831157,
+ -0.050934606, 0.18647931, -0.15057292, -0.1043873, -0.016304977, 0.28934245, 0.015028935, -0.031932147,
+};
+
+static double * projection_matrices[] =
+{
+  dgq0_refined_onto_dgq0,
+  dgq1_refined_onto_dgq1,
+  dgq2_refined_onto_dgq2,
+  dgq3_refined_onto_dgq3,
+  dgq4_refined_onto_dgq4,
+  dgq5_refined_onto_dgq5,
+  dgq6_refined_onto_dgq6,
+  dgq7_refined_onto_dgq7,
+  0,0,0,0,0,0,0
+};
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c9b378dca741ab8214f2871a8ed4526057dd20e6 100644 (file)
@@ -0,0 +1,350 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+// Transfer matrices for finite elements
+
+static double dgq0_into_dgq0_refined[] =
+{
+  1., 1., 1., 1.
+};
+
+static double dgq1_into_dgq1_refined[] =
+{
+ 1., 0., 0., 0.,
+ 13.5/27., 13.5/27., 0., 0.,
+ 13.5/27., 0., 13.5/27., 0.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+};
+
+static double dgq2_into_dgq2_refined[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 10.125/27., 20.25/27., -3.375/27., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0.,
+ 10.125/27., 0., 0., 20.25/27., 0., 0., -3.375/27., 0., 0.,
+ 3.796875/27., 7.59375/27., -1.265625/27., 7.59375/27., 15.1875/27., -2.53125/27., -1.265625/27., -2.53125/27., 0.421875/27.,
+ 0., 10.125/27., 0., 0., 20.25/27., 0., 0., -3.375/27., 0.,
+ 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 10.125/27., 20.25/27., -3.375/27., 0., 0., 0.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+};
+
+static double dgq3_into_dgq3_refined[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 8.4375/27., 0., 0., 0., 25.3125/27., 0., 0., 0., -8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0.,
+ 2.63671875/27., 7.91015625/27., -2.63671875/27., 0.52734375/27., 7.91015625/27., 23.73046875/27., -7.91015625/27., 1.58203125/27., -2.63671875/27., -7.91015625/27., 2.63671875/27., -0.52734375/27., 0.52734375/27., 1.58203125/27., -0.52734375/27., 0.10546875/27.,
+ 0., 8.4375/27., 0., 0., 0., 25.3125/27., 0., 0., 0., -8.4375/27., 0., 0., 0., 1.6875/27., 0., 0.,
+ -0.52734375/27., 4.74609375/27., 4.74609375/27., -0.52734375/27., -1.58203125/27., 14.23828125/27., 14.23828125/27., -1.58203125/27., 0.52734375/27., -4.74609375/27., -4.74609375/27., 0.52734375/27., -0.10546875/27., 0.94921875/27., 0.94921875/27., -0.10546875/27.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.6875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., -1.6875/27., 0., 0., 0.,
+ -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27.,
+ 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., -1.6875/27., 0., 0.,
+ 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27.,
+};
+
+static double dgq4_into_dgq4_refined[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 7.3828125/27., 29.53125/27., -14.765625/27., 5.90625/27., -1.0546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.0546875/27., 12.65625/27., 18.984375/27., -4.21875/27., 0.6328125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., -3.037621421e-13/27., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 7.3828125/27., 0., 0., 0., 0., 29.53125/27., 0., 0., 0., 0., -14.765625/27., 0., 0., 0., 0., 5.90625/27., 0., 0., 0., 0., -1.0546875/27., 0., 0., 0., 0.,
+ 2.018737793/27., 8.074951172/27., -4.037475586/27., 1.614990234/27., -0.2883911133/27., 8.074951172/27., 32.29980469/27., -16.14990234/27., 6.459960937/27., -1.153564453/27., -4.037475586/27., -16.14990234/27., 8.074951172/27., -3.229980469/27., 0.5767822266/27., 1.614990234/27., 6.459960937/27., -3.229980469/27., 1.291992187/27., -0.2307128906/27., -0.2883911133/27., -1.153564453/27., 0.5767822266/27., -0.2307128906/27., 0.04119873047/27.,
+ 0., 7.3828125/27., 0., 0., 0., 0., 29.53125/27., 0., 0., 0., 0., -14.765625/27., 0., 0., 0., 0., 5.90625/27., 0., 0., 0., 0., -1.0546875/27., 0., 0., 0.,
+ -0.2883911133/27., 3.460693359/27., 5.191040039/27., -1.153564453/27., 0.173034668/27., -1.153564453/27., 13.84277344/27., 20.76416016/27., -4.614257813/27., 0.6921386719/27., 0.5767822266/27., -6.921386719/27., -10.38208008/27., 2.307128906/27., -0.3460693359/27., -0.2307128906/27., 2.768554687/27., 4.152832031/27., -0.9228515625/27., 0.1384277344/27., 0.04119873047/27., -0.4943847656/27., -0.7415771484/27., 0.1647949219/27., -0.02471923828/27.,
+ 0., 0., 7.3828125/27., 0., 0., 0., -3.181519325e-13/27., 29.53125/27., 0., 0., 0., 1.601013025e-13/27., -14.765625/27., 0., 0., 0., 0., 5.90625/27., 0., 0., 0., 0., -1.0546875/27., 0., 0.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 7.3828125/27., 29.53125/27., -14.765625/27., 5.90625/27., -1.0546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., -1.0546875/27., 12.65625/27., 18.984375/27., -4.21875/27., 0.6328125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., -2.837901725e-13/27., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.0546875/27., 0., 0., 0., 0., 12.65625/27., 0., 0., 0., 0., 18.984375/27., 0., 0., 0., 0., -4.21875/27., 0., 0., 0., 0., 0.6328125/27., 0., 0., 0., 0.,
+ -0.2883911133/27., -1.153564453/27., 0.5767822266/27., -0.2307128906/27., 0.04119873047/27., 3.460693359/27., 13.84277344/27., -6.921386719/27., 2.768554687/27., -0.4943847656/27., 5.191040039/27., 20.76416016/27., -10.38208008/27., 4.152832031/27., -0.7415771484/27., -1.153564453/27., -4.614257813/27., 2.307128906/27., -0.9228515625/27., 0.1647949219/27., 0.173034668/27., 0.6921386719/27., -0.3460693359/27., 0.1384277344/27., -0.02471923828/27.,
+ 0., -1.0546875/27., 0., 0., 0., 0., 12.65625/27., 0., 0., 0., 0., 18.984375/27., 0., 0., 0., 0., -4.21875/27., 0., 0., 0., 0., 0.6328125/27., 0., 0., 0.,
+ 0.04119873047/27., -0.4943847656/27., -0.7415771484/27., 0.1647949219/27., -0.02471923828/27., -0.4943847656/27., 5.932617187/27., 8.898925781/27., -1.977539062/27., 0.2966308594/27., -0.7415771484/27., 8.898925781/27., 13.34838867/27., -2.966308594/27., 0.4449462891/27., 0.1647949219/27., -1.977539062/27., -2.966308594/27., 0.6591796875/27., -0.09887695313/27., -0.02471923828/27., 0.2966308594/27., 0.4449462891/27., -0.09887695313/27., 0.01483154297/27.,
+ 0., 0., -1.0546875/27., 0., 0., 0., -1.40925221e-13/27., 12.65625/27., 0., 0., 0., -2.083871924e-13/27., 18.984375/27., 0., 0., 0., 0., -4.21875/27., 0., 0., 0., 0., 0.6328125/27., 0., 0.,
+ 0., 0., 0., 0., 0., -3.037621421e-13/27., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., -3.181519325e-13/27., 1.601013025e-13/27., 0., 0., 7.3828125/27., 29.53125/27., -14.765625/27., 5.90625/27., -1.0546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., -2.837901725e-13/27., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., -1.40925221e-13/27., -2.083871924e-13/27., 0., 0., -1.0546875/27., 12.65625/27., 18.984375/27., -4.21875/27., 0.6328125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., -2.96327173e-13/27., 0., 0., 0., -2.96327173e-13/27., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+};
+
+static double * embedding[] =
+{
+  dgq0_into_dgq0_refined,
+  dgq1_into_dgq1_refined,
+  dgq2_into_dgq2_refined,
+  dgq3_into_dgq3_refined,
+  dgq4_into_dgq4_refined,
+  0,0,0,0,0,0,0
+};
+
+static double dgq0_refined_onto_dgq0[] =
+{
+ 0.25,
+};
+
+static double dgq1_refined_onto_dgq1[] =
+{
+ 0.5625, 0.375, 0.375, 0.25,
+ -0.1875, 0, -0.125, 0,
+ -0.1875, -0.125, 0, 0,
+ 0.0625, 0, 0, 0,
+};
+
+static double dgq2_refined_onto_dgq2[] =
+{
+ 0.47265625, 0.515625, -0.12890625, 0.515625, 0.5625, -0.140625, -0.12890625, -0.140625, 0.03515625,
+ -0.064453125, 0.2578125, 0.15039063, -0.0703125, 0.28125, 0.1640625, 0.017578125, -0.0703125, -0.041015625,
+ 0.12890625, -0.171875, -0.12890625, 0.140625, -0.1875, -0.140625, -0.03515625, 0.046875, 0.03515625,
+ -0.064453125, -0.0703125, 0.017578125, 0.2578125, 0.28125, -0.0703125, 0.15039063, 0.1640625, -0.041015625,
+ 0.0087890625, -0.03515625, -0.020507812, -0.03515625, 0.140625, 0.08203125, -0.020507813, 0.08203125, 0.047851562,
+ -0.017578125, 0.0234375, 0.017578125, 0.0703125, -0.09375, -0.0703125, 0.041015625, -0.0546875, -0.041015625,
+ 0.12890625, 0.140625, -0.03515625, -0.171875, -0.1875, 0.046875, -0.12890625, -0.140625, 0.03515625,
+ -0.017578125, 0.0703125, 0.041015625, 0.0234375, -0.09375, -0.0546875, 0.017578125, -0.0703125, -0.041015625,
+ 0.03515625, -0.046875, -0.03515625, -0.046875, 0.0625, 0.046875, -0.03515625, 0.046875, 0.03515625,
+};
+
+static double dgq3_refined_onto_dgq3[] =
+{
+ 0.47265625, 0.64453125, -0.515625, -0.04296875, 0.64453125, 0.87890625, -0.703125, -0.05859375, -0.515625, -0.703125, 0.5625, 0.046875, -0.04296875, -0.05859375, 0.046875, 0.00390625,
+ -0.038194444, 0.16710069, 0.42491319, 0.084346065, -0.052083333, 0.22786458, 0.57942708, 0.11501736, 0.041666667, -0.18229167, -0.46354167, -0.092013889, 0.0034722222, -0.015190972, -0.038628472, -0.0076678241,
+ 0.023871528, -0.081163194, 0.047743056, 0.058883102, 0.032552083, -0.11067708, 0.065104167, 0.080295139, -0.026041667, 0.088541667, -0.052083333, -0.064236111, -0.0021701389, 0.0073784722, -0.0043402778, -0.0053530093,
+ -0.0859375, 0.12890625, 0.12890625, -0.04296875, -0.1171875, 0.17578125, 0.17578125, -0.05859375, 0.09375, -0.140625, -0.140625, 0.046875, 0.0078125, -0.01171875, -0.01171875, 0.00390625,
+ -0.038194444, -0.052083333, 0.041666667, 0.0034722222, 0.16710069, 0.22786458, -0.18229167, -0.015190972, 0.42491319, 0.57942708, -0.46354167, -0.038628472, 0.084346065, 0.11501736, -0.092013889, -0.0076678241,
+ 0.0030864198, -0.013503086, -0.03433642, -0.0068158436, -0.013503086, 0.059076003, 0.15022184, 0.029819316, -0.03433642, 0.15022184, 0.38199267, 0.07582626, -0.0068158436, 0.029819316, 0.07582626, 0.015051655,
+ -0.0019290123, 0.006558642, -0.0038580247, -0.0047582305, 0.008439429, -0.028694059, 0.016878858, 0.020817258, 0.021460262, -0.072964892, 0.042920525, 0.052935314, 0.0042599023, -0.014483668, 0.0085198045, 0.010507759,
+ 0.0069444444, -0.010416667, -0.010416667, 0.0034722222, -0.030381944, 0.045572917, 0.045572917, -0.015190972, -0.077256944, 0.11588542, 0.11588542, -0.038628472, -0.015335648, 0.023003472, 0.023003472, -0.0076678241,
+ 0.023871528, 0.032552083, -0.026041667, -0.0021701389, -0.081163194, -0.11067708, 0.088541667, 0.0073784722, 0.047743056, 0.065104167, -0.052083333, -0.0043402778, 0.058883102, 0.080295139, -0.064236111, -0.0053530093,
+ -0.0019290123, 0.008439429, 0.021460262, 0.0042599023, 0.006558642, -0.028694059, -0.072964892, -0.014483668, -0.0038580247, 0.016878858, 0.042920525, 0.0085198045, -0.0047582305, 0.020817258, 0.052935314, 0.010507759,
+ 0.0012056327, -0.0040991512, 0.0024112654, 0.002973894, -0.0040991512, 0.013937114, -0.0081983025, -0.01011124, 0.0024112654, -0.0081983025, 0.0048225309, 0.0059477881, 0.002973894, -0.01011124, 0.0059477881, 0.0073356053,
+ -0.0043402778, 0.0065104167, 0.0065104167, -0.0021701389, 0.014756944, -0.022135417, -0.022135417, 0.0073784722, -0.0086805556, 0.013020833, 0.013020833, -0.0043402778, -0.010706019, 0.016059028, 0.016059028, -0.0053530093,
+ -0.0859375, -0.1171875, 0.09375, 0.0078125, 0.12890625, 0.17578125, -0.140625, -0.01171875, 0.12890625, 0.17578125, -0.140625, -0.01171875, -0.04296875, -0.05859375, 0.046875, 0.00390625,
+ 0.0069444444, -0.030381944, -0.077256944, -0.015335648, -0.010416667, 0.045572917, 0.11588542, 0.023003472, -0.010416667, 0.045572917, 0.11588542, 0.023003472, 0.0034722222, -0.015190972, -0.038628472, -0.0076678241,
+ -0.0043402778, 0.014756944, -0.0086805556, -0.010706019, 0.0065104167, -0.022135417, 0.013020833, 0.016059028, 0.0065104167, -0.022135417, 0.013020833, 0.016059028, -0.0021701389, 0.0073784722, -0.0043402778, -0.0053530093,
+ 0.015625, -0.0234375, -0.0234375, 0.0078125, -0.0234375, 0.03515625, 0.03515625, -0.01171875, -0.0234375, 0.03515625, 0.03515625, -0.01171875, 0.0078125, -0.01171875, -0.01171875, 0.00390625,
+};
+
+static double dgq4_refined_onto_dgq4[] =
+{
+ 0.52663243, 0.70553627, -0.75593171, 0.1007909, 0.012598862, 0.70553627, 0.94521605, -1.0127315, 0.13503086, 0.016878858, -0.75593171, -1.0127315, 1.0850694, -0.14467593, -0.018084491, 0.1007909, 0.13503086, -0.14467593, 0.019290123, 0.0024112654, 0.012598862, 0.016878858, -0.018084491, 0.0024112654, 0.00030140818,
+ -0.04950959, 0.2181178, 0.37820209, 0.20394408, 0.023130723, -0.066328637, 0.29221523, 0.50668222, 0.27322651, 0.030988528, 0.071066397, -0.31308775, -0.54287381, -0.29274269, -0.033201995, -0.0094755196, 0.041745033, 0.072383174, 0.039032359, 0.0044269326, -0.00118444, 0.0052181291, 0.0090478968, 0.0048790449, 0.00055336658,
+ 0.01417372, -0.037796586, -0.056694878, 0.34016927, 0.1029957, 0.018988715, -0.050636574, -0.075954861, 0.45572917, 0.13798466, -0.020345052, 0.054253472, 0.081380208, -0.48828125, -0.14784071, 0.0027126736, -0.0072337963, -0.010850694, 0.065104167, 0.019712095, 0.0003390842, -0.00090422454, -0.0013563368, 0.0081380208, 0.0024640119,
+ -0.0054135735, 0.026615096, -0.022441723, -0.048033161, 0.0010827147, -0.0072526343, 0.035656588, -0.030065466, -0.064350646, 0.0014505269, 0.0077706796, -0.038203487, 0.032212999, 0.068947121, -0.0015541359, -0.0010360906, 0.0050937982, -0.0042950666, -0.0091929495, 0.00020721812, -0.00012951133, 0.00063672478, -0.00053688332, -0.0011491187, 2.5902265e-05,
+ 0.062994309, -0.1007909, -0.15118634, 0.26205633, 0.062994309, 0.08439429, -0.13503086, -0.2025463, 0.35108025, 0.08439429, -0.090422454, 0.14467593, 0.21701389, -0.37615741, -0.090422454, 0.012056327, -0.019290123, -0.028935185, 0.050154321, 0.012056327, 0.0015070409, -0.0024112654, -0.0036168981, 0.0062692901, 0.0015070409,
+ -0.04950959, -0.066328637, 0.071066397, -0.0094755196, -0.00118444, 0.2181178, 0.29221523, -0.31308775, 0.041745033, 0.0052181291, 0.37820209, 0.50668222, -0.54287381, 0.072383174, 0.0090478968, 0.20394408, 0.27322651, -0.29274269, 0.039032359, 0.0048790449, 0.023130723, 0.030988528, -0.033201995, 0.0044269326, 0.00055336658,
+ 0.0046544789, -0.020505617, -0.035555407, -0.019173122, -0.0021745577, -0.020505617, 0.09033886, 0.15664171, 0.084468465, 0.0095801589, -0.035555407, 0.15664171, 0.27160655, 0.14646283, 0.016611373, -0.019173122, 0.084468465, 0.14646283, 0.078979539, 0.0089576215, -0.0021745577, 0.0095801589, 0.016611373, 0.0089576215, 0.0010159465,
+ -0.0013324949, 0.0035533199, 0.0053299798, -0.031979879, -0.0096827966, 0.0058703952, -0.015654387, -0.023481581, 0.14088949, 0.042658205, 0.010178884, -0.02714369, -0.040715535, 0.24429321, 0.073966556, 0.0054889255, -0.014637135, -0.021955702, 0.13173421, 0.039886192, 0.0006225374, -0.0016600997, -0.0024901496, 0.014940898, 0.0045237718,
+ 0.00050893904, -0.0025021294, 0.0021097837, 0.0045156773, -0.00010178781, -0.0022421648, 0.011023298, -0.0092947925, -0.019894117, 0.00044843297, -0.0038877681, 0.019113682, -0.016116566, -0.034495106, 0.00077755363, -0.0020964646, 0.010306982, -0.0086907987, -0.018601359, 0.00041929292, -0.0002377747, 0.0011689869, -0.00098568422, -0.0021097101, 4.755494e-05,
+ -0.0059221998, 0.0094755196, 0.014213279, -0.024636351, -0.0059221998, 0.026090645, -0.041745033, -0.062617549, 0.10853709, 0.026090645, 0.045239484, -0.072383174, -0.10857476, 0.18819625, 0.045239484, 0.024395224, -0.039032359, -0.058548539, 0.10148413, 0.024395224, 0.0027668329, -0.0044269326, -0.0066403989, 0.011510025, 0.0027668329,
+ 0.01417372, 0.018988715, -0.020345052, 0.0027126736, 0.0003390842, -0.037796586, -0.050636574, 0.054253472, -0.0072337963, -0.00090422454, -0.056694878, -0.075954861, 0.081380208, -0.010850694, -0.0013563368, 0.34016927, 0.45572917, -0.48828125, 0.065104167, 0.0081380208, 0.1029957, 0.13798466, -0.14784071, 0.019712095, 0.0024640119,
+ -0.0013324949, 0.0058703952, 0.010178884, 0.0054889255, 0.0006225374, 0.0035533199, -0.015654387, -0.02714369, -0.014637135, -0.0016600997, 0.0053299798, -0.023481581, -0.040715535, -0.021955702, -0.0024901496, -0.031979879, 0.14088949, 0.24429321, 0.13173421, 0.014940898, -0.0096827966, 0.042658205, 0.073966556, 0.039886192, 0.0045237718,
+ 0.00038146973, -0.0010172526, -0.0015258789, 0.0091552734, 0.0027720133, -0.0010172526, 0.0027126736, 0.0040690104, -0.024414062, -0.0073920356, -0.0015258789, 0.0040690104, 0.0061035156, -0.036621094, -0.011088053, 0.0091552734, -0.024414062, -0.036621094, 0.21972656, 0.06652832, 0.0027720133, -0.0073920356, -0.011088053, 0.06652832, 0.020143297,
+ -0.00014570024, 0.00071631538, -0.00060399373, -0.0012927585, 2.9140049e-05, 0.00038853398, -0.0019101743, 0.00161065, 0.003447356, -7.7706796e-05, 0.00058280097, -0.0028652615, 0.0024159749, 0.0051710341, -0.00011656019, -0.0034968058, 0.017191569, -0.01449585, -0.031026204, 0.00069936117, -0.0010587551, 0.0052052251, -0.0043890211, -0.0093940452, 0.00021175102,
+ 0.001695421, -0.0027126736, -0.0040690104, 0.0070529514, 0.001695421, -0.0045211227, 0.0072337963, 0.010850694, -0.01880787, -0.0045211227, -0.006781684, 0.010850694, 0.016276042, -0.028211806, -0.006781684, 0.040690104, -0.065104167, -0.09765625, 0.16927083, 0.040690104, 0.012320059, -0.019712095, -0.029568142, 0.051251447, 0.012320059,
+ -0.0054135735, -0.0072526343, 0.0077706796, -0.0010360906, -0.00012951133, 0.026615096, 0.035656588, -0.038203487, 0.0050937982, 0.00063672478, -0.022441723, -0.030065466, 0.032212999, -0.0042950666, -0.00053688332, -0.048033161, -0.064350646, 0.068947121, -0.0091929495, -0.0011491187, 0.0010827147, 0.0014505269, -0.0015541359, 0.00020721812, 2.5902265e-05,
+ 0.00050893904, -0.0022421648, -0.0038877681, -0.0020964646, -0.0002377747, -0.0025021294, 0.011023298, 0.019113682, 0.010306982, 0.0011689869, 0.0021097837, -0.0092947925, -0.016116566, -0.0086907987, -0.00098568422, 0.0045156773, -0.019894117, -0.034495106, -0.018601359, -0.0021097101, -0.00010178781, 0.00044843297, 0.00077755363, 0.00041929292, 4.755494e-05,
+ -0.00014570024, 0.00038853398, 0.00058280097, -0.0034968058, -0.0010587551, 0.00071631538, -0.0019101743, -0.0028652615, 0.017191569, 0.0052052251, -0.00060399373, 0.00161065, 0.0024159749, -0.01449585, -0.0043890211, -0.0012927585, 0.003447356, 0.0051710341, -0.031026204, -0.0093940452, 2.9140049e-05, -7.7706796e-05, -0.00011656019, 0.00069936117, 0.00021175102,
+ 5.5649398e-05, -0.00027359268, 0.00023069205, 0.00049376193, -1.112988e-05, -0.00027359268, 0.0013450811, -0.001134166, -0.0024275132, 5.4718536e-05, 0.00023069205, -0.001134166, 0.00095632341, 0.0020468677, -4.613841e-05, 0.00049376193, -0.0024275132, 0.0020468677, 0.004381015, -9.8752387e-05, -1.112988e-05, 5.4718536e-05, -4.613841e-05, -9.8752387e-05, 2.2259759e-06,
+ -0.00064755663, 0.0010360906, 0.0015541359, -0.0026938356, -0.00064755663, 0.0031836239, -0.0050937982, -0.0076406973, 0.013243875, 0.0031836239, -0.0026844166, 0.0042950666, 0.0064425998, -0.011167173, -0.0026844166, -0.0057455934, 0.0091929495, 0.013789424, -0.023901669, -0.0057455934, 0.00012951133, -0.00020721812, -0.00031082718, 0.00053876712, 0.00012951133,
+ 0.062994309, 0.08439429, -0.090422454, 0.012056327, 0.0015070409, -0.1007909, -0.13503086, 0.14467593, -0.019290123, -0.0024112654, -0.15118634, -0.2025463, 0.21701389, -0.028935185, -0.0036168981, 0.26205633, 0.35108025, -0.37615741, 0.050154321, 0.0062692901, 0.062994309, 0.08439429, -0.090422454, 0.012056327, 0.0015070409,
+ -0.0059221998, 0.026090645, 0.045239484, 0.024395224, 0.0027668329, 0.0094755196, -0.041745033, -0.072383174, -0.039032359, -0.0044269326, 0.014213279, -0.062617549, -0.10857476, -0.058548539, -0.0066403989, -0.024636351, 0.10853709, 0.18819625, 0.10148413, 0.011510025, -0.0059221998, 0.026090645, 0.045239484, 0.024395224, 0.0027668329,
+ 0.001695421, -0.0045211227, -0.006781684, 0.040690104, 0.012320059, -0.0027126736, 0.0072337963, 0.010850694, -0.065104167, -0.019712095, -0.0040690104, 0.010850694, 0.016276042, -0.09765625, -0.029568142, 0.0070529514, -0.01880787, -0.028211806, 0.16927083, 0.051251447, 0.001695421, -0.0045211227, -0.006781684, 0.040690104, 0.012320059,
+ -0.00064755663, 0.0031836239, -0.0026844166, -0.0057455934, 0.00012951133, 0.0010360906, -0.0050937982, 0.0042950666, 0.0091929495, -0.00020721812, 0.0015541359, -0.0076406973, 0.0064425998, 0.013789424, -0.00031082718, -0.0026938356, 0.013243875, -0.011167173, -0.023901669, 0.00053876712, -0.00064755663, 0.0031836239, -0.0026844166, -0.0057455934, 0.00012951133,
+ 0.0075352045, -0.012056327, -0.018084491, 0.031346451, 0.0075352045, -0.012056327, 0.019290123, 0.028935185, -0.050154321, -0.012056327, -0.018084491, 0.028935185, 0.043402778, -0.075231481, -0.018084491, 0.031346451, -0.050154321, -0.075231481, 0.13040123, 0.031346451, 0.0075352045, -0.012056327, -0.018084491, 0.031346451, 0.0075352045,
+};
+
+static double dgq5_refined_onto_dgq5[] =
+{
+ 0.58568329, 0.73490673, -0.98402765, 0.3238572, 0.14324453, 0.081213421, 0.73490673, 0.92215008, -1.2347433, 0.40637122, 0.17974112, 0.1019054, -0.98402765, -1.2347433, 1.6533004, -0.54412418, -0.24067031, -0.1364496, 0.3238572, 0.40637122, -0.54412418, 0.17907884, 0.07920795, 0.044907464, 0.14324453, 0.17974112, -0.24067031, 0.07920795, 0.035034286, 0.019862917, 0.081213421, 0.1019054, -0.1364496, 0.044907464, 0.019862917, 0.01126141,
+ -0.049698628, 0.22489441, 0.40653745, 0.19255254, 0.042966384, -0.0098382437, -0.062361103, 0.28219418, 0.51011717, 0.24161207, 0.053913583, -0.012344883, 0.083500459, -0.37785322, -0.68303825, -0.32351447, -0.072189373, 0.016529588, -0.027481164, 0.12435676, 0.2247974, 0.10647312, 0.023758528, -0.0054401177, -0.01215513, 0.05500395, 0.099429618, 0.047093879, 0.01050858, -0.0024062059, -0.0068914303, 0.031184848, 0.05637227, 0.026700182, 0.0059579078, -0.0013642141,
+ 0.028146679, -0.10989621, 0.09207908, 0.17062192, 0.41127473, 0.079867451, 0.035318036, -0.13789614, 0.11553947, 0.21409387, 0.51606144, 0.1002165, -0.047290251, 0.18464059, -0.15470539, -0.28666806, -0.69099753, -0.13418819, 0.01556388, -0.060767788, 0.050915697, 0.094346449, 0.22741691, 0.044163201, 0.0068840239, -0.02687806, 0.022520404, 0.04173016, 0.10058825, 0.019533724, 0.0039029422, -0.015238692, 0.01276809, 0.023659186, 0.057029163, 0.011074772,
+ -0.00433869, 0.017522169, 0.0097615543, -0.12458438, 0.13609376, 0.058751403, -0.005444124, 0.021986559, 0.012248654, -0.15632663, 0.17076844, 0.073720391, 0.0072895898, -0.029439629, -0.01640074, 0.20931871, -0.22865605, -0.098710354, -0.0023991055, 0.009688992, 0.0053977119, -0.068889703, 0.075253889, 0.032486952, -0.0010611428, 0.0042855157, 0.0023874495, -0.030470445, 0.033285374, 0.014369229, -0.00060162184, 0.0024297011, 0.0013535801, -0.017275418, 0.01887136, 0.008146728,
+ -0.0036610811, 0.0016063317, 0.01417797, 0.012922401, -0.05362876, -0.013531292, -0.0045938704, 0.0020156013, 0.017790307, 0.016214837, -0.067292574, -0.016978865, 0.0061511146, -0.0026988559, -0.023820919, -0.021711392, 0.090103616, 0.022734412, -0.0020244175, 0.00088823107, 0.0078397963, 0.0071455214, -0.029654355, -0.0074822116, -0.00089541541, 0.00039287143, 0.0034676022, 0.0031605191, -0.013116349, -0.0033094398, -0.00050766161, 0.00022274102, 0.0019659797, 0.0017918769, -0.0074363997, -0.0018763085,
+ -0.055055724, 0.12456046, 0.062280231, -0.24912092, -0.031140116, 0.028898027, -0.069083108, 0.15629662, 0.078148312, -0.31259325, -0.039074156, 0.036260817, 0.092501111, -0.20927853, -0.10463927, 0.41855706, 0.052319633, -0.048552619, -0.030443403, 0.068876478, 0.034438239, -0.13775296, -0.01721912, 0.015979343, -0.013465352, 0.030464596, 0.015232298, -0.060929192, -0.0076161491, 0.0070677863, -0.0076342689, 0.017272102, 0.0086360508, -0.034544203, -0.0043180254, 0.0040071275,
+ -0.049698628, -0.062361103, 0.083500459, -0.027481164, -0.01215513, -0.0068914303, 0.22489441, 0.28219418, -0.37785322, 0.12435676, 0.05500395, 0.031184848, 0.40653745, 0.51011717, -0.68303825, 0.2247974, 0.099429618, 0.05637227, 0.19255254, 0.24161207, -0.32351447, 0.10647312, 0.047093879, 0.026700182, 0.042966384, 0.053913583, -0.072189373, 0.023758528, 0.01050858, 0.0059579078, -0.0098382437, -0.012344883, 0.016529588, -0.0054401177, -0.0024062059, -0.0013642141,
+ 0.0042172171, -0.019083597, -0.034497063, -0.016339201, -0.0036459472, 0.0008348321, -0.019083597, 0.086356393, 0.15610485, 0.073937554, 0.016498507, -0.0037777517, -0.034497063, 0.15610485, 0.28218783, 0.13365554, 0.029824044, -0.0068289714, -0.016339201, 0.073937554, 0.13365554, 0.063304657, 0.01412587, -0.0032344764, -0.0036459472, 0.016498507, 0.029824044, 0.01412587, 0.0031520622, -0.0007217446, 0.0008348321, -0.0037777517, -0.0068289714, -0.0032344764, -0.0007217446, 0.00016526174,
+ -0.0023884091, 0.0093253313, -0.0078134445, -0.014478261, -0.034899049, -0.0067772169, 0.010807941, -0.042198648, 0.035357113, 0.065516497, 0.1579239, 0.030668014, 0.019537315, -0.076281711, 0.063914396, 0.11843295, 0.28547609, 0.055437999, 0.0092536605, -0.036130096, 0.030272437, 0.056094625, 0.135213, 0.026257673, 0.0020648719, -0.0080621092, 0.0067550247, 0.012517016, 0.030171576, 0.0058591659, -0.00047280482, 0.0018460244, -0.0015467343, -0.0028660884, -0.0069085478, -0.0013416047,
+ 0.00036816304, -0.0014868578, -0.00082832456, 0.010571708, -0.011548346, -0.0049853977, -0.0016659979, 0.0067282745, 0.003748304, -0.047838705, 0.052258153, 0.022559739, -0.0030115934, 0.012162577, 0.0067757394, -0.086477138, 0.094466091, 0.040780821, -0.0014264122, 0.0057606871, 0.0032092636, -0.040959062, 0.044742952, 0.019315442, -0.00031829117, 0.001285446, 0.00071611858, -0.0091396498, 0.0099839914, 0.0043100689, 7.2880839e-05, -0.00029433548, -0.00016397352, 0.0020927547, -0.0022860881, -0.00098689962,
+ 0.00031066399, -0.00013630657, -0.0012030831, -0.0010965407, 0.0045507116, 0.0011482087, -0.0014058053, 0.00061680952, 0.0054441475, 0.0049620259, -0.020592714, -0.0051958319, -0.0025412481, 0.0011149951, 0.0098412842, 0.008969762, -0.037225066, -0.0093924088, -0.0012036376, 0.00052810666, 0.0046612293, 0.0042484412, -0.017631293, -0.0044486238, -0.00026858102, 0.0001178423, 0.0010401118, 0.00094800182, -0.003934266, -0.00099267077, 6.1498439e-05, -2.6982984e-05, -0.00023815998, -0.00021706907, 0.00090085002, 0.00022729716,
+ 0.0046717979, -0.010569678, -0.0052848392, 0.021139357, 0.0026424196, -0.0024521654, -0.021140649, 0.047829522, 0.023914761, -0.095659044, -0.011957381, 0.011096449, -0.038215558, 0.086460537, 0.043230269, -0.17292107, -0.021615134, 0.020058845, -0.01810043, 0.040951199, 0.0204756, -0.081902398, -0.0102378, 0.0095006782, -0.0040389498, 0.0091378954, 0.0045689477, -0.018275791, -0.0022844738, 0.0021199917, 0.00092482001, -0.002092353, -0.0010461765, 0.0041847059, 0.00052308824, -0.00048542589,
+ 0.028146679, 0.035318036, -0.047290251, 0.01556388, 0.0068840239, 0.0039029422, -0.10989621, -0.13789614, 0.18464059, -0.060767788, -0.02687806, -0.015238692, 0.09207908, 0.11553947, -0.15470539, 0.050915697, 0.022520404, 0.01276809, 0.17062192, 0.21409387, -0.28666806, 0.094346449, 0.04173016, 0.023659186, 0.41127473, 0.51606144, -0.69099753, 0.22741691, 0.10058825, 0.057029163, 0.079867451, 0.1002165, -0.13418819, 0.044163201, 0.019533724, 0.011074772,
+ -0.0023884091, 0.010807941, 0.019537315, 0.0092536605, 0.0020648719, -0.00047280482, 0.0093253313, -0.042198648, -0.076281711, -0.036130096, -0.0080621092, 0.0018460244, -0.0078134445, 0.035357113, 0.063914396, 0.030272437, 0.0067550247, -0.0015467343, -0.014478261, 0.065516497, 0.11843295, 0.056094625, 0.012517016, -0.0028660884, -0.034899049, 0.1579239, 0.28547609, 0.135213, 0.030171576, -0.0069085478, -0.0067772169, 0.030668014, 0.055437999, 0.026257673, 0.0058591659, -0.0013416047,
+ 0.0013526688, -0.0052813752, 0.0044251224, 0.0081997225, 0.019764978, 0.0038382578, -0.0052813752, 0.020620661, -0.017277498, -0.032015089, -0.077170604, -0.014986137, 0.0044251224, -0.017277498, 0.014476351, 0.026824582, 0.064659175, 0.012556481, 0.0081997225, -0.032015089, 0.026824582, 0.049705774, 0.11981302, 0.023267077, 0.019764978, -0.077170604, 0.064659175, 0.11981302, 0.28880268, 0.056084004, 0.0038382578, -0.014986137, 0.012556481, 0.023267077, 0.056084004, 0.010891227,
+ -0.0002085081, 0.00084207775, 0.00046911929, -0.0059872571, 0.0065403734, 0.002823466, 0.00081410139, -0.0032878178, -0.0018316346, 0.023376714, -0.025536307, -0.011023972, -0.00068211367, 0.0027547742, 0.0015346774, -0.01958672, 0.021396186, 0.0092366902, -0.0012639521, 0.0051045783, 0.0028437471, -0.036294063, 0.039646991, 0.017115526, -0.0030466868, 0.012304304, 0.0068546955, -0.087484835, 0.095566882, 0.04125603, -0.00059165101, 0.002389433, 0.0013311468, -0.016989108, 0.0185586, 0.0080117102,
+ -0.00017594368, 7.7196845e-05, 0.00068136273, 0.00062102276, -0.0025772828, -0.00065028477, 0.00068695648, -0.00030140823, -0.0026603203, -0.0024247282, 0.010062772, 0.0025389792, -0.00057558237, 0.00025254186, 0.0022290109, 0.0020316146, -0.0084313261, -0.0021273424, -0.0010665503, 0.00046795839, 0.0041303424, 0.0037645685, -0.015623191, -0.0039419514, -0.0025708607, 0.0011279879, 0.0099559623, 0.0090742845, -0.03765884, -0.0095018563, -0.000499248, 0.00021904948, 0.001933397, 0.0017621797, -0.0073131543, -0.0018452119,
+ -0.0026458596, 0.0059861077, 0.0029930539, -0.011972215, -0.0014965269, 0.001388777, 0.010330524, -0.023372226, -0.011686113, 0.046744453, 0.0058430566, -0.0054223565, -0.0086556685, 0.01958296, 0.0097914802, -0.039165921, -0.0048957401, 0.0045432468, -0.016038896, 0.036287096, 0.018143548, -0.072574192, -0.009071774, 0.0084186062, -0.038660874, 0.087468041, 0.043734021, -0.17493608, -0.02186701, 0.020292586, -0.0075077442, 0.016985847, 0.0084929233, -0.033971693, -0.0042464617, 0.0039407164,
+ -0.00433869, -0.005444124, 0.0072895898, -0.0023991055, -0.0010611428, -0.00060162184, 0.017522169, 0.021986559, -0.029439629, 0.009688992, 0.0042855157, 0.0024297011, 0.0097615543, 0.012248654, -0.01640074, 0.0053977119, 0.0023874495, 0.0013535801, -0.12458438, -0.15632663, 0.20931871, -0.068889703, -0.030470445, -0.017275418, 0.13609376, 0.17076844, -0.22865605, 0.075253889, 0.033285374, 0.01887136, 0.058751403, 0.073720391, -0.098710354, 0.032486952, 0.014369229, 0.008146728,
+ 0.00036816304, -0.0016659979, -0.0030115934, -0.0014264122, -0.00031829117, 7.2880839e-05, -0.0014868578, 0.0067282745, 0.012162577, 0.0057606871, 0.001285446, -0.00029433548, -0.00082832456, 0.003748304, 0.0067757394, 0.0032092636, 0.00071611858, -0.00016397352, 0.010571708, -0.047838705, -0.086477138, -0.040959062, -0.0091396498, 0.0020927547, -0.011548346, 0.052258153, 0.094466091, 0.044742952, 0.0099839914, -0.0022860881, -0.0049853977, 0.022559739, 0.040780821, 0.019315442, 0.0043100689, -0.00098689962,
+ -0.0002085081, 0.00081410139, -0.00068211367, -0.0012639521, -0.0030466868, -0.00059165101, 0.00084207775, -0.0032878178, 0.0027547742, 0.0051045783, 0.012304304, 0.002389433, 0.00046911929, -0.0018316346, 0.0015346774, 0.0028437471, 0.0068546955, 0.0013311468, -0.0059872571, 0.023376714, -0.01958672, -0.036294063, -0.087484835, -0.016989108, 0.0065403734, -0.025536307, 0.021396186, 0.039646991, 0.095566882, 0.0185586, 0.002823466, -0.011023972, 0.0092366902, 0.017115526, 0.04125603, 0.0080117102,
+ 3.2140632e-05, -0.00012980268, -7.2312731e-05, 0.00092291005, -0.0010081706, -0.0004352252, -0.00012980268, 0.00052421918, 0.00029204112, -0.0037272509, 0.0040715827, 0.001757694, -7.2312731e-05, 0.00029204112, 0.00016269534, -0.0020764416, 0.002268268, 0.00097920671, 0.00092291005, -0.0037272509, -0.0020764416, 0.026501127, -0.028949361, -0.012497381, -0.0010081706, 0.0040715827, 0.002268268, -0.028949361, 0.031623768, 0.013651917, -0.0004352252, 0.001757694, 0.00097920671, -0.012497381, 0.013651917, 0.005893505,
+ 2.7120965e-05, -1.1899563e-05, -0.00010502915, -9.5728e-05, 0.00039727711, 0.00010023861, -0.00010953033, 4.80574e-05, 0.00042416916, 0.00038660569, -0.0016044374, -0.00040482218, -6.1019057e-05, 2.6772651e-05, 0.00023630352, 0.00021537701, -0.00089382787, -0.00022552537, 0.00077877159, -0.00034169293, -0.0030158852, -0.0027488051, 0.011407711, 0.0028783262, -0.00085071627, 0.00037325929, 0.0032944995, 0.003002746, -0.012461581, -0.0031442325, -0.0003672525, 0.00016113528, 0.0014222288, 0.0012962794, -0.0053796393, -0.0013573588,
+ 0.00040784793, -0.00092273288, -0.00046136644, 0.0018454658, 0.00023068322, -0.00021407403, -0.0016471286, 0.0037265354, 0.0018632677, -0.0074530707, -0.00093163384, 0.00086455621, -0.00091761102, 0.002076043, 0.0010380215, -0.004152086, -0.00051901076, 0.00048164198, 0.011711249, -0.026496039, -0.01324802, 0.052992079, 0.0066240099, -0.0061470812, -0.012793161, 0.028943804, 0.014471902, -0.057887607, -0.0072359509, 0.0067149624, -0.0055227818, 0.012494982, 0.0062474908, -0.024989963, -0.0031237454, 0.0028988357,
+ -0.0036610811, -0.0045938704, 0.0061511146, -0.0020244175, -0.00089541541, -0.00050766161, 0.0016063317, 0.0020156013, -0.0026988559, 0.00088823107, 0.00039287143, 0.00022274102, 0.01417797, 0.017790307, -0.023820919, 0.0078397963, 0.0034676022, 0.0019659797, 0.012922401, 0.016214837, -0.021711392, 0.0071455214, 0.0031605191, 0.0017918769, -0.05362876, -0.067292574, 0.090103616, -0.029654355, -0.013116349, -0.0074363997, -0.013531292, -0.016978865, 0.022734412, -0.0074822116, -0.0033094398, -0.0018763085,
+ 0.00031066399, -0.0014058053, -0.0025412481, -0.0012036376, -0.00026858102, 6.1498439e-05, -0.00013630657, 0.00061680952, 0.0011149951, 0.00052810666, 0.0001178423, -2.6982984e-05, -0.0012030831, 0.0054441475, 0.0098412842, 0.0046612293, 0.0010401118, -0.00023815998, -0.0010965407, 0.0049620259, 0.008969762, 0.0042484412, 0.00094800182, -0.00021706907, 0.0045507116, -0.020592714, -0.037225066, -0.017631293, -0.003934266, 0.00090085002, 0.0011482087, -0.0051958319, -0.0093924088, -0.0044486238, -0.00099267077, 0.00022729716,
+ -0.00017594368, 0.00068695648, -0.00057558237, -0.0010665503, -0.0025708607, -0.000499248, 7.7196845e-05, -0.00030140823, 0.00025254186, 0.00046795839, 0.0011279879, 0.00021904948, 0.00068136273, -0.0026603203, 0.0022290109, 0.0041303424, 0.0099559623, 0.001933397, 0.00062102276, -0.0024247282, 0.0020316146, 0.0037645685, 0.0090742845, 0.0017621797, -0.0025772828, 0.010062772, -0.0084313261, -0.015623191, -0.03765884, -0.0073131543, -0.00065028477, 0.0025389792, -0.0021273424, -0.0039419514, -0.0095018563, -0.0018452119,
+ 2.7120965e-05, -0.00010953033, -6.1019057e-05, 0.00077877159, -0.00085071627, -0.0003672525, -1.1899563e-05, 4.80574e-05, 2.6772651e-05, -0.00034169293, 0.00037325929, 0.00016113528, -0.00010502915, 0.00042416916, 0.00023630352, -0.0030158852, 0.0032944995, 0.0014222288, -9.5728e-05, 0.00038660569, 0.00021537701, -0.0027488051, 0.003002746, 0.0012962794, 0.00039727711, -0.0016044374, -0.00089382787, 0.011407711, -0.012461581, -0.0053796393, 0.00010023861, -0.00040482218, -0.00022552537, 0.0028783262, -0.0031442325, -0.0013573588,
+ 2.2885261e-05, -1.0041111e-05, -8.8625882e-05, -8.0777371e-05, 0.00033523107, 8.4583525e-05, -1.0041111e-05, 4.4056261e-06, 3.888539e-05, 3.5441786e-05, -0.0001470856, -3.711177e-05, -8.8625882e-05, 3.888539e-05, 0.00034321422, 0.00031281993, -0.001298222, -0.00032755971, -8.0777371e-05, 3.5441786e-05, 0.00031281993, 0.0002851173, -0.0011832544, -0.00029855176, 0.00033523107, -0.0001470856, -0.001298222, -0.0011832544, 0.0049105786, 0.0012390082, 8.4583525e-05, -3.711177e-05, -0.00032755971, -0.00029855176, 0.0012390082, 0.00031261923,
+ 0.00034415097, -0.0007786221, -0.00038931105, 0.0015572442, 0.00019465552, -0.00018064033, -0.00015099928, 0.00034162733, 0.00017081367, -0.00068325467, -8.5406833e-05, 7.9257541e-05, -0.0013327654, 0.0030153063, 0.0015076531, -0.0060306125, -0.00075382657, 0.00069955105, -0.0012147386, 0.0027482775, 0.0013741387, -0.0054965549, -0.00068706936, 0.00063760037, 0.0050412403, -0.011405521, -0.0057027605, 0.022811042, 0.0028513802, -0.0026460809, 0.001271976, -0.0028777737, -0.0014388869, 0.0057555474, 0.00071944343, -0.0006676435,
+ -0.055055724, -0.069083108, 0.092501111, -0.030443403, -0.013465352, -0.0076342689, 0.12456046, 0.15629662, -0.20927853, 0.068876478, 0.030464596, 0.017272102, 0.062280231, 0.078148312, -0.10463927, 0.034438239, 0.015232298, 0.0086360508, -0.24912092, -0.31259325, 0.41855706, -0.13775296, -0.060929192, -0.034544203, -0.031140116, -0.039074156, 0.052319633, -0.01721912, -0.0076161491, -0.0043180254, 0.028898027, 0.036260817, -0.048552619, 0.015979343, 0.0070677863, 0.0040071275,
+ 0.0046717979, -0.021140649, -0.038215558, -0.01810043, -0.0040389498, 0.00092482001, -0.010569678, 0.047829522, 0.086460537, 0.040951199, 0.0091378954, -0.002092353, -0.0052848392, 0.023914761, 0.043230269, 0.0204756, 0.0045689477, -0.0010461765, 0.021139357, -0.095659044, -0.17292107, -0.081902398, -0.018275791, 0.0041847059, 0.0026424196, -0.011957381, -0.021615134, -0.0102378, -0.0022844738, 0.00052308824, -0.0024521654, 0.011096449, 0.020058845, 0.0095006782, 0.0021199917, -0.00048542589,
+ -0.0026458596, 0.010330524, -0.0086556685, -0.016038896, -0.038660874, -0.0075077442, 0.0059861077, -0.023372226, 0.01958296, 0.036287096, 0.087468041, 0.016985847, 0.0029930539, -0.011686113, 0.0097914802, 0.018143548, 0.043734021, 0.0084929233, -0.011972215, 0.046744453, -0.039165921, -0.072574192, -0.17493608, -0.033971693, -0.0014965269, 0.0058430566, -0.0048957401, -0.009071774, -0.02186701, -0.0042464617, 0.001388777, -0.0054223565, 0.0045432468, 0.0084186062, 0.020292586, 0.0039407164,
+ 0.00040784793, -0.0016471286, -0.00091761102, 0.011711249, -0.012793161, -0.0055227818, -0.00092273288, 0.0037265354, 0.002076043, -0.026496039, 0.028943804, 0.012494982, -0.00046136644, 0.0018632677, 0.0010380215, -0.01324802, 0.014471902, 0.0062474908, 0.0018454658, -0.0074530707, -0.004152086, 0.052992079, -0.057887607, -0.024989963, 0.00023068322, -0.00093163384, -0.00051901076, 0.0066240099, -0.0072359509, -0.0031237454, -0.00021407403, 0.00086455621, 0.00048164198, -0.0061470812, 0.0067149624, 0.0028988357,
+ 0.00034415097, -0.00015099928, -0.0013327654, -0.0012147386, 0.0050412403, 0.001271976, -0.0007786221, 0.00034162733, 0.0030153063, 0.0027482775, -0.011405521, -0.0028777737, -0.00038931105, 0.00017081367, 0.0015076531, 0.0013741387, -0.0057027605, -0.0014388869, 0.0015572442, -0.00068325467, -0.0060306125, -0.0054965549, 0.022811042, 0.0057555474, 0.00019465552, -8.5406833e-05, -0.00075382657, -0.00068706936, 0.0028513802, 0.00071944343, -0.00018064033, 7.9257541e-05, 0.00069955105, 0.00063760037, -0.0026460809, -0.0006676435,
+ 0.0051753786, -0.011709001, -0.0058545007, 0.023418003, 0.0029272503, -0.0027164883, -0.011709001, 0.026490953, 0.013245477, -0.052981906, -0.0066227383, 0.0061459012, -0.0058545007, 0.013245477, 0.0066227383, -0.026490953, -0.0033113692, 0.0030729506, 0.023418003, -0.052981906, -0.026490953, 0.10596381, 0.013245477, -0.012291802, 0.0029272503, -0.0066227383, -0.0033113692, 0.013245477, 0.0016556846, -0.0015364753, -0.0027164883, 0.0061459012, 0.0030729506, -0.012291802, -0.0015364753, 0.0014258491,
+};
+
+static double dgq6_refined_onto_dgq6[] =
+{
+ 0.62818008, 0.78019409, -1.32633, 0.86688232, -0.13653397, 0.15603882, -0.052012939, 0.78019409, 0.96899414, -1.64729, 1.0766602, -0.16957397, 0.19379883, -0.064599609, -1.32633, -1.64729, 2.8003931, -1.8303223, 0.28827576, -0.32945801, 0.10981934, 0.86688232, 1.0766602, -1.8303223, 1.1962891, -0.18841553, 0.21533203, -0.071777344, -0.13653397, -0.16957397, 0.28827576, -0.18841553, 0.029675446, -0.033914795, 0.011304932, 0.15603882, 0.19379883, -0.32945801, 0.21533203, -0.033914795, 0.038759766, -0.012919922, -0.052012939, -0.064599609, 0.10981934, -0.071777344, 0.011304932, -0.012919922, 0.0043066406,
+ -0.045072641, 0.21238617, 0.45037891, 0.15022393, 0.11761607, -0.07079539, -0.01550823, -0.055979821, 0.26378174, 0.55936661, 0.18657679, 0.14607811, -0.087927246, -0.019261085, 0.095165695, -0.44842896, -0.95092323, -0.31718054, -0.24833279, 0.14947632, 0.032743844, -0.062199801, 0.29309082, 0.62151845, 0.20730754, 0.16230901, -0.09769694, -0.021401205, 0.0097964686, -0.046161804, -0.097889156, -0.032650938, -0.025563669, 0.015387268, 0.0033706898, -0.011195964, 0.052756348, 0.11187332, 0.037315357, 0.029215622, -0.017585449, -0.0038522169, 0.003731988, -0.017585449, -0.037291107, -0.012438452, -0.0097385406, 0.0058618164, 0.0012840723,
+ 0.024410051, -0.086688232, 0.014448039, 0.32948663, 0.25397588, 0.2600647, 0.030822483, 0.030317066, -0.10766602, 0.017944336, 0.40921947, 0.31543579, 0.32299805, 0.03828125, -0.051539013, 0.18303223, -0.030505371, -0.6956731, -0.53624084, -0.54909668, -0.065078125, 0.033685629, -0.11962891, 0.019938151, 0.4546883, 0.35048421, 0.35888672, 0.042534722, -0.0053054866, 0.018841553, -0.0031402588, -0.071613408, -0.055201263, -0.056524658, -0.0066992187, 0.0060634133, -0.021533203, 0.0035888672, 0.081843895, 0.063087158, 0.064599609, 0.00765625, -0.0020211378, 0.0071777344, -0.0011962891, -0.027281298, -0.021029053, -0.021533203, -0.0025520833,
+ -0.015576792, 0.078019409, -0.13409586, 0.086688232, -0.10361953, 0.39009705, 0.094776554, -0.019346237, 0.096899414, -0.16654587, 0.10766602, -0.12869453, 0.48449707, 0.11771164, 0.032888603, -0.164729, 0.28312798, -0.18303223, 0.21878071, -0.82364502, -0.20010979, -0.021495819, 0.10766602, -0.18505096, 0.11962891, -0.14299393, 0.53833008, 0.13079071, 0.0033855915, -0.016957397, 0.029145527, -0.018841553, 0.022521544, -0.084786987, -0.020599537, -0.0038692474, 0.019379883, -0.033309174, 0.021533203, -0.025738907, 0.096899414, 0.023542328, 0.0012897491, -0.0064599609, 0.011103058, -0.0071777344, 0.0085796356, -0.032299805, -0.0078474426,
+ -0.0020245091, -0.0024768066, 0.020227254, 0.0067067439, -0.064293772, -0.0057792155, 0.013698881, -0.0025144224, -0.0030761719, 0.02512207, 0.0083297164, -0.079852295, -0.0071777344, 0.017013889, 0.004274518, 0.0052294922, -0.04270752, -0.014160518, 0.1357489, 0.012202148, -0.028923611, -0.0027938026, -0.0034179688, 0.027913411, 0.0092552405, -0.088724772, -0.0079752604, 0.018904321, 0.00044002392, 0.00053833008, -0.0043963623, -0.0014577004, 0.013974152, 0.0012561035, -0.0029774306, -0.00050288448, -0.00061523438, 0.0050244141, 0.0016659433, -0.015970459, -0.0014355469, 0.0034027778, 0.00016762816, 0.00020507813, -0.0016748047, -0.00055531443, 0.0053234863, 0.00047851562, -0.0011342593,
+ 0.0084118577, -0.021672058, 0.00063210169, 0.013326851, 0.046098274, -0.039009705, -0.014438005, 0.010447453, -0.026916504, 0.0007850647, 0.01655183, 0.057253647, -0.048449707, -0.017931875, -0.01776067, 0.045758057, -0.00133461, -0.028138111, -0.0973312, 0.082364502, 0.030484187, 0.011608281, -0.029907227, 0.00087229411, 0.018390922, 0.063615163, -0.053833008, -0.019924305, -0.0018283042, 0.0047103882, -0.00013738632, -0.0028965703, -0.010019388, 0.0084786987, 0.0031380781, 0.0020894905, -0.0053833008, 0.00015701294, 0.003310366, 0.011450729, -0.0096899414, -0.0035863749, -0.00069649685, 0.0017944336, -5.2337646e-05, -0.0011034553, -0.0038169098, 0.0032299805, 0.0011954583,
+ 0.049845734, -0.15603882, 0.078019409, 0.10402588, 0.097524261, -0.24520386, -0.052012939, 0.061907959, -0.19379883, 0.096899414, 0.12919922, 0.12112427, -0.30454102, -0.064599609, -0.10524353, 0.32945801, -0.164729, -0.21963867, -0.20591125, 0.51771973, 0.10981934, 0.068786621, -0.21533203, 0.10766602, 0.14355469, 0.13458252, -0.33837891, -0.071777344, -0.010833893, 0.033914795, -0.016957397, -0.022609863, -0.021196747, 0.053294678, 0.011304932, 0.012381592, -0.038759766, 0.019379883, 0.025839844, 0.024224854, -0.060908203, -0.012919922, -0.0041271973, 0.012919922, -0.0064599609, -0.0086132812, -0.0080749512, 0.020302734, 0.0043066406,
+ -0.045072641, -0.055979821, 0.095165695, -0.062199801, 0.0097964686, -0.011195964, 0.003731988, 0.21238617, 0.26378174, -0.44842896, 0.29309082, -0.046161804, 0.052756348, -0.017585449, 0.45037891, 0.55936661, -0.95092323, 0.62151845, -0.097889156, 0.11187332, -0.037291107, 0.15022393, 0.18657679, -0.31718054, 0.20730754, -0.032650938, 0.037315357, -0.012438452, 0.11761607, 0.14607811, -0.24833279, 0.16230901, -0.025563669, 0.029215622, -0.0097385406, -0.07079539, -0.087927246, 0.14947632, -0.09769694, 0.015387268, -0.017585449, 0.0058618164, -0.01550823, -0.019261085, 0.032743844, -0.021401205, 0.0033706898, -0.0038522169, 0.0012840723,
+ 0.0032340137, -0.015238951, -0.032315203, -0.010778739, -0.0084390875, 0.0050796504, 0.0011127333, -0.015238951, 0.071807251, 0.15227202, 0.050790348, 0.039765708, -0.02393575, -0.0052432953, -0.032315203, 0.15227202, 0.32290288, 0.10770429, 0.084325811, -0.05075734, -0.011118754, -0.010778739, 0.050790348, 0.10770429, 0.035924776, 0.028126882, -0.016930116, -0.0037086615, -0.0084390875, 0.039765708, 0.084325811, 0.028126882, 0.022021613, -0.013255236, -0.0029036531, 0.0050796504, -0.02393575, -0.05075734, -0.016930116, -0.013255236, 0.0079785834, 0.0017477651, 0.0011127333, -0.0052432953, -0.011118754, -0.0037086615, -0.0029036531, 0.0017477651, 0.00038286029,
+ -0.0017514491, 0.0062199801, -0.0010366633, -0.023641044, -0.018223061, -0.01865994, -0.0022115485, 0.0082529792, -0.029309082, 0.004884847, 0.11139863, 0.085868632, 0.087927246, 0.010421007, 0.017500988, -0.062151845, 0.010358641, 0.23622817, 0.18209011, 0.18645554, 0.022098434, 0.0058374562, -0.020730754, 0.0034551257, 0.078793928, 0.060736174, 0.062192262, 0.0073709348, 0.0045703679, -0.016230901, 0.0027051502, 0.061690783, 0.047552676, 0.048692703, 0.0057709871, -0.0027509931, 0.009769694, -0.0016282823, -0.037132878, -0.028622877, -0.029309082, -0.003473669, -0.00060262447, 0.0021401205, -0.00035668675, -0.0081342194, -0.0062700436, -0.0064203616, -0.00076093174,
+ 0.0011176527, -0.0055979821, 0.0096215317, -0.0062199801, 0.0074348199, -0.02798991, -0.0068003264, -0.0052664757, 0.026378174, -0.045337486, 0.029309082, -0.035033512, 0.13189087, 0.032043724, -0.01116791, 0.055936661, -0.096141136, 0.062151845, -0.074290878, 0.2796833, 0.067950834, -0.0037250574, 0.018657679, -0.032067885, 0.020730754, -0.024779729, 0.093288393, 0.022665007, -0.00291649, 0.014607811, -0.025107175, 0.016230901, -0.019400999, 0.073039055, 0.017745302, 0.0017554919, -0.0087927246, 0.015112495, -0.009769694, 0.011677837, -0.043963623, -0.010681241, 0.00038455291, -0.0019261085, 0.0033104989, -0.0021401205, 0.0025581128, -0.0096305423, -0.0023398014,
+ 0.00014526085, 0.00017771372, -0.0014513287, -0.00048121656, 0.0046131519, 0.00041466534, -0.00098291043, -0.00068448165, -0.00083740234, 0.0068387858, 0.0022675339, -0.021737569, -0.0019539388, 0.0046315586, -0.0014514886, -0.001775767, 0.014502097, 0.0048084555, -0.046095952, -0.0041434564, 0.0098215262, -0.00048414415, -0.00059230726, 0.004837176, 0.0016038608, -0.015375309, -0.0013820503, 0.003275971, -0.00037905499, -0.00046374003, 0.0037872103, 0.001255724, -0.012037918, -0.0010820601, 0.0025648831, 0.00022816055, 0.00027913411, -0.0022795953, -0.00075584464, 0.0072458564, 0.00065131293, -0.0015438529, 4.9980181e-05, 6.1146301e-05, -0.00049936145, -0.00016557311, 0.0015872561, 0.0001426747, -0.00033819188,
+ -0.00060356044, 0.001554995, -4.5354021e-05, -0.00095621681, -0.003307604, 0.002798991, 0.0010359434, 0.0028440288, -0.0073272705, 0.00021371206, 0.004505776, 0.015585715, -0.013189087, -0.0048814548, 0.006030951, -0.015537961, 0.00045319054, 0.0095547957, 0.033050539, -0.02796833, -0.010351447, 0.0020116243, -0.0051826885, 0.00015116175, 0.0031870031, 0.01102401, -0.0093288393, -0.0034527263, 0.0015749777, -0.0040577253, 0.00011835032, 0.0024952267, 0.0086311198, -0.0073039055, -0.0027032716, -0.0009480096, 0.0024424235, -7.1237352e-05, -0.0015019253, -0.0051952383, 0.0043963623, 0.0016271516, -0.0002076682, 0.00053503013, -1.5605045e-05, -0.00032900736, -0.0011380537, 0.00096305423, 0.00035643905,
+ -0.0035764885, 0.011195964, -0.0055979821, -0.0074639761, -0.0069974776, 0.017593658, 0.003731988, 0.016852722, -0.052756348, 0.026378174, 0.035170898, 0.032972717, -0.082902832, -0.017585449, 0.035737311, -0.11187332, 0.055936661, 0.074582214, 0.069920826, -0.17580093, -0.037291107, 0.011920184, -0.037315357, 0.018657679, 0.024876905, 0.023322098, -0.058638419, -0.012438452, 0.0093327681, -0.029215622, 0.014607811, 0.019477081, 0.018259764, -0.045910263, -0.0097385406, -0.0056175741, 0.017585449, -0.0087927246, -0.011723633, -0.010990906, 0.027634277, 0.0058618164, -0.0012305693, 0.0038522169, -0.0019261085, -0.0025681446, -0.0024076356, 0.0060534838, 0.0012840723,
+ 0.024410051, 0.030317066, -0.051539013, 0.033685629, -0.0053054866, 0.0060634133, -0.0020211378, -0.086688232, -0.10766602, 0.18303223, -0.11962891, 0.018841553, -0.021533203, 0.0071777344, 0.014448039, 0.017944336, -0.030505371, 0.019938151, -0.0031402588, 0.0035888672, -0.0011962891, 0.32948663, 0.40921947, -0.6956731, 0.4546883, -0.071613408, 0.081843895, -0.027281298, 0.25397588, 0.31543579, -0.53624084, 0.35048421, -0.055201263, 0.063087158, -0.021029053, 0.2600647, 0.32299805, -0.54909668, 0.35888672, -0.056524658, 0.064599609, -0.021533203, 0.030822483, 0.03828125, -0.065078125, 0.042534722, -0.0066992187, 0.00765625, -0.0025520833,
+ -0.0017514491, 0.0082529792, 0.017500988, 0.0058374562, 0.0045703679, -0.0027509931, -0.00060262447, 0.0062199801, -0.029309082, -0.062151845, -0.020730754, -0.016230901, 0.009769694, 0.0021401205, -0.0010366633, 0.004884847, 0.010358641, 0.0034551257, 0.0027051502, -0.0016282823, -0.00035668675, -0.023641044, 0.11139863, 0.23622817, 0.078793928, 0.061690783, -0.037132878, -0.0081342194, -0.018223061, 0.085868632, 0.18209011, 0.060736174, 0.047552676, -0.028622877, -0.0062700436, -0.01865994, 0.087927246, 0.18645554, 0.062192262, 0.048692703, -0.029309082, -0.0064203616, -0.0022115485, 0.010421007, 0.022098434, 0.0073709348, 0.0057709871, -0.003473669, -0.00076093174,
+ 0.00094853464, -0.0033685629, 0.00056142715, 0.012803312, 0.0098690873, 0.010105689, 0.0011977113, -0.0033685629, 0.011962891, -0.0019938151, -0.04546883, -0.035048421, -0.035888672, -0.0042534722, 0.00056142715, -0.0019938151, 0.00033230252, 0.0075781384, 0.0058414035, 0.0059814453, 0.00070891204, 0.012803312, -0.04546883, 0.0075781384, 0.17281898, 0.13321285, 0.13640649, 0.016166695, 0.0098690873, -0.035048421, 0.0058414035, 0.13321285, 0.10268353, 0.10514526, 0.012461661, 0.010105689, -0.035888672, 0.0059814453, 0.13640649, 0.10514526, 0.10766602, 0.012760417, 0.0011977113, -0.0042534722, 0.00070891204, 0.016166695, 0.012461661, 0.012760417, 0.0015123457,
+ -0.00060528865, 0.0030317066, -0.0052107458, 0.0033685629, -0.0040264854, 0.015158533, 0.0036828619, 0.0021495819, -0.010766602, 0.018505096, -0.011962891, 0.014299393, -0.053833008, -0.013079071, -0.00035826365, 0.0017944336, -0.0030841827, 0.0019938151, -0.0023832321, 0.008972168, 0.0021798452, -0.0081701805, 0.040921947, -0.070334597, 0.04546883, -0.054349461, 0.20460974, 0.049711235, -0.0062977632, 0.031543579, -0.054215527, 0.035048421, -0.041893816, 0.1577179, 0.038318564, -0.0064487457, 0.032299805, -0.055515289, 0.035888672, -0.042898178, 0.16149902, 0.039237213, -0.00076429579, 0.003828125, -0.0065795898, 0.0042534722, -0.0050842285, 0.019140625, 0.0046503364,
+ -7.8669114e-05, -9.6244655e-05, 0.00078599802, 0.0002606131, -0.0024983508, -0.00022457086, 0.00053231612, 0.00027938026, 0.00034179688, -0.0027913411, -0.00092552405, 0.0088724772, 0.00079752604, -0.0018904321, -4.6563377e-05, -5.6966146e-05, 0.00046522352, 0.00015425401, -0.0014787462, -0.00013292101, 0.00031507202, -0.0010618749, -0.0012991094, 0.010609394, 0.0035177531, -0.033722716, -0.0030312554, 0.0071851979, -0.00081851766, -0.0010013835, 0.008177965, 0.0027115651, -0.025994246, -0.0023365614, 0.0055385159, -0.00083814079, -0.0010253906, 0.0083740234, 0.0027765721, -0.026617432, -0.0023925781, 0.0056712963, -9.9335205e-05, -0.00012152778, 0.00099247685, 0.00032907522, -0.0031546586, -0.00028356481, 0.00067215364,
+ 0.00032687103, -0.00084214073, 2.4562438e-05, 0.00051785962, 0.0017913035, -0.0015158533, -0.00056103727, -0.0011608281, 0.0029907227, -8.7229411e-05, -0.0018390922, -0.0063615163, 0.0053833008, 0.0019924305, 0.00019347135, -0.00049845378, 1.4538235e-05, 0.00030651537, 0.0010602527, -0.0008972168, -0.00033207175, 0.0044121021, -0.011367208, 0.00033154355, 0.0069900642, 0.024178998, -0.020460974, -0.0075728758, 0.0034009499, -0.0087621053, 0.0002555614, 0.0053881024, 0.018637728, -0.01577179, -0.005837347, 0.0034824842, -0.008972168, 0.00026168823, 0.0055172767, 0.019084549, -0.016149902, -0.0059772915, 0.00041273887, -0.0010633681, 3.1014902e-05, 0.00065389946, 0.0022618725, -0.0019140625, -0.00070841974,
+ 0.0019369237, -0.0060634133, 0.0030317066, 0.0040422755, 0.0037896333, -0.0095282208, -0.0020211378, -0.0068786621, 0.021533203, -0.010766602, -0.014355469, -0.013458252, 0.033837891, 0.0071777344, 0.0011464437, -0.0035888672, 0.0017944336, 0.0023925781, 0.002243042, -0.0056396484, -0.0011962891, 0.026144577, -0.081843895, 0.040921947, 0.054562596, 0.051152434, -0.12861183, -0.027281298, 0.020152842, -0.063087158, 0.031543579, 0.042058105, 0.039429474, -0.099136963, -0.021029053, 0.020635986, -0.064599609, 0.032299805, 0.043066406, 0.040374756, -0.10151367, -0.021533203, 0.0024457465, -0.00765625, 0.003828125, 0.0051041667, 0.0047851562, -0.01203125, -0.0025520833,
+ -0.015576792, -0.019346237, 0.032888603, -0.021495819, 0.0033855915, -0.0038692474, 0.0012897491, 0.078019409, 0.096899414, -0.164729, 0.10766602, -0.016957397, 0.019379883, -0.0064599609, -0.13409586, -0.16654587, 0.28312798, -0.18505096, 0.029145527, -0.033309174, 0.011103058, 0.086688232, 0.10766602, -0.18303223, 0.11962891, -0.018841553, 0.021533203, -0.0071777344, -0.10361953, -0.12869453, 0.21878071, -0.14299393, 0.022521544, -0.025738907, 0.0085796356, 0.39009705, 0.48449707, -0.82364502, 0.53833008, -0.084786987, 0.096899414, -0.032299805, 0.094776554, 0.11771164, -0.20010979, 0.13079071, -0.020599537, 0.023542328, -0.0078474426,
+ 0.0011176527, -0.0052664757, -0.01116791, -0.0037250574, -0.00291649, 0.0017554919, 0.00038455291, -0.0055979821, 0.026378174, 0.055936661, 0.018657679, 0.014607811, -0.0087927246, -0.0019261085, 0.0096215317, -0.045337486, -0.096141136, -0.032067885, -0.025107175, 0.015112495, 0.0033104989, -0.0062199801, 0.029309082, 0.062151845, 0.020730754, 0.016230901, -0.009769694, -0.0021401205, 0.0074348199, -0.035033512, -0.074290878, -0.024779729, -0.019400999, 0.011677837, 0.0025581128, -0.02798991, 0.13189087, 0.2796833, 0.093288393, 0.073039055, -0.043963623, -0.0096305423, -0.0068003264, 0.032043724, 0.067950834, 0.022665007, 0.017745302, -0.010681241, -0.0023398014,
+ -0.00060528865, 0.0021495819, -0.00035826365, -0.0081701805, -0.0062977632, -0.0064487457, -0.00076429579, 0.0030317066, -0.010766602, 0.0017944336, 0.040921947, 0.031543579, 0.032299805, 0.003828125, -0.0052107458, 0.018505096, -0.0030841827, -0.070334597, -0.054215527, -0.055515289, -0.0065795898, 0.0033685629, -0.011962891, 0.0019938151, 0.04546883, 0.035048421, 0.035888672, 0.0042534722, -0.0040264854, 0.014299393, -0.0023832321, -0.054349461, -0.041893816, -0.042898178, -0.0050842285, 0.015158533, -0.053833008, 0.008972168, 0.20460974, 0.1577179, 0.16149902, 0.019140625, 0.0036828619, -0.013079071, 0.0021798452, 0.049711235, 0.038318564, 0.039237213, 0.0046503364,
+ 0.000386253, -0.0019346237, 0.0033251345, -0.0021495819, 0.0025694221, -0.0096731186, -0.0023501456, -0.0019346237, 0.0096899414, -0.016654587, 0.010766602, -0.012869453, 0.048449707, 0.011771164, 0.0033251345, -0.016654587, 0.028625071, -0.018505096, 0.022119373, -0.083272934, -0.020231688, -0.0021495819, 0.010766602, -0.018505096, 0.011962891, -0.014299393, 0.053833008, 0.013079071, 0.0025694221, -0.012869453, 0.022119373, -0.014299393, 0.017092243, -0.064347267, -0.015633577, -0.0096731186, 0.048449707, -0.083272934, 0.053833008, -0.064347267, 0.24224854, 0.05885582, -0.0023501456, 0.011771164, -0.020231688, 0.013079071, -0.015633577, 0.05885582, 0.014299395,
+ 5.0201141e-05, 6.1416626e-05, -0.00050156911, -0.0001663051, 0.0015942732, 0.00014330546, -0.00033968702, -0.00025144224, -0.00030761719, 0.002512207, 0.00083297164, -0.0079852295, -0.00071777344, 0.0017013889, 0.00043216635, 0.00052871704, -0.0043178558, -0.00143167, 0.013724613, 0.0012336731, -0.0029242622, -0.00027938026, -0.00034179688, 0.0027913411, 0.00092552405, -0.0088724772, -0.00079752604, 0.0018904321, 0.00033394672, 0.00040855408, -0.003336525, -0.0011062905, 0.010605383, 0.00095329285, -0.0022596571, -0.0012572112, -0.0015380859, 0.012561035, 0.0041648582, -0.039926147, -0.0035888672, 0.0085069444, -0.00030544744, -0.00037368774, 0.0030517832, 0.0010118787, -0.009700311, -0.00087193807, 0.0020668162,
+ -0.00020858629, 0.00053739548, -1.5674035e-05, -0.00033046189, -0.001143085, 0.00096731186, 0.00035801486, 0.0010447453, -0.0026916504, 7.850647e-05, 0.001655183, 0.0057253647, -0.0048449707, -0.0017931875, -0.0017956559, 0.0046262741, -0.00013493299, -0.0028448458, -0.0098404706, 0.0083272934, 0.0030820409, 0.0011608281, -0.0029907227, 8.7229411e-05, 0.0018390922, 0.0063615163, -0.0053833008, -0.0019924305, -0.0013875523, 0.0035748482, -0.00010426641, -0.0021982899, -0.007604, 0.0064347267, 0.0023815771, 0.0052237263, -0.013458252, 0.00039253235, 0.0082759151, 0.028626823, -0.024224854, -0.0089659373, 0.0012691375, -0.0032697678, 9.5368226e-05, 0.0020106861, 0.0069550685, -0.005885582, -0.0021783314,
+ -0.0012360096, 0.0038692474, -0.0019346237, -0.0025794983, -0.0024182796, 0.006080246, 0.0012897491, 0.0061907959, -0.019379883, 0.0096899414, 0.012919922, 0.012112427, -0.030454102, -0.0064599609, -0.01064043, 0.033309174, -0.016654587, -0.022206116, -0.020818233, 0.052342987, 0.011103058, 0.0068786621, -0.021533203, 0.010766602, 0.014355469, 0.013458252, -0.033837891, -0.0071777344, -0.0082221508, 0.025738907, -0.012869453, -0.017159271, -0.016086817, 0.040446854, 0.0085796356, 0.030953979, -0.096899414, 0.048449707, 0.064599609, 0.060562134, -0.15227051, -0.032299805, 0.0075204659, -0.023542328, 0.011771164, 0.015694885, 0.014713955, -0.036995087, -0.0078474426,
+ -0.0020245091, -0.0025144224, 0.004274518, -0.0027938026, 0.00044002392, -0.00050288448, 0.00016762816, -0.0024768066, -0.0030761719, 0.0052294922, -0.0034179688, 0.00053833008, -0.00061523438, 0.00020507813, 0.020227254, 0.02512207, -0.04270752, 0.027913411, -0.0043963623, 0.0050244141, -0.0016748047, 0.0067067439, 0.0083297164, -0.014160518, 0.0092552405, -0.0014577004, 0.0016659433, -0.00055531443, -0.064293772, -0.079852295, 0.1357489, -0.088724772, 0.013974152, -0.015970459, 0.0053234863, -0.0057792155, -0.0071777344, 0.012202148, -0.0079752604, 0.0012561035, -0.0014355469, 0.00047851562, 0.013698881, 0.017013889, -0.028923611, 0.018904321, -0.0029774306, 0.0034027778, -0.0011342593,
+ 0.00014526085, -0.00068448165, -0.0014514886, -0.00048414415, -0.00037905499, 0.00022816055, 4.9980181e-05, 0.00017771372, -0.00083740234, -0.001775767, -0.00059230726, -0.00046374003, 0.00027913411, 6.1146301e-05, -0.0014513287, 0.0068387858, 0.014502097, 0.004837176, 0.0037872103, -0.0022795953, -0.00049936145, -0.00048121656, 0.0022675339, 0.0048084555, 0.0016038608, 0.001255724, -0.00075584464, -0.00016557311, 0.0046131519, -0.021737569, -0.046095952, -0.015375309, -0.012037918, 0.0072458564, 0.0015872561, 0.00041466534, -0.0019539388, -0.0041434564, -0.0013820503, -0.0010820601, 0.00065131293, 0.0001426747, -0.00098291043, 0.0046315586, 0.0098215262, 0.003275971, 0.0025648831, -0.0015438529, -0.00033819188,
+ -7.8669114e-05, 0.00027938026, -4.6563377e-05, -0.0010618749, -0.00081851766, -0.00083814079, -9.9335205e-05, -9.6244655e-05, 0.00034179688, -5.6966146e-05, -0.0012991094, -0.0010013835, -0.0010253906, -0.00012152778, 0.00078599802, -0.0027913411, 0.00046522352, 0.010609394, 0.008177965, 0.0083740234, 0.00099247685, 0.0002606131, -0.00092552405, 0.00015425401, 0.0035177531, 0.0027115651, 0.0027765721, 0.00032907522, -0.0024983508, 0.0088724772, -0.0014787462, -0.033722716, -0.025994246, -0.026617432, -0.0031546586, -0.00022457086, 0.00079752604, -0.00013292101, -0.0030312554, -0.0023365614, -0.0023925781, -0.00028356481, 0.00053231612, -0.0018904321, 0.00031507202, 0.0071851979, 0.0055385159, 0.0056712963, 0.00067215364,
+ 5.0201141e-05, -0.00025144224, 0.00043216635, -0.00027938026, 0.00033394672, -0.0012572112, -0.00030544744, 6.1416626e-05, -0.00030761719, 0.00052871704, -0.00034179688, 0.00040855408, -0.0015380859, -0.00037368774, -0.00050156911, 0.002512207, -0.0043178558, 0.0027913411, -0.003336525, 0.012561035, 0.0030517832, -0.0001663051, 0.00083297164, -0.00143167, 0.00092552405, -0.0011062905, 0.0041648582, 0.0010118787, 0.0015942732, -0.0079852295, 0.013724613, -0.0088724772, 0.010605383, -0.039926147, -0.009700311, 0.00014330546, -0.00071777344, 0.0012336731, -0.00079752604, 0.00095329285, -0.0035888672, -0.00087193807, -0.00033968702, 0.0017013889, -0.0029242622, 0.0018904321, -0.0022596571, 0.0085069444, 0.0020668162,
+ 6.5246214e-06, 7.9822933e-06, -6.5188728e-05, -2.1614605e-05, 0.00020720703, 1.8625351e-05, -4.414898e-05, 7.9822933e-06, 9.765625e-06, -7.9752604e-05, -2.6443544e-05, 0.00025349935, 2.2786458e-05, -5.4012346e-05, -6.5188728e-05, -7.9752604e-05, 0.00065131293, 0.00021595561, -0.0020702447, -0.00018608941, 0.00044110082, -2.1614605e-05, -2.6443544e-05, 0.00021595561, 7.160433e-05, -0.00068643034, -6.1701603e-05, 0.00014625565, 0.00020720703, 0.00025349935, -0.0020702447, -0.00068643034, 0.0065804206, 0.00059149848, -0.0014020705, 1.8625351e-05, 2.2786458e-05, -0.00018608941, -6.1701603e-05, 0.00059149848, 5.3168403e-05, -0.00012602881, -4.414898e-05, -5.4012346e-05, 0.00044110082, 0.00014625565, -0.0014020705, -0.00012602881, 0.00029873495,
+ -2.7109874e-05, 6.9845066e-05, -2.0371478e-06, -4.2949994e-05, -0.00014856628, 0.00012572112, 4.6531042e-05, -3.3166516e-05, 8.5449219e-05, -2.4922689e-06, -5.2545493e-05, -0.00018175761, 0.00015380859, 5.6926586e-05, 0.00027085988, -0.00069783529, 2.0353529e-05, 0.00042912152, 0.0014843538, -0.0012561035, -0.00046490045, 8.9808921e-05, -0.00023138101, 6.7486129e-06, 0.00014228368, 0.00049216669, -0.00041648582, -0.00015414689, -0.00086094749, 0.0022181193, -6.4695146e-05, -0.0013639934, -0.0047181246, 0.0039926147, 0.0014777193, -7.7388538e-05, 0.00019938151, -5.8152941e-06, -0.00012260615, -0.00042410109, 0.00035888672, 0.0001328287, 0.0001834395, -0.00047260802, 1.3784401e-05, 0.00029062198, 0.0010052767, -0.00085069444, -0.00031485322,
+ -0.00016064365, 0.00050288448, -0.00025144224, -0.00033525632, -0.0003143028, 0.00079024703, 0.00016762816, -0.0001965332, 0.00061523438, -0.00030761719, -0.00041015625, -0.00038452148, 0.00096679688, 0.00020507813, 0.0016050212, -0.0050244141, 0.002512207, 0.0033496094, 0.0031402588, -0.0078955078, -0.0016748047, 0.00053217633, -0.0016659433, 0.00083297164, 0.0011106289, 0.0010412146, -0.0026179109, -0.00055531443, -0.0051016744, 0.015970459, -0.0079852295, -0.010646973, -0.0099815369, 0.025096436, 0.0053234863, -0.00045857747, 0.0014355469, -0.00071777344, -0.00095703125, -0.0008972168, 0.0022558594, 0.00047851562, 0.0010869985, -0.0034027778, 0.0017013889, 0.0022685185, 0.0021267361, -0.0053472222, -0.0011342593,
+ 0.0084118577, 0.010447453, -0.01776067, 0.011608281, -0.0018283042, 0.0020894905, -0.00069649685, -0.021672058, -0.026916504, 0.045758057, -0.029907227, 0.0047103882, -0.0053833008, 0.0017944336, 0.00063210169, 0.0007850647, -0.00133461, 0.00087229411, -0.00013738632, 0.00015701294, -5.2337646e-05, 0.013326851, 0.01655183, -0.028138111, 0.018390922, -0.0028965703, 0.003310366, -0.0011034553, 0.046098274, 0.057253647, -0.0973312, 0.063615163, -0.010019388, 0.011450729, -0.0038169098, -0.039009705, -0.048449707, 0.082364502, -0.053833008, 0.0084786987, -0.0096899414, 0.0032299805, -0.014438005, -0.017931875, 0.030484187, -0.019924305, 0.0031380781, -0.0035863749, 0.0011954583,
+ -0.00060356044, 0.0028440288, 0.006030951, 0.0020116243, 0.0015749777, -0.0009480096, -0.0002076682, 0.001554995, -0.0073272705, -0.015537961, -0.0051826885, -0.0040577253, 0.0024424235, 0.00053503013, -4.5354021e-05, 0.00021371206, 0.00045319054, 0.00015116175, 0.00011835032, -7.1237352e-05, -1.5605045e-05, -0.00095621681, 0.004505776, 0.0095547957, 0.0031870031, 0.0024952267, -0.0015019253, -0.00032900736, -0.003307604, 0.015585715, 0.033050539, 0.01102401, 0.0086311198, -0.0051952383, -0.0011380537, 0.002798991, -0.013189087, -0.02796833, -0.0093288393, -0.0073039055, 0.0043963623, 0.00096305423, 0.0010359434, -0.0048814548, -0.010351447, -0.0034527263, -0.0027032716, 0.0016271516, 0.00035643905,
+ 0.00032687103, -0.0011608281, 0.00019347135, 0.0044121021, 0.0034009499, 0.0034824842, 0.00041273887, -0.00084214073, 0.0029907227, -0.00049845378, -0.011367208, -0.0087621053, -0.008972168, -0.0010633681, 2.4562438e-05, -8.7229411e-05, 1.4538235e-05, 0.00033154355, 0.0002555614, 0.00026168823, 3.1014902e-05, 0.00051785962, -0.0018390922, 0.00030651537, 0.0069900642, 0.0053881024, 0.0055172767, 0.00065389946, 0.0017913035, -0.0063615163, 0.0010602527, 0.024178998, 0.018637728, 0.019084549, 0.0022618725, -0.0015158533, 0.0053833008, -0.0008972168, -0.020460974, -0.01577179, -0.016149902, -0.0019140625, -0.00056103727, 0.0019924305, -0.00033207175, -0.0075728758, -0.005837347, -0.0059772915, -0.00070841974,
+ -0.00020858629, 0.0010447453, -0.0017956559, 0.0011608281, -0.0013875523, 0.0052237263, 0.0012691375, 0.00053739548, -0.0026916504, 0.0046262741, -0.0029907227, 0.0035748482, -0.013458252, -0.0032697678, -1.5674035e-05, 7.850647e-05, -0.00013493299, 8.7229411e-05, -0.00010426641, 0.00039253235, 9.5368226e-05, -0.00033046189, 0.001655183, -0.0028448458, 0.0018390922, -0.0021982899, 0.0082759151, 0.0020106861, -0.001143085, 0.0057253647, -0.0098404706, 0.0063615163, -0.007604, 0.028626823, 0.0069550685, 0.00096731186, -0.0048449707, 0.0083272934, -0.0053833008, 0.0064347267, -0.024224854, -0.005885582, 0.00035801486, -0.0017931875, 0.0030820409, -0.0019924305, 0.0023815771, -0.0089659373, -0.0021783314,
+ -2.7109874e-05, -3.3166516e-05, 0.00027085988, 8.9808921e-05, -0.00086094749, -7.7388538e-05, 0.0001834395, 6.9845066e-05, 8.5449219e-05, -0.00069783529, -0.00023138101, 0.0022181193, 0.00019938151, -0.00047260802, -2.0371478e-06, -2.4922689e-06, 2.0353529e-05, 6.7486129e-06, -6.4695146e-05, -5.8152941e-06, 1.3784401e-05, -4.2949994e-05, -5.2545493e-05, 0.00042912152, 0.00014228368, -0.0013639934, -0.00012260615, 0.00029062198, -0.00014856628, -0.00018175761, 0.0014843538, 0.00049216669, -0.0047181246, -0.00042410109, 0.0010052767, 0.00012572112, 0.00015380859, -0.0012561035, -0.00041648582, 0.0039926147, 0.00035888672, -0.00085069444, 4.6531042e-05, 5.6926586e-05, -0.00046490045, -0.00015414689, 0.0014777193, 0.0001328287, -0.00031485322,
+ 0.00011264182, -0.00029020702, 8.4643714e-06, 0.0001784577, 0.00061729451, -0.00052237263, -0.00019333699, -0.00029020702, 0.00074768066, -2.1807353e-05, -0.00045977306, -0.0015903791, 0.0013458252, 0.00049810763, 8.4643714e-06, -2.1807353e-05, 6.3604779e-07, 1.3410048e-05, 4.6386056e-05, -3.9253235e-05, -1.4528139e-05, 0.0001784577, -0.00045977306, 1.3410048e-05, 0.00028272935, 0.00097797561, -0.00082759151, -0.00030630252, 0.00061729451, -0.0015903791, 4.6386056e-05, 0.00097797561, 0.0033828688, -0.0028626823, -0.0010595164, -0.00052237263, 0.0013458252, -3.9253235e-05, -0.00082759151, -0.0028626823, 0.0024224854, 0.00089659373, -0.00019333699, 0.00049810763, -1.4528139e-05, -0.00030630252, -0.0010595164, 0.00089659373, 0.00033184115,
+ 0.00066747614, -0.0020894905, 0.0010447453, 0.0013929937, 0.0013059316, -0.0032834851, -0.00069649685, -0.0017196655, 0.0053833008, -0.0026916504, -0.0035888672, -0.003364563, 0.0084594727, 0.0017944336, 5.0156911e-05, -0.00015701294, 7.850647e-05, 0.00010467529, 9.8133087e-05, -0.00024673462, -5.2337646e-05, 0.001057478, -0.003310366, 0.001655183, 0.0022069107, 0.0020689788, -0.0052020038, -0.0011034553, 0.0036578719, -0.011450729, 0.0057253647, 0.0076338196, 0.0071567059, -0.017994003, -0.0038169098, -0.0030953979, 0.0096899414, -0.0048449707, -0.0064599609, -0.0060562134, 0.015227051, 0.0032299805, -0.0011456475, 0.0035863749, -0.0017931875, -0.0023909166, -0.0022414843, 0.005635732, 0.0011954583,
+ 0.049845734, 0.061907959, -0.10524353, 0.068786621, -0.010833893, 0.012381592, -0.0041271973, -0.15603882, -0.19379883, 0.32945801, -0.21533203, 0.033914795, -0.038759766, 0.012919922, 0.078019409, 0.096899414, -0.164729, 0.10766602, -0.016957397, 0.019379883, -0.0064599609, 0.10402588, 0.12919922, -0.21963867, 0.14355469, -0.022609863, 0.025839844, -0.0086132812, 0.097524261, 0.12112427, -0.20591125, 0.13458252, -0.021196747, 0.024224854, -0.0080749512, -0.24520386, -0.30454102, 0.51771973, -0.33837891, 0.053294678, -0.060908203, 0.020302734, -0.052012939, -0.064599609, 0.10981934, -0.071777344, 0.011304932, -0.012919922, 0.0043066406,
+ -0.0035764885, 0.016852722, 0.035737311, 0.011920184, 0.0093327681, -0.0056175741, -0.0012305693, 0.011195964, -0.052756348, -0.11187332, -0.037315357, -0.029215622, 0.017585449, 0.0038522169, -0.0055979821, 0.026378174, 0.055936661, 0.018657679, 0.014607811, -0.0087927246, -0.0019261085, -0.0074639761, 0.035170898, 0.074582214, 0.024876905, 0.019477081, -0.011723633, -0.0025681446, -0.0069974776, 0.032972717, 0.069920826, 0.023322098, 0.018259764, -0.010990906, -0.0024076356, 0.017593658, -0.082902832, -0.17580093, -0.058638419, -0.045910263, 0.027634277, 0.0060534838, 0.003731988, -0.017585449, -0.037291107, -0.012438452, -0.0097385406, 0.0058618164, 0.0012840723,
+ 0.0019369237, -0.0068786621, 0.0011464437, 0.026144577, 0.020152842, 0.020635986, 0.0024457465, -0.0060634133, 0.021533203, -0.0035888672, -0.081843895, -0.063087158, -0.064599609, -0.00765625, 0.0030317066, -0.010766602, 0.0017944336, 0.040921947, 0.031543579, 0.032299805, 0.003828125, 0.0040422755, -0.014355469, 0.0023925781, 0.054562596, 0.042058105, 0.043066406, 0.0051041667, 0.0037896333, -0.013458252, 0.002243042, 0.051152434, 0.039429474, 0.040374756, 0.0047851562, -0.0095282208, 0.033837891, -0.0056396484, -0.12861183, -0.099136963, -0.10151367, -0.01203125, -0.0020211378, 0.0071777344, -0.0011962891, -0.027281298, -0.021029053, -0.021533203, -0.0025520833,
+ -0.0012360096, 0.0061907959, -0.01064043, 0.0068786621, -0.0082221508, 0.030953979, 0.0075204659, 0.0038692474, -0.019379883, 0.033309174, -0.021533203, 0.025738907, -0.096899414, -0.023542328, -0.0019346237, 0.0096899414, -0.016654587, 0.010766602, -0.012869453, 0.048449707, 0.011771164, -0.0025794983, 0.012919922, -0.022206116, 0.014355469, -0.017159271, 0.064599609, 0.015694885, -0.0024182796, 0.012112427, -0.020818233, 0.013458252, -0.016086817, 0.060562134, 0.014713955, 0.006080246, -0.030454102, 0.052342987, -0.033837891, 0.040446854, -0.15227051, -0.036995087, 0.0012897491, -0.0064599609, 0.011103058, -0.0071777344, 0.0085796356, -0.032299805, -0.0078474426,
+ -0.00016064365, -0.0001965332, 0.0016050212, 0.00053217633, -0.0051016744, -0.00045857747, 0.0010869985, 0.00050288448, 0.00061523438, -0.0050244141, -0.0016659433, 0.015970459, 0.0014355469, -0.0034027778, -0.00025144224, -0.00030761719, 0.002512207, 0.00083297164, -0.0079852295, -0.00071777344, 0.0017013889, -0.00033525632, -0.00041015625, 0.0033496094, 0.0011106289, -0.010646973, -0.00095703125, 0.0022685185, -0.0003143028, -0.00038452148, 0.0031402588, 0.0010412146, -0.0099815369, -0.0008972168, 0.0021267361, 0.00079024703, 0.00096679688, -0.0078955078, -0.0026179109, 0.025096436, 0.0022558594, -0.0053472222, 0.00016762816, 0.00020507813, -0.0016748047, -0.00055531443, 0.0053234863, 0.00047851562, -0.0011342593,
+ 0.00066747614, -0.0017196655, 5.0156911e-05, 0.001057478, 0.0036578719, -0.0030953979, -0.0011456475, -0.0020894905, 0.0053833008, -0.00015701294, -0.003310366, -0.011450729, 0.0096899414, 0.0035863749, 0.0010447453, -0.0026916504, 7.850647e-05, 0.001655183, 0.0057253647, -0.0048449707, -0.0017931875, 0.0013929937, -0.0035888672, 0.00010467529, 0.0022069107, 0.0076338196, -0.0064599609, -0.0023909166, 0.0013059316, -0.003364563, 9.8133087e-05, 0.0020689788, 0.0071567059, -0.0060562134, -0.0022414843, -0.0032834851, 0.0084594727, -0.00024673462, -0.0052020038, -0.017994003, 0.015227051, 0.005635732, -0.00069649685, 0.0017944336, -5.2337646e-05, -0.0011034553, -0.0038169098, 0.0032299805, 0.0011954583,
+ 0.0039552307, -0.012381592, 0.0061907959, 0.0082543945, 0.0077384949, -0.019456787, -0.0041271973, -0.012381592, 0.038759766, -0.019379883, -0.025839844, -0.024224854, 0.060908203, 0.012919922, 0.0061907959, -0.019379883, 0.0096899414, 0.012919922, 0.012112427, -0.030454102, -0.0064599609, 0.0082543945, -0.025839844, 0.012919922, 0.017226562, 0.016149902, -0.040605469, -0.0086132812, 0.0077384949, -0.024224854, 0.012112427, 0.016149902, 0.015140533, -0.038067627, -0.0080749512, -0.019456787, 0.060908203, -0.030454102, -0.040605469, -0.038067627, 0.095712891, 0.020302734, -0.0041271973, 0.012919922, -0.0064599609, -0.0086132812, -0.0080749512, 0.020302734, 0.0043066406,
+};
+
+static double dgq7_refined_onto_dgq7[] =
+{
+ 0.66435707, 0.82284563, -1.7296486, 1.7246505, -0.93375832, 0.59466422, -0.40898152, -0.030484761, 0.82284563, 1.0191431, -2.1422724, 2.1360819, -1.1565151, 0.73652691, -0.50654787, -0.037757185, -1.7296486, -2.1422724, 4.5031271, -4.4901145, 2.4310328, -1.5482038, 1.0647803, 0.079366846, 1.7246505, 2.1360819, -4.4901145, 4.4771395, -2.4240078, 1.54373, -1.0617034, -0.079137501, -0.93375832, -1.1565151, 2.4310328, -2.4240078, 1.3124036, -0.83580456, 0.57482628, 0.042846537, 0.59466422, 0.73652691, -1.5482038, 1.54373, -0.83580456, 0.53228234, -0.36607826, -0.027286828, -0.40898152, -0.50654787, 1.0647803, -1.0617034, 0.57482628, -0.36607826, 0.25177107, 0.018766571, -0.030484761, -0.037757185, 0.079366846, -0.079137501, 0.042846537, -0.027286828, 0.018766571, 0.0013988271,
+ -0.039696689, 0.20175067, 0.45678682, 0.19823369, 0.090608273, -0.051622037, -0.077032006, -0.010079623, -0.049166703, 0.24988017, 0.56575757, 0.24552418, 0.11222372, -0.063936955, -0.095408709, -0.012484211, 0.10335003, -0.52525636, -1.189241, -0.51609991, -0.23589795, 0.13439759, 0.20055225, 0.026242222, -0.10305138, 0.52373853, 1.1858045, 0.51460854, 0.23521628, -0.13400922, -0.19997271, -0.02616639, 0.055793963, -0.28356193, -0.64201694, -0.27861878, -0.12735054, 0.072555121, 0.108269, 0.014166977, -0.035532399, 0.18058648, 0.40886865, 0.17743844, 0.081103221, -0.046206747, -0.068951141, -0.0090222431, 0.024437479, -0.12419872, -0.28120024, -0.12203365, -0.055778904, 0.031778784, 0.047421287, 0.006205066, 0.0018215266, -0.0092575535, -0.02096017, -0.0090961726, -0.0041576611, 0.0023687345, 0.0035346991, 0.00046251467,
+ 0.023240384, -0.091879897, 0.047509062, 0.28079715, 0.30352108, 0.23167502, 0.083766316, 0.00036782483, 0.028784593, -0.1137987, 0.058842791, 0.34778392, 0.37592886, 0.28694325, 0.10374955, 0.00045557286, -0.060506163, 0.23920862, -0.12368948, -0.73105326, -0.79021485, -0.60316417, -0.21808497, -0.00095762916, 0.060331319, -0.23851738, 0.12333206, 0.72894074, 0.78793138, 0.60142121, 0.21745477, 0.00095486191, -0.032664515, 0.12913781, -0.066774306, -0.39466228, -0.42660092, -0.3256208, -0.11773412, -0.00051698027, 0.020802405, -0.082241448, 0.042525233, 0.25134077, 0.2716809, 0.20737169, 0.074979003, 0.00032923901, -0.014306896, 0.056561723, -0.029246815, -0.17286012, -0.18684909, -0.1426203, -0.051566962, -0.0002264348, -0.0010664108, 0.004216011, -0.002180006, -0.012884689, -0.013927402, -0.010630665, -0.0038437103, -1.687805e-05,
+ -0.012685726, 0.046350995, 0.0019513964, -0.21932274, 0.29369939, 0.066851313, 0.44574228, 0.075655742, -0.015712024, 0.057408457, 0.0024169202, -0.27164422, 0.36376411, 0.082799317, 0.55207825, 0.093704124, 0.033027191, -0.12067447, -0.0050804459, 0.5710051, -0.76464414, -0.17404689, -1.1604867, -0.19696915, -0.032931753, 0.12032575, 0.005065765, -0.56935507, 0.76243456, 0.17354395, 1.1571332, 0.19639997, 0.017829873, -0.065146635, -0.0027427008, 0.30825958, -0.41279646, -0.09395997, -0.62649377, -0.10633465, -0.011354959, 0.041488651, 0.0017466897, -0.19631519, 0.26288953, 0.05983843, 0.39898272, 0.067719251, 0.0078093959, -0.028533904, -0.0012012894, 0.13501617, -0.18080281, -0.041154002, -0.27440117, -0.046574052, 0.00058209859, -0.0021268668, -8.954199e-05, 0.010063867, -0.013476722, -0.0030675467, -0.020453379, -0.0034715477,
+ 0.0051649911, -0.03759078, 0.09998429, -0.123768, 0.11322927, -0.18915149, 0.19038944, 0.058580649, 0.0063971479, -0.04655841, 0.12383647, -0.15329401, 0.14024116, -0.23427534, 0.23580862, 0.072555608, -0.013447015, 0.097867311, -0.26030835, 0.32222905, -0.29479154, 0.49245449, -0.49567748, -0.15251428, 0.013408158, -0.097584505, 0.25955613, -0.32129791, 0.29393968, -0.49103145, 0.49424512, 0.15207356, -0.0072594298, 0.052834093, -0.14052859, 0.17395675, -0.15914449, 0.2658537, -0.26759364, -0.082335495, 0.0046231696, -0.033647405, 0.089495668, -0.1107844, 0.10135121, -0.16930899, 0.17041708, 0.052435381, -0.0031795943, 0.023141071, -0.061550827, 0.076192197, -0.069704501, 0.1164426, -0.11720469, -0.036062539, -0.00023700135, 0.0017248946, -0.0045878901, 0.0056792319, -0.0051956505, 0.0086794262, -0.0087362308, -0.0026880381,
+ 0.0062768122, -0.015216389, -0.015351692, 0.059425458, -0.019000422, -0.00089385118, -0.070220007, -0.0089358298, 0.0077742042, -0.0188464, -0.019013981, 0.073601955, -0.02353315, -0.0011070877, -0.086971643, -0.011067555, -0.016341633, 0.039615753, 0.039968015, -0.15471373, 0.049467457, 0.0023271348, 0.18281726, 0.023264365, 0.016294411, -0.039501276, -0.03985252, 0.15426666, -0.049324511, -0.0023204101, -0.18228897, -0.023197139, -0.0088221017, 0.021386737, 0.021576907, -0.083522881, 0.026705221, 0.0012563138, 0.098694691, 0.012559369, 0.0056183576, -0.013620148, -0.013741258, 0.053191568, -0.017007227, -0.00080008378, -0.062853739, -0.0079984371, -0.0038640369, 0.0093672848, 0.0094505783, -0.036582609, 0.011696755, 0.00055025924, 0.043227786, 0.0055009414, -0.00028801849, 0.00069822088, 0.00070442943, -0.0027268031, 0.00087185547, 4.1015353e-05, 0.0032221229, 0.00041003046,
+ -0.010139101, 0.033410252, -0.014214324, -0.04106065, 0.0035044489, 0.044828922, 0.031294918, -0.0014925413, -0.012557878, 0.041380579, -0.017605283, -0.05085605, 0.0043404679, 0.055523279, 0.038760612, -0.0018486009, 0.026397074, -0.086983339, 0.037006885, 0.10690109, -0.0091238064, -0.11671176, -0.081476082, 0.00388582, -0.026320794, 0.086731984, -0.036899947, -0.10659218, 0.0090974414, 0.1163745, 0.081240642, -0.0038745912, 0.014250575, -0.046958334, 0.019978328, 0.057711019, -0.0049255265, -0.063007351, -0.043985217, 0.0020977768, -0.0090754822, 0.029905426, -0.012723203, -0.036753277, 0.0031368228, 0.040126247, 0.028011996, -0.0013359697, 0.0062416813, -0.020567518, 0.0087504086, 0.025277141, -0.0021573562, -0.027596908, -0.019265307, 0.00091881587, 0.00046524391, -0.0015330665, 0.00065224002, 0.0018841135, -0.00016080553, -0.0020570248, -0.001436002, 6.8486914e-05,
+ -0.041515831, 0.15199575, -0.12272913, -0.085084105, -0.013289877, 0.23583754, 0.0122498, -0.026027287, -0.051419819, 0.18825575, -0.1520073, -0.10538171, -0.016460301, 0.29209878, 0.015172104, -0.032236339, 0.10808615, -0.39571978, 0.31952436, 0.22151583, 0.034600095, -0.61400125, -0.031892261, 0.067761845, -0.10777382, 0.39457627, -0.31860103, -0.22087571, -0.034500111, 0.61222698, 0.031800103, -0.067566035, 0.05835078, -0.21363104, 0.17249661, 0.11958628, 0.018679012, -0.33147124, -0.017217176, 0.036581527, -0.037160708, 0.13605098, -0.10985451, -0.076158553, -0.011895733, 0.21109754, 0.010964763, -0.023296954, 0.025557353, -0.09356934, 0.075552662, 0.052378199, 0.0081813146, -0.14518276, -0.0075410378, 0.016022528, 0.001905, -0.0069744935, 0.0056315621, 0.0039041786, 0.00060982076, -0.010821667, -0.00056209566, 0.0011942909,
+ -0.039696689, -0.049166703, 0.10335003, -0.10305138, 0.055793963, -0.035532399, 0.024437479, 0.0018215266, 0.20175067, 0.24988017, -0.52525636, 0.52373853, -0.28356193, 0.18058648, -0.12419872, -0.0092575535, 0.45678682, 0.56575757, -1.189241, 1.1858045, -0.64201694, 0.40886865, -0.28120024, -0.02096017, 0.19823369, 0.24552418, -0.51609991, 0.51460854, -0.27861878, 0.17743844, -0.12203365, -0.0090961726, 0.090608273, 0.11222372, -0.23589795, 0.23521628, -0.12735054, 0.081103221, -0.055778904, -0.0041576611, -0.051622037, -0.063936955, 0.13439759, -0.13400922, 0.072555121, -0.046206747, 0.031778784, 0.0023687345, -0.077032006, -0.095408709, 0.20055225, -0.19997271, 0.108269, -0.068951141, 0.047421287, 0.0035346991, -0.010079623, -0.012484211, 0.026242222, -0.02616639, 0.014166977, -0.0090222431, 0.006205066, 0.00046251467,
+ 0.002371958, -0.012055014, -0.027293943, -0.011844867, -0.0054140289, 0.0030845219, 0.0046028194, 0.000602278, -0.012055014, 0.061267255, 0.13871614, 0.060199223, 0.027515745, -0.015676481, -0.023392931, -0.0030609604, -0.027293943, 0.13871614, 0.31406936, 0.13629799, 0.062298825, -0.035493363, -0.052964297, -0.0069303677, -0.011844867, 0.060199223, 0.13629799, 0.05914981, 0.027036081, -0.015403203, -0.022985137, -0.0030076007, -0.0054140289, 0.027515745, 0.062298825, 0.027036081, 0.0123576, -0.0070404665, -0.010506003, -0.0013747083, 0.0030845219, -0.015676481, -0.035493363, -0.015403203, -0.0070404665, 0.0040111484, 0.0059855601, 0.00078320934, 0.0046028194, -0.023392931, -0.052964297, -0.022985137, -0.010506003, 0.0059855601, 0.0089318385, 0.0011687293, 0.000602278, -0.0030609604, -0.0069303677, -0.0030076007, -0.0013747083, 0.00078320934, 0.0011687293, 0.00015292799,
+ -0.0013886603, 0.005490011, -0.0028387633, -0.016778202, -0.018136003, -0.013843055, -0.0050052081, -2.1978283e-05, 0.0070575948, -0.02790191, 0.01442746, 0.085271936, 0.092172697, 0.070354623, 0.025437993, 0.00011170033, 0.01597921, -0.063173145, 0.032665436, 0.19306551, 0.20868963, 0.15929099, 0.057594554, 0.00025290245, 0.0069345644, -0.027415514, 0.014175956, 0.083785446, 0.090565911, 0.069128177, 0.024994549, 0.00010975313, 0.0031696374, -0.012531031, 0.0064795187, 0.038296491, 0.041395693, 0.031596975, 0.011424461, 5.0165752e-05, -0.00180583, 0.0071392745, -0.0036915609, -0.021818569, -0.02358427, -0.01800167, -0.006508831, -2.8580816e-05, -0.0026947156, 0.010653447, -0.0055086617, -0.032558346, -0.03519318, -0.02686265, -0.0097126796, -4.264918e-05, -0.000352603, 0.0013940014, -0.00072080729, -0.0042602532, -0.0046050206, -0.0035149725, -0.0012709022, -5.5806367e-06,
+ 0.00075799795, -0.0027695664, -0.00011659991, 0.013104981, -0.017549137, -0.0039945022, -0.02663401, -0.0045205848, -0.0038523767, 0.014075781, 0.0005925963, -0.066603506, 0.089190063, 0.020301278, 0.13536216, 0.02297499, -0.0087222256, 0.031869193, 0.0013417065, -0.15079803, 0.2019366, 0.045964437, 0.30647555, 0.05201803, -0.0037852207, 0.013830407, 0.00058226596, -0.065442451, 0.087635271, 0.019947379, 0.13300248, 0.022574482, -0.0017301414, 0.0063215759, 0.00026614101, -0.02991231, 0.040056162, 0.0091175097, 0.060792517, 0.010318301, 0.00098570939, -0.0036015765, -0.00015162789, 0.01704187, -0.022821103, -0.0051944973, -0.034635177, -0.0058786212, 0.0014709061, -0.0053743842, -0.00022626384, 0.025430407, -0.034054357, -0.0077513901, -0.051683686, -0.008772261, 0.00019246778, -0.00070323711, -2.9606578e-05, 0.0033275637, -0.0044560059, -0.0010142679, -0.0067628001, -0.0011478486,
+ -0.00030861874, 0.0022461257, -0.0059742651, 0.0073953901, -0.0067656794, 0.011302187, -0.011376157, -0.0035003131, 0.0015684945, -0.011415495, 0.030363036, -0.037585627, 0.034385245, -0.057441161, 0.057817099, 0.017789658, 0.0035512528, -0.025846, 0.06874542, -0.0850982, 0.077852165, -0.13005342, 0.13090459, 0.040277841, 0.001541152, -0.011216497, 0.029833737, -0.036930421, 0.03378583, -0.056439827, 0.056809211, 0.017479543, 0.0007044268, -0.0051268147, 0.013636347, -0.016880086, 0.015442762, -0.025797408, 0.025966245, 0.0079895159, -0.00040133142, 0.0029208881, -0.0077690041, 0.0096170517, -0.0087981685, 0.014697496, -0.014793688, -0.0045518481, -0.0005988792, 0.0043586398, -0.011593149, 0.014350863, -0.0131289, 0.02193206, -0.0220756, -0.006792409, -7.8363224e-05, 0.00057032715, -0.0015169612, 0.0018778076, -0.001717914, 0.0028698057, -0.0028885878, -0.00088878536,
+ -0.00037505232, 0.00090921023, 0.0009172949, -0.0035507922, 0.001135314, 5.3409429e-05, 0.0041957885, 0.00053393404, 0.0019061302, -0.0046208836, -0.0046619723, 0.018046209, -0.0057700116, -0.000271443, -0.021324276, -0.0027136155, 0.0043156989, -0.010462214, -0.010555244, 0.0408587, -0.013063973, -0.0006145783, -0.048280624, -0.0061439389, 0.0018729019, -0.0045403307, -0.0045807032, 0.017731621, -0.0056694268, -0.00026671111, -0.020952544, -0.0026663109, 0.0008560624, -0.0020752857, -0.002093739, 0.0081047352, -0.0025913707, -0.0001219078, -0.0095769486, -0.0012187123, -0.00048772241, 0.0011823476, 0.001192861, -0.0046174917, 0.0014763755, 6.9454246e-05, 0.0054562524, 0.00069433406, -0.00072779452, 0.0017643358, 0.0017800242, -0.0068903644, 0.0022030934, 0.00010364178, 0.0081419891, 0.0010361068, -9.5231768e-05, 0.00023086299, 0.00023291581, -0.00090160281, 0.00028827433, 1.3561506e-05, 0.0010653777, 0.00013557437,
+ 0.00060583196, -0.0019963306, 0.00084933481, 0.0024534575, -0.00020939797, -0.0026786194, -0.0018699351, 8.9182384e-05, -0.0030790227, 0.010145961, -0.0043165784, -0.012469219, 0.0010642243, 0.013613561, 0.0095035802, -0.00045325206, -0.006971263, 0.022971627, -0.009773232, -0.028231751, 0.0024095267, 0.030822673, 0.021517203, -0.001026215, -0.0030253481, 0.0099690929, -0.0042413304, -0.012251851, 0.0010456724, 0.013376244, 0.0093379105, -0.00044535082, -0.0013828203, 0.0045566539, -0.0019386191, -0.0056000526, 0.00047795392, 0.0061139881, 0.0042681542, -0.0002035601, 0.00078783096, -0.0025960517, 0.0011044849, 0.0031905048, -0.00027230356, -0.003483308, -0.0024316854, 0.00011597381, 0.0011756258, -0.0038739089, 0.0016481467, 0.0047609702, -0.00040633982, -0.0051979003, -0.0036286365, 0.00017305972, 0.0001538304, -0.0005069002, 0.00021565966, 0.00062297201, -5.3169485e-05, -0.00068014422, -0.00047480636, 2.2644831e-05,
+ 0.0024806555, -0.0090820556, 0.0073333154, 0.0050839486, 0.00079409724, -0.014091773, -0.0007319505, 0.0015551834, -0.012607447, 0.046157775, -0.037270144, -0.025838177, -0.0040358443, 0.071618688, 0.0037199956, -0.0079039163, -0.028544717, 0.10450653, -0.08438391, -0.058500616, -0.0091376174, 0.16215298, 0.0084224995, -0.017895379, -0.01238767, 0.045353137, -0.036620438, -0.025387757, -0.00396549, 0.070370207, 0.0036551473, -0.0077661325, -0.0056621325, 0.020729925, -0.0167384, -0.011604187, -0.0018125386, 0.032164679, 0.0016706877, -0.0035497289, 0.0032258734, -0.011810411, 0.009536329, 0.0066112262, 0.0010326533, -0.018325107, -0.00095183698, 0.0020223787, 0.0048137484, -0.017623862, 0.014230406, 0.0098654769, 0.0015409573, -0.027345293, -0.0014203607, 0.0030178563, 0.00062987802, -0.0023060789, 0.0018620458, 0.0012908957, 0.00020163396, -0.0035781261, -0.00018585391, 0.00039488589,
+ 0.023240384, 0.028784593, -0.060506163, 0.060331319, -0.032664515, 0.020802405, -0.014306896, -0.0010664108, -0.091879897, -0.1137987, 0.23920862, -0.23851738, 0.12913781, -0.082241448, 0.056561723, 0.004216011, 0.047509062, 0.058842791, -0.12368948, 0.12333206, -0.066774306, 0.042525233, -0.029246815, -0.002180006, 0.28079715, 0.34778392, -0.73105326, 0.72894074, -0.39466228, 0.25134077, -0.17286012, -0.012884689, 0.30352108, 0.37592886, -0.79021485, 0.78793138, -0.42660092, 0.2716809, -0.18684909, -0.013927402, 0.23167502, 0.28694325, -0.60316417, 0.60142121, -0.3256208, 0.20737169, -0.1426203, -0.010630665, 0.083766316, 0.10374955, -0.21808497, 0.21745477, -0.11773412, 0.074979003, -0.051566962, -0.0038437103, 0.00036782483, 0.00045557286, -0.00095762916, 0.00095486191, -0.00051698027, 0.00032923901, -0.0002264348, -1.687805e-05,
+ -0.0013886603, 0.0070575948, 0.01597921, 0.0069345644, 0.0031696374, -0.00180583, -0.0026947156, -0.000352603, 0.005490011, -0.02790191, -0.063173145, -0.027415514, -0.012531031, 0.0071392745, 0.010653447, 0.0013940014, -0.0028387633, 0.01442746, 0.032665436, 0.014175956, 0.0064795187, -0.0036915609, -0.0055086617, -0.00072080729, -0.016778202, 0.085271936, 0.19306551, 0.083785446, 0.038296491, -0.021818569, -0.032558346, -0.0042602532, -0.018136003, 0.092172697, 0.20868963, 0.090565911, 0.041395693, -0.02358427, -0.03519318, -0.0046050206, -0.013843055, 0.070354623, 0.15929099, 0.069128177, 0.031596975, -0.01800167, -0.02686265, -0.0035149725, -0.0050052081, 0.025437993, 0.057594554, 0.024994549, 0.011424461, -0.006508831, -0.0097126796, -0.0012709022, -2.1978283e-05, 0.00011170033, 0.00025290245, 0.00010975313, 5.0165752e-05, -2.8580816e-05, -4.264918e-05, -5.5806367e-06,
+ 0.00081298966, -0.003214121, 0.0016619509, 0.0098227801, 0.010617704, 0.0081044014, 0.0029302937, 1.2867162e-05, -0.003214121, 0.012706895, -0.0065704542, -0.038833955, -0.041976652, -0.032040416, -0.011584795, -5.0869794e-05, 0.0016619509, -0.0065704542, 0.0033974365, 0.020080179, 0.021705198, 0.01656739, 0.0059902412, 2.6303645e-05, 0.0098227801, -0.038833955, 0.020080179, 0.11868172, 0.12828622, 0.09791976, 0.035404669, 0.00015546483, 0.010617704, -0.041976652, 0.021705198, 0.12828622, 0.13866797, 0.10584407, 0.038269846, 0.00016804606, 0.0081044014, -0.032040416, 0.01656739, 0.09791976, 0.10584407, 0.080789861, 0.029211043, 0.00012826811, 0.0029302937, -0.011584795, 0.0059902412, 0.035404669, 0.038269846, 0.029211043, 0.010561784, 4.6377666e-05, 1.2867162e-05, -5.0869794e-05, 2.6303645e-05, 0.00015546483, 0.00016804606, 0.00012826811, 4.6377666e-05, 2.0364817e-07,
+ -0.00044376908, 0.0016214397, 6.8263293e-05, -0.0076722967, 0.010274123, 0.002338577, 0.015592852, 0.0026465715, 0.0017544227, -0.0064102948, -0.00026987611, 0.030332108, -0.040618322, -0.0092454676, -0.061645698, -0.010463111, -0.00090717319, 0.0033146216, 0.00013954697, -0.015684062, 0.021002836, 0.0047806268, 0.031875626, 0.0054102432, -0.0053617485, 0.019590711, 0.00082477718, -0.092698945, 0.12413498, 0.028255375, 0.18839743, 0.031976655, -0.0057956562, 0.021176119, 0.00089152353, -0.10020075, 0.13418079, 0.030541984, 0.20364377, 0.034564414, -0.0044237743, 0.016163549, 0.0006804922, -0.076482365, 0.10241904, 0.023312433, 0.15543953, 0.026382719, -0.001599496, 0.0058442249, 0.00024604433, -0.02765359, 0.037031465, 0.0084290338, 0.056201989, 0.0095391516, -7.0235195e-06, 2.5662475e-05, 1.080401e-06, -0.0001214292, 0.00016260823, 3.7012585e-05, 0.00024678759, 4.1887204e-05,
+ 0.00018068051, -0.0013149919, 0.003497627, -0.0043296232, 0.0039609597, -0.0066168533, 0.0066601589, 0.0020492545, -0.00071431294, 0.005198766, -0.013827724, 0.017116986, -0.015659491, 0.026159456, -0.026330663, -0.0081016432, 0.00036935542, -0.0026881669, 0.0071500102, -0.008850815, 0.0080971762, -0.013526476, 0.013615004, 0.0041891805, 0.0021830351, -0.015888118, 0.042259358, -0.05231178, 0.04785748, -0.079946767, 0.080469998, 0.024759696, 0.0023597005, -0.017173888, 0.045679261, -0.056545191, 0.051730419, -0.086416581, 0.086982156, 0.026763412, 0.001801139, -0.013108681, 0.034866585, -0.043160455, 0.039485382, -0.065961029, 0.066392728, 0.020428281, 0.00065123455, -0.0047396818, 0.012606648, -0.015605447, 0.014276658, -0.023849409, 0.024005498, 0.0073862164, 2.8596248e-06, -2.0812335e-05, 5.5356834e-05, -6.8524811e-05, 6.2689986e-05, -0.00010472473, 0.00010541013, 3.2433488e-05,
+ 0.00021957397, -0.00053229615, -0.00053702931, 0.0020788075, -0.00066466833, -3.1268493e-05, -0.0024564198, -0.00031259111, -0.00086807664, 0.0021044108, 0.0021231232, -0.0082184796, 0.0026277388, 0.00012361869, 0.0097113544, 0.001235816, 0.00044886323, -0.0010881443, -0.00109782, 0.004249594, -0.0013587456, -6.3920492e-05, -0.0050215265, -0.00063901313, 0.0026529573, -0.0064313586, -0.006488546, 0.025116763, -0.0080307182, -0.00037779512, -0.029679187, -0.0037768177, 0.0028676519, -0.0069518261, -0.0070136414, 0.027149376, -0.0086806163, -0.00040836877, -0.03208102, -0.0040824624, 0.0021888539, -0.0053062688, -0.0053534519, 0.020722884, -0.0066258394, -0.00031170435, -0.024487165, -0.0031161083, 0.00079141994, -0.0019185779, -0.0019356379, 0.0074927354, -0.0023956927, -0.00011270238, -0.0088537799, -0.0011266856, 3.4751905e-06, -8.4246346e-06, -8.4995461e-06, 3.2901221e-05, -1.0519685e-05, -4.9488546e-07, -3.887768e-05, -4.9473697e-06,
+ -0.00035468367, 0.0011687496, -0.00049724215, -0.001436374, 0.00012259181, 0.0015681949, 0.0010947515, -5.2211731e-05, 0.0014022272, -0.0046206033, 0.0019658263, 0.0056786454, -0.00048466167, -0.0061997937, -0.0043280548, 0.00020641692, -0.00072506068, 0.0023892118, -0.0010164853, -0.0029363019, 0.00025060783, 0.0032057761, 0.0022379414, -0.00010673362, -0.0042853924, 0.014121176, -0.0060078259, -0.017354693, 0.0014811903, 0.018947391, 0.013227109, -0.00063083748, -0.0046321943, 0.015263954, -0.0064940183, -0.018759148, 0.0016010579, 0.020480738, 0.014297533, -0.00068188897, -0.0035357139, 0.011650844, -0.0049568281, -0.014318696, 0.0012220737, 0.01563277, 0.010913184, -0.00052047996, -0.0012784016, 0.0042125746, -0.0017922313, -0.0051771848, 0.00044186295, 0.0056523123, 0.0039458599, -0.00018818899, -5.6135674e-06, 1.8497764e-05, -7.869836e-06, -2.2733447e-05, 1.9402568e-06, 2.4819771e-05, 1.7326598e-05, -8.2635344e-07,
+ -0.0014522971, 0.0053170797, -0.0042932816, -0.0029763923, -0.00046490337, 0.0082500136, 0.00042851963, -0.00091048046, 0.0057415966, -0.021020855, 0.016973311, 0.011767044, 0.0018379763, -0.032616088, -0.0016941347, 0.0035995469, -0.0029688526, 0.010869419, -0.0087765239, -0.006084478, -0.00095037688, 0.016865057, 0.00087599956, -0.0018612461, -0.01754708, 0.06424252, -0.05187269, -0.035961646, -0.0056170992, 0.099679089, 0.0051775002, -0.011000693, -0.018967105, 0.069441444, -0.056070567, -0.038871897, -0.0060716716, 0.10774577, 0.0055964973, -0.01189094, -0.014477427, 0.053004054, -0.042798179, -0.029670583, -0.0046344544, 0.082241416, 0.004271758, -0.0090762521, -0.005234577, 0.019164579, -0.01547446, -0.010727939, -0.0016756713, 0.029735879, 0.0015445318, -0.003281684, -2.2985461e-05, 8.4153254e-05, -6.7949634e-05, -4.7107267e-05, -7.3580112e-06, 0.00013057271, 6.7821669e-06, -1.4410146e-05,
+ -0.012685726, -0.015712024, 0.033027191, -0.032931753, 0.017829873, -0.011354959, 0.0078093959, 0.00058209859, 0.046350995, 0.057408457, -0.12067447, 0.12032575, -0.065146635, 0.041488651, -0.028533904, -0.0021268668, 0.0019513964, 0.0024169202, -0.0050804459, 0.005065765, -0.0027427008, 0.0017466897, -0.0012012894, -8.954199e-05, -0.21932274, -0.27164422, 0.5710051, -0.56935507, 0.30825958, -0.19631519, 0.13501617, 0.010063867, 0.29369939, 0.36376411, -0.76464414, 0.76243456, -0.41279646, 0.26288953, -0.18080281, -0.013476722, 0.066851313, 0.082799317, -0.17404689, 0.17354395, -0.09395997, 0.05983843, -0.041154002, -0.0030675467, 0.44574228, 0.55207825, -1.1604867, 1.1571332, -0.62649377, 0.39898272, -0.27440117, -0.020453379, 0.075655742, 0.093704124, -0.19696915, 0.19639997, -0.10633465, 0.067719251, -0.046574052, -0.0034715477,
+ 0.00075799795, -0.0038523767, -0.0087222256, -0.0037852207, -0.0017301414, 0.00098570939, 0.0014709061, 0.00019246778, -0.0027695664, 0.014075781, 0.031869193, 0.013830407, 0.0063215759, -0.0036015765, -0.0053743842, -0.00070323711, -0.00011659991, 0.0005925963, 0.0013417065, 0.00058226596, 0.00026614101, -0.00015162789, -0.00022626384, -2.9606578e-05, 0.013104981, -0.066603506, -0.15079803, -0.065442451, -0.02991231, 0.01704187, 0.025430407, 0.0033275637, -0.017549137, 0.089190063, 0.2019366, 0.087635271, 0.040056162, -0.022821103, -0.034054357, -0.0044560059, -0.0039945022, 0.020301278, 0.045964437, 0.019947379, 0.0091175097, -0.0051944973, -0.0077513901, -0.0010142679, -0.02663401, 0.13536216, 0.30647555, 0.13300248, 0.060792517, -0.034635177, -0.051683686, -0.0067628001, -0.0045205848, 0.02297499, 0.05201803, 0.022574482, 0.010318301, -0.0058786212, -0.008772261, -0.0011478486,
+ -0.00044376908, 0.0017544227, -0.00090717319, -0.0053617485, -0.0057956562, -0.0044237743, -0.001599496, -7.0235195e-06, 0.0016214397, -0.0064102948, 0.0033146216, 0.019590711, 0.021176119, 0.016163549, 0.0058442249, 2.5662475e-05, 6.8263293e-05, -0.00026987611, 0.00013954697, 0.00082477718, 0.00089152353, 0.0006804922, 0.00024604433, 1.080401e-06, -0.0076722967, 0.030332108, -0.015684062, -0.092698945, -0.10020075, -0.076482365, -0.02765359, -0.0001214292, 0.010274123, -0.040618322, 0.021002836, 0.12413498, 0.13418079, 0.10241904, 0.037031465, 0.00016260823, 0.002338577, -0.0092454676, 0.0047806268, 0.028255375, 0.030541984, 0.023312433, 0.0084290338, 3.7012585e-05, 0.015592852, -0.061645698, 0.031875626, 0.18839743, 0.20364377, 0.15543953, 0.056201989, 0.00024678759, 0.0026465715, -0.010463111, 0.0054102432, 0.031976655, 0.034564414, 0.026382719, 0.0095391516, 4.1887204e-05,
+ 0.00024223063, -0.00088506021, -3.7261408e-05, 0.0041879107, -0.0056081135, -0.0012765085, -0.0085113331, -0.0014446267, -0.00088506021, 0.0032338254, 0.00013614541, -0.015301752, 0.020490877, 0.0046640956, 0.031098636, 0.0052783648, -3.7261408e-05, 0.00013614541, 5.7317792e-06, -0.00064421021, 0.00086267455, 0.00019636039, 0.0013092657, 0.00022222138, 0.0041879107, -0.015301752, -0.00064421021, 0.072404534, -0.096958333, -0.022069477, -0.14715192, -0.024976064, -0.0056081135, 0.020490877, 0.00086267455, -0.096958333, 0.12983881, 0.02955367, 0.19705403, 0.033445938, -0.0012765085, 0.0046640956, 0.00019636039, -0.022069477, 0.02955367, 0.006726952, 0.044853074, 0.0076129027, -0.0085113331, 0.031098636, 0.0013092657, -0.14715192, 0.19705403, 0.044853074, 0.29906536, 0.050760299, -0.0014446267, 0.0052783648, 0.00022222138, -0.024976064, 0.033445938, 0.0076129027, 0.050760299, 0.0086155346,
+ -9.8624163e-05, 0.00071778617, -0.001909174, 0.0023633178, -0.0021620834, 0.0036117986, -0.0036354369, -0.0011185823, 0.00036035212, -0.0026226409, 0.0069757237, -0.0086350702, 0.0078998018, -0.013196759, 0.013283128, 0.0040870663, 1.5170976e-05, -0.00011041429, 0.00029368091, -0.00036354009, 0.00033258498, -0.0005555891, 0.0005592253, 0.00017206721, -0.0017051072, 0.012409761, -0.033007594, 0.040859257, -0.037380129, 0.062444167, -0.062852848, -0.019339101, 0.0022833425, -0.016618155, 0.044201117, -0.054715434, 0.050056465, -0.08362021, 0.084167484, 0.02589737, 0.00051973021, -0.0037825939, 0.010060977, -0.012454226, 0.01139376, -0.019033478, 0.019158048, 0.0058947116, 0.0034653879, -0.025221076, 0.067083241, -0.083040631, 0.075969797, -0.12690889, 0.12773948, 0.039303973, 0.00058817954, -0.0042807678, 0.011386024, -0.014094469, 0.012894337, -0.021540219, 0.021681194, 0.0066710549,
+ -0.0001198541, 0.00029055299, 0.00029313657, -0.0011347137, 0.00036280813, 1.7067856e-05, 0.0013408328, 0.00017062735, 0.00043792187, -0.00106162, -0.0010710599, 0.0041460071, -0.0013256252, -6.2362386e-05, -0.0048991233, -0.00062343674, 1.8436695e-05, -4.469465e-05, -4.5092073e-05, 0.00017454865, -5.580938e-05, -2.6254827e-06, -0.00020625515, -2.6246949e-05, -0.0020721502, 0.005023353, 0.0050680204, -0.019617996, 0.0062725677, 0.00029508512, 0.023181576, 0.0029499658, 0.002774857, -0.0067268706, -0.0067866857, 0.026270844, -0.0083997186, -0.00039515429, -0.031042904, -0.0039503572, 0.00063160785, -0.0015311579, -0.0015447729, 0.0059797211, -0.0019119285, -8.994429e-05, -0.0070659287, -0.00089917303, 0.0042113507, -0.010209251, -0.010300031, 0.039870788, -0.012748102, -0.00059971856, -0.047113258, -0.0059953861, 0.00071479165, -0.0017328139, -0.001748222, 0.0067672602, -0.0021637326, -0.0001017901, -0.0079965232, -0.0010175956,
+ 0.0001936035, -0.00063796008, 0.00027141882, 0.00078404243, -6.6916542e-05, -0.00085599662, -0.00059756832, 2.8499688e-05, -0.00070738682, 0.0023309731, -0.00099170775, -0.0028647275, 0.00024449909, 0.0031276331, 0.00218339, -0.00010413192, -2.9781283e-05, 9.8134948e-05, -4.1751314e-05, -0.00012060623, 1.0293515e-05, 0.00013167467, 9.1921639e-05, -4.3839976e-06, 0.0033471992, -0.011029653, 0.0046925435, 0.013555262, -0.001156916, -0.014799274, -0.010331322, 0.00049272938, -0.0044823002, 0.014770025, -0.0062838771, -0.018152118, 0.001549249, 0.019817998, 0.013834877, -0.00065982359, -0.0010202529, 0.0033619259, -0.0014303245, -0.0041317516, 0.0003526372, 0.0045109362, 0.0031490691, -0.00015018783, -0.0068027065, 0.022416202, -0.0095369274, -0.027549143, 0.0023512673, 0.030077419, 0.020996944, -0.0010014024, -0.0011546219, 0.0038046971, -0.0016187007, -0.0046759101, 0.0003990801, 0.0051050339, 0.0035638068, -0.00016996782,
+ 0.000792734, -0.0029023193, 0.0023434808, 0.0016246589, 0.00025376675, -0.0045032565, -0.00023390674, 0.00049698428, -0.0028964847, 0.010604469, -0.0085625899, -0.0059361646, -0.00092721078, 0.01645396, 0.00085464645, -0.0018158769, -0.00012194323, 0.00044645263, -0.00036048864, -0.00024991503, -3.9035964e-05, 0.00069271864, 3.5980976e-05, -7.6449182e-05, 0.01370553, -0.050178022, 0.040516297, 0.028088629, 0.0043873579, -0.077856528, -0.0040439995, 0.008592331, -0.018353344, 0.067194375, -0.054256169, -0.037614034, -0.0058751972, 0.10425921, 0.0054153991, -0.011506159, -0.0041775544, 0.01529466, -0.012349689, -0.0085616371, -0.0013373016, 0.023731288, 0.0012326432, -0.0026190108, -0.027854541, 0.1019797, -0.082343612, -0.057086144, -0.0089166812, 0.15823232, 0.008218854, -0.017462691, -0.0047277453, 0.017308992, -0.013976164, -0.009689219, -0.0015134264, 0.026856738, 0.0013949843, -0.0029639388,
+ 0.0051649911, 0.0063971479, -0.013447015, 0.013408158, -0.0072594298, 0.0046231696, -0.0031795943, -0.00023700135, -0.03759078, -0.04655841, 0.097867311, -0.097584505, 0.052834093, -0.033647405, 0.023141071, 0.0017248946, 0.09998429, 0.12383647, -0.26030835, 0.25955613, -0.14052859, 0.089495668, -0.061550827, -0.0045878901, -0.123768, -0.15329401, 0.32222905, -0.32129791, 0.17395675, -0.1107844, 0.076192197, 0.0056792319, 0.11322927, 0.14024116, -0.29479154, 0.29393968, -0.15914449, 0.10135121, -0.069704501, -0.0051956505, -0.18915149, -0.23427534, 0.49245449, -0.49103145, 0.2658537, -0.16930899, 0.1164426, 0.0086794262, 0.19038944, 0.23580862, -0.49567748, 0.49424512, -0.26759364, 0.17041708, -0.11720469, -0.0087362308, 0.058580649, 0.072555608, -0.15251428, 0.15207356, -0.082335495, 0.052435381, -0.036062539, -0.0026880381,
+ -0.00030861874, 0.0015684945, 0.0035512528, 0.001541152, 0.0007044268, -0.00040133142, -0.0005988792, -7.8363224e-05, 0.0022461257, -0.011415495, -0.025846, -0.011216497, -0.0051268147, 0.0029208881, 0.0043586398, 0.00057032715, -0.0059742651, 0.030363036, 0.06874542, 0.029833737, 0.013636347, -0.0077690041, -0.011593149, -0.0015169612, 0.0073953901, -0.037585627, -0.0850982, -0.036930421, -0.016880086, 0.0096170517, 0.014350863, 0.0018778076, -0.0067656794, 0.034385245, 0.077852165, 0.03378583, 0.015442762, -0.0087981685, -0.0131289, -0.001717914, 0.011302187, -0.057441161, -0.13005342, -0.056439827, -0.025797408, 0.014697496, 0.02193206, 0.0028698057, -0.011376157, 0.057817099, 0.13090459, 0.056809211, 0.025966245, -0.014793688, -0.0220756, -0.0028885878, -0.0035003131, 0.017789658, 0.040277841, 0.017479543, 0.0079895159, -0.0045518481, -0.006792409, -0.00088878536,
+ 0.00018068051, -0.00071431294, 0.00036935542, 0.0021830351, 0.0023597005, 0.001801139, 0.00065123455, 2.8596248e-06, -0.0013149919, 0.005198766, -0.0026881669, -0.015888118, -0.017173888, -0.013108681, -0.0047396818, -2.0812335e-05, 0.003497627, -0.013827724, 0.0071500102, 0.042259358, 0.045679261, 0.034866585, 0.012606648, 5.5356834e-05, -0.0043296232, 0.017116986, -0.008850815, -0.05231178, -0.056545191, -0.043160455, -0.015605447, -6.8524811e-05, 0.0039609597, -0.015659491, 0.0080971762, 0.04785748, 0.051730419, 0.039485382, 0.014276658, 6.2689986e-05, -0.0066168533, 0.026159456, -0.013526476, -0.079946767, -0.086416581, -0.065961029, -0.023849409, -0.00010472473, 0.0066601589, -0.026330663, 0.013615004, 0.080469998, 0.086982156, 0.066392728, 0.024005498, 0.00010541013, 0.0020492545, -0.0081016432, 0.0041891805, 0.024759696, 0.026763412, 0.020428281, 0.0073862164, 3.2433488e-05,
+ -9.8624163e-05, 0.00036035212, 1.5170976e-05, -0.0017051072, 0.0022833425, 0.00051973021, 0.0034653879, 0.00058817954, 0.00071778617, -0.0026226409, -0.00011041429, 0.012409761, -0.016618155, -0.0037825939, -0.025221076, -0.0042807678, -0.001909174, 0.0069757237, 0.00029368091, -0.033007594, 0.044201117, 0.010060977, 0.067083241, 0.011386024, 0.0023633178, -0.0086350702, -0.00036354009, 0.040859257, -0.054715434, -0.012454226, -0.083040631, -0.014094469, -0.0021620834, 0.0078998018, 0.00033258498, -0.037380129, 0.050056465, 0.01139376, 0.075969797, 0.012894337, 0.0036117986, -0.013196759, -0.0005555891, 0.062444167, -0.08362021, -0.019033478, -0.12690889, -0.021540219, -0.0036354369, 0.013283128, 0.0005592253, -0.062852848, 0.084167484, 0.019158048, 0.12773948, 0.021681194, -0.0011185823, 0.0040870663, 0.00017206721, -0.019339101, 0.02589737, 0.0058947116, 0.039303973, 0.0066710549,
+ 4.0154812e-05, -0.00029224652, 0.0007773199, -0.00096222445, 0.00088029191, -0.0014705432, 0.0014801676, 0.00045543059, -0.00029224652, 0.0021269687, -0.0056573303, 0.0070030647, -0.0064067601, 0.010702606, -0.010772652, -0.0033146215, 0.0007773199, -0.0056573303, 0.015047418, -0.018626814, 0.017040758, -0.028466887, 0.028653196, 0.0088162599, -0.00096222445, 0.0070030647, -0.018626814, 0.023057657, -0.021094319, 0.035238433, -0.035469059, -0.010913423, 0.00088029191, -0.0064067601, 0.017040758, -0.021094319, 0.019298157, -0.032237912, 0.032448901, 0.0099841549, -0.0014705432, 0.010702606, -0.028466887, 0.035238433, -0.032237912, 0.053854003, -0.054206464, -0.016678707, 0.0014801676, -0.010772652, 0.028653196, -0.035469059, 0.032448901, -0.054206464, 0.054561232, 0.016787865, 0.00045543059, -0.0033146215, 0.0088162599, -0.010913423, 0.0099841549, -0.016678707, 0.016787865, 0.0051654337,
+ 4.8798576e-05, -0.0001182986, -0.00011935051, 0.0004619985, -0.00014771727, -6.9491748e-06, -0.00054591985, -6.9470897e-05, -0.00035515579, 0.00086097664, 0.00086863241, -0.0033624227, 0.0010750856, 5.0576059e-05, 0.0039732019, 0.00050560884, 0.00094464654, -0.0022900333, -0.0023103962, 0.0089434019, -0.0028595221, -0.00013452265, -0.010567958, -0.0013448229, -0.0011693538, 0.0028347737, 0.0028599804, -0.011070809, 0.0035397294, 0.00016652216, 0.013081805, 0.0016647219, 0.0010697844, -0.0025933953, -0.0026164557, 0.010128139, -0.0032383247, -0.00015234295, -0.011967901, -0.0015229724, -0.0017870938, 0.0043323128, 0.0043708356, -0.016919236, 0.0054096787, 0.00025449159, 0.019992591, 0.0025441523, 0.0017987899, -0.0043606667, -0.0043994416, 0.017029968, -0.0054450837, -0.00025615717, -0.020123438, -0.0025608031, 0.00055346702, -0.0013417272, -0.0013536577, 0.005239926, -0.0016753898, -7.8816625e-05, -0.006191751, -0.00078792976,
+ -7.8825636e-05, 0.00025974534, -0.00011050813, -0.00031922275, 2.7245059e-05, 0.00034851889, 0.00024329985, -1.1603644e-05, 0.00057369258, -0.0018904253, 0.00080427761, 0.0023233016, -0.0001982894, -0.0025365187, -0.0017707351, 8.445126e-05, -0.0015259126, 0.00502817, -0.0021392247, -0.0061795382, 0.00052741192, 0.006746655, 0.0047098169, -0.00022462421, 0.0018888883, -0.0062242433, 0.0026480917, 0.0076494925, -0.00065286975, -0.0083515119, -0.005830162, 0.00027805657, -0.0017280512, 0.0056942546, -0.0024226091, -0.0069981452, 0.00059727848, 0.0076403883, 0.005333729, -0.00025438031, 0.00288674, -0.0095123531, 0.0040470113, 0.011690525, -0.00099776428, -0.012763404, -0.0089100887, 0.00042494681, -0.002905633, 0.0095746091, -0.004073498, -0.011767037, 0.0010042944, 0.012846937, 0.008968403, -0.00042772798, -0.00089402997, 0.0029459974, -0.0012533686, -0.0036205824, 0.00030900987, 0.0039528553, 0.0027594748, -0.000131607,
+ -0.00032276152, 0.0011816788, -0.00095414782, -0.0006614796, -0.00010332109, 0.0018335002, 9.5235093e-05, -0.00020234707, 0.0023490567, -0.0086002526, 0.0069442831, 0.0048142452, 0.00075197039, -0.013344205, -0.00069312053, 0.001472681, -0.006248042, 0.022875028, -0.018470466, -0.012804972, -0.0020000975, 0.035493035, 0.0018435682, -0.0039170499, 0.0077342916, -0.028316413, 0.022864118, 0.015850948, 0.0024758696, -0.043935921, -0.0022821059, 0.004848816, -0.0070757237, 0.025905297, -0.020917259, -0.014501254, -0.0022650516, 0.040194818, 0.0020877867, -0.0044359438, 0.011820122, -0.043275257, 0.034942652, 0.024224602, 0.0037838088, -0.067146155, -0.0034876846, 0.0074103226, -0.011897481, 0.043558482, -0.035171343, -0.024383146, -0.0038085729, 0.067585609, 0.0035105106, -0.0074588213, -0.0036607186, 0.013402446, -0.010821819, -0.0075024144, -0.0011718542, 0.020795317, 0.0010801439, -0.0022949938,
+ 0.0062768122, 0.0077742042, -0.016341633, 0.016294411, -0.0088221017, 0.0056183576, -0.0038640369, -0.00028801849, -0.015216389, -0.0188464, 0.039615753, -0.039501276, 0.021386737, -0.013620148, 0.0093672848, 0.00069822088, -0.015351692, -0.019013981, 0.039968015, -0.03985252, 0.021576907, -0.013741258, 0.0094505783, 0.00070442943, 0.059425458, 0.073601955, -0.15471373, 0.15426666, -0.083522881, 0.053191568, -0.036582609, -0.0027268031, -0.019000422, -0.02353315, 0.049467457, -0.049324511, 0.026705221, -0.017007227, 0.011696755, 0.00087185547, -0.00089385118, -0.0011070877, 0.0023271348, -0.0023204101, 0.0012563138, -0.00080008378, 0.00055025924, 4.1015353e-05, -0.070220007, -0.086971643, 0.18281726, -0.18228897, 0.098694691, -0.062853739, 0.043227786, 0.0032221229, -0.0089358298, -0.011067555, 0.023264365, -0.023197139, 0.012559369, -0.0079984371, 0.0055009414, 0.00041003046,
+ -0.00037505232, 0.0019061302, 0.0043156989, 0.0018729019, 0.0008560624, -0.00048772241, -0.00072779452, -9.5231768e-05, 0.00090921023, -0.0046208836, -0.010462214, -0.0045403307, -0.0020752857, 0.0011823476, 0.0017643358, 0.00023086299, 0.0009172949, -0.0046619723, -0.010555244, -0.0045807032, -0.002093739, 0.001192861, 0.0017800242, 0.00023291581, -0.0035507922, 0.018046209, 0.0408587, 0.017731621, 0.0081047352, -0.0046174917, -0.0068903644, -0.00090160281, 0.001135314, -0.0057700116, -0.013063973, -0.0056694268, -0.0025913707, 0.0014763755, 0.0022030934, 0.00028827433, 5.3409429e-05, -0.000271443, -0.0006145783, -0.00026671111, -0.0001219078, 6.9454246e-05, 0.00010364178, 1.3561506e-05, 0.0041957885, -0.021324276, -0.048280624, -0.020952544, -0.0095769486, 0.0054562524, 0.0081419891, 0.0010653777, 0.00053393404, -0.0027136155, -0.0061439389, -0.0026663109, -0.0012187123, 0.00069433406, 0.0010361068, 0.00013557437,
+ 0.00021957397, -0.00086807664, 0.00044886323, 0.0026529573, 0.0028676519, 0.0021888539, 0.00079141994, 3.4751905e-06, -0.00053229615, 0.0021044108, -0.0010881443, -0.0064313586, -0.0069518261, -0.0053062688, -0.0019185779, -8.4246346e-06, -0.00053702931, 0.0021231232, -0.00109782, -0.006488546, -0.0070136414, -0.0053534519, -0.0019356379, -8.4995461e-06, 0.0020788075, -0.0082184796, 0.004249594, 0.025116763, 0.027149376, 0.020722884, 0.0074927354, 3.2901221e-05, -0.00066466833, 0.0026277388, -0.0013587456, -0.0080307182, -0.0086806163, -0.0066258394, -0.0023956927, -1.0519685e-05, -3.1268493e-05, 0.00012361869, -6.3920492e-05, -0.00037779512, -0.00040836877, -0.00031170435, -0.00011270238, -4.9488546e-07, -0.0024564198, 0.0097113544, -0.0050215265, -0.029679187, -0.03208102, -0.024487165, -0.0088537799, -3.887768e-05, -0.00031259111, 0.001235816, -0.00063901313, -0.0037768177, -0.0040824624, -0.0031161083, -0.0011266856, -4.9473697e-06,
+ -0.0001198541, 0.00043792187, 1.8436695e-05, -0.0020721502, 0.002774857, 0.00063160785, 0.0042113507, 0.00071479165, 0.00029055299, -0.00106162, -4.469465e-05, 0.005023353, -0.0067268706, -0.0015311579, -0.010209251, -0.0017328139, 0.00029313657, -0.0010710599, -4.5092073e-05, 0.0050680204, -0.0067866857, -0.0015447729, -0.010300031, -0.001748222, -0.0011347137, 0.0041460071, 0.00017454865, -0.019617996, 0.026270844, 0.0059797211, 0.039870788, 0.0067672602, 0.00036280813, -0.0013256252, -5.580938e-05, 0.0062725677, -0.0083997186, -0.0019119285, -0.012748102, -0.0021637326, 1.7067856e-05, -6.2362386e-05, -2.6254827e-06, 0.00029508512, -0.00039515429, -8.994429e-05, -0.00059971856, -0.0001017901, 0.0013408328, -0.0048991233, -0.00020625515, 0.023181576, -0.031042904, -0.0070659287, -0.047113258, -0.0079965232, 0.00017062735, -0.00062343674, -2.6246949e-05, 0.0029499658, -0.0039503572, -0.00089917303, -0.0059953861, -0.0010175956,
+ 4.8798576e-05, -0.00035515579, 0.00094464654, -0.0011693538, 0.0010697844, -0.0017870938, 0.0017987899, 0.00055346702, -0.0001182986, 0.00086097664, -0.0022900333, 0.0028347737, -0.0025933953, 0.0043323128, -0.0043606667, -0.0013417272, -0.00011935051, 0.00086863241, -0.0023103962, 0.0028599804, -0.0026164557, 0.0043708356, -0.0043994416, -0.0013536577, 0.0004619985, -0.0033624227, 0.0089434019, -0.011070809, 0.010128139, -0.016919236, 0.017029968, 0.005239926, -0.00014771727, 0.0010750856, -0.0028595221, 0.0035397294, -0.0032383247, 0.0054096787, -0.0054450837, -0.0016753898, -6.9491748e-06, 5.0576059e-05, -0.00013452265, 0.00016652216, -0.00015234295, 0.00025449159, -0.00025615717, -7.8816625e-05, -0.00054591985, 0.0039732019, -0.010567958, 0.013081805, -0.011967901, 0.019992591, -0.020123438, -0.006191751, -6.9470897e-05, 0.00050560884, -0.0013448229, 0.0016647219, -0.0015229724, 0.0025441523, -0.0025608031, -0.00078792976,
+ 5.9303006e-05, -0.00014376368, -0.00014504202, 0.00056144874, -0.00017951504, -8.445061e-06, -0.00066343509, -8.442527e-05, -0.00014376368, 0.00034851512, 0.00035161411, -0.0013610766, 0.00043518437, 2.0472706e-05, 0.0016083142, 0.00020466563, -0.00014504202, 0.00035161411, 0.00035474065, -0.0013731793, 0.00043905401, 2.0654749e-05, 0.0016226153, 0.00020648551, 0.00056144874, -0.0013610766, -0.0013731793, 0.0053154927, -0.0016995511, -7.9953264e-05, -0.0062810442, -0.00079929274, -0.00017951504, 0.00043518437, 0.00043905401, -0.0016995511, 0.00054340666, 2.5563888e-05, 0.0020082721, 0.00025556218, -8.445061e-06, 2.0472706e-05, 2.0654749e-05, -7.9953264e-05, 2.5563888e-05, 1.2026212e-06, 9.4476658e-05, 1.2022604e-05, -0.00066343509, 0.0016083142, 0.0016226153, -0.0062810442, 0.0020082721, 9.4476658e-05, 0.0074219867, 0.0009444831, -8.442527e-05, 0.00020466563, 0.00020648551, -0.00079929274, 0.00025556218, 1.2022604e-05, 0.0009444831, 0.00012018997,
+ -9.5793719e-05, 0.00031565838, -0.00013429622, -0.00038793895, 3.3109857e-05, 0.0004235414, 0.00029567281, -1.4101455e-05, 0.00023222528, -0.00076522612, 0.0003255639, 0.0009404503, -8.0265658e-05, -0.0010267586, -0.00071677665, 3.4185064e-05, 0.00023429022, -0.00077203048, 0.0003284588, 0.00094881275, -8.0979377e-05, -0.0010358885, -0.0007231502, 3.4489036e-05, -0.00090692306, 0.0029884826, -0.0012714439, -0.0036727959, 0.0003134662, 0.0040098606, 0.00279927, -0.00013350494, 0.0002899754, -0.00095552366, 0.0004065256, 0.0011743229, -0.00010022624, -0.0012820944, -0.00089502571, 4.2686255e-05, 1.3641531e-05, -4.4951419e-05, 1.912449e-05, 5.5244554e-05, -4.7150184e-06, -6.0314531e-05, -4.2105368e-05, 2.0081216e-06, 0.0010716643, -0.0035313361, 0.0015023998, 0.004339954, -0.00037040688, -0.004738246, -0.0033077534, 0.00015775592, 0.00013637438, -0.00044937931, 0.00019118752, 0.00055227978, -4.7136037e-05, -0.00060296433, -0.00042092734, 2.0075191e-05,
+ -0.00039223948, 0.0014360482, -0.0011595386, -0.00080387034, -0.00012556209, 0.0022281812, 0.00011573549, -0.0002459045, 0.00095087574, -0.0034813002, 0.0028109795, 0.0019487605, 0.00030439043, -0.0054016068, -0.00028056857, 0.00059612719, 0.0009593309, -0.0035122558, 0.0028359746, 0.0019660888, 0.00030709706, -0.0054496377, -0.00028306338, 0.00060142793, -0.003713511, 0.013595726, -0.010977884, -0.0076106091, -0.0011887539, 0.021095213, 0.001095721, -0.0023280906, 0.0011873409, -0.004347035, 0.003510018, 0.0024333811, 0.00038008669, -0.0067448862, -0.00035034078, 0.00074437297, 5.5856972e-05, -0.00020450084, 0.00016512442, 0.00011447538, 1.7880704e-05, -0.00031730476, -1.6481345e-05, 3.5018098e-05, 0.0043880649, -0.01606537, 0.012972, 0.0089930652, 0.0014046893, -0.024927128, -0.0012947571, 0.0027509849, 0.00055840212, -0.0020443948, 0.0016507487, 0.0011444103, 0.00017875339, -0.0031720955, -0.000164764, 0.00035007591,
+ -0.010139101, -0.012557878, 0.026397074, -0.026320794, 0.014250575, -0.0090754822, 0.0062416813, 0.00046524391, 0.033410252, 0.041380579, -0.086983339, 0.086731984, -0.046958334, 0.029905426, -0.020567518, -0.0015330665, -0.014214324, -0.017605283, 0.037006885, -0.036899947, 0.019978328, -0.012723203, 0.0087504086, 0.00065224002, -0.04106065, -0.05085605, 0.10690109, -0.10659218, 0.057711019, -0.036753277, 0.025277141, 0.0018841135, 0.0035044489, 0.0043404679, -0.0091238064, 0.0090974414, -0.0049255265, 0.0031368228, -0.0021573562, -0.00016080553, 0.044828922, 0.055523279, -0.11671176, 0.1163745, -0.063007351, 0.040126247, -0.027596908, -0.0020570248, 0.031294918, 0.038760612, -0.081476082, 0.081240642, -0.043985217, 0.028011996, -0.019265307, -0.001436002, -0.0014925413, -0.0018486009, 0.00388582, -0.0038745912, 0.0020977768, -0.0013359697, 0.00091881587, 6.8486914e-05,
+ 0.00060583196, -0.0030790227, -0.006971263, -0.0030253481, -0.0013828203, 0.00078783096, 0.0011756258, 0.0001538304, -0.0019963306, 0.010145961, 0.022971627, 0.0099690929, 0.0045566539, -0.0025960517, -0.0038739089, -0.0005069002, 0.00084933481, -0.0043165784, -0.009773232, -0.0042413304, -0.0019386191, 0.0011044849, 0.0016481467, 0.00021565966, 0.0024534575, -0.012469219, -0.028231751, -0.012251851, -0.0056000526, 0.0031905048, 0.0047609702, 0.00062297201, -0.00020939797, 0.0010642243, 0.0024095267, 0.0010456724, 0.00047795392, -0.00027230356, -0.00040633982, -5.3169485e-05, -0.0026786194, 0.013613561, 0.030822673, 0.013376244, 0.0061139881, -0.003483308, -0.0051979003, -0.00068014422, -0.0018699351, 0.0095035802, 0.021517203, 0.0093379105, 0.0042681542, -0.0024316854, -0.0036286365, -0.00047480636, 8.9182384e-05, -0.00045325206, -0.001026215, -0.00044535082, -0.0002035601, 0.00011597381, 0.00017305972, 2.2644831e-05,
+ -0.00035468367, 0.0014022272, -0.00072506068, -0.0042853924, -0.0046321943, -0.0035357139, -0.0012784016, -5.6135674e-06, 0.0011687496, -0.0046206033, 0.0023892118, 0.014121176, 0.015263954, 0.011650844, 0.0042125746, 1.8497764e-05, -0.00049724215, 0.0019658263, -0.0010164853, -0.0060078259, -0.0064940183, -0.0049568281, -0.0017922313, -7.869836e-06, -0.001436374, 0.0056786454, -0.0029363019, -0.017354693, -0.018759148, -0.014318696, -0.0051771848, -2.2733447e-05, 0.00012259181, -0.00048466167, 0.00025060783, 0.0014811903, 0.0016010579, 0.0012220737, 0.00044186295, 1.9402568e-06, 0.0015681949, -0.0061997937, 0.0032057761, 0.018947391, 0.020480738, 0.01563277, 0.0056523123, 2.4819771e-05, 0.0010947515, -0.0043280548, 0.0022379414, 0.013227109, 0.014297533, 0.010913184, 0.0039458599, 1.7326598e-05, -5.2211731e-05, 0.00020641692, -0.00010673362, -0.00063083748, -0.00068188897, -0.00052047996, -0.00018818899, -8.2635344e-07,
+ 0.0001936035, -0.00070738682, -2.9781283e-05, 0.0033471992, -0.0044823002, -0.0010202529, -0.0068027065, -0.0011546219, -0.00063796008, 0.0023309731, 9.8134948e-05, -0.011029653, 0.014770025, 0.0033619259, 0.022416202, 0.0038046971, 0.00027141882, -0.00099170775, -4.1751314e-05, 0.0046925435, -0.0062838771, -0.0014303245, -0.0095369274, -0.0016187007, 0.00078404243, -0.0028647275, -0.00012060623, 0.013555262, -0.018152118, -0.0041317516, -0.027549143, -0.0046759101, -6.6916542e-05, 0.00024449909, 1.0293515e-05, -0.001156916, 0.001549249, 0.0003526372, 0.0023512673, 0.0003990801, -0.00085599662, 0.0031276331, 0.00013167467, -0.014799274, 0.019817998, 0.0045109362, 0.030077419, 0.0051050339, -0.00059756832, 0.00218339, 9.1921639e-05, -0.010331322, 0.013834877, 0.0031490691, 0.020996944, 0.0035638068, 2.8499688e-05, -0.00010413192, -4.3839976e-06, 0.00049272938, -0.00065982359, -0.00015018783, -0.0010014024, -0.00016996782,
+ -7.8825636e-05, 0.00057369258, -0.0015259126, 0.0018888883, -0.0017280512, 0.00288674, -0.002905633, -0.00089402997, 0.00025974534, -0.0018904253, 0.00502817, -0.0062242433, 0.0056942546, -0.0095123531, 0.0095746091, 0.0029459974, -0.00011050813, 0.00080427761, -0.0021392247, 0.0026480917, -0.0024226091, 0.0040470113, -0.004073498, -0.0012533686, -0.00031922275, 0.0023233016, -0.0061795382, 0.0076494925, -0.0069981452, 0.011690525, -0.011767037, -0.0036205824, 2.7245059e-05, -0.0001982894, 0.00052741192, -0.00065286975, 0.00059727848, -0.00099776428, 0.0010042944, 0.00030900987, 0.00034851889, -0.0025365187, 0.006746655, -0.0083515119, 0.0076403883, -0.012763404, 0.012846937, 0.0039528553, 0.00024329985, -0.0017707351, 0.0047098169, -0.005830162, 0.005333729, -0.0089100887, 0.008968403, 0.0027594748, -1.1603644e-05, 8.445126e-05, -0.00022462421, 0.00027805657, -0.00025438031, 0.00042494681, -0.00042772798, -0.000131607,
+ -9.5793719e-05, 0.00023222528, 0.00023429022, -0.00090692306, 0.0002899754, 1.3641531e-05, 0.0010716643, 0.00013637438, 0.00031565838, -0.00076522612, -0.00077203048, 0.0029884826, -0.00095552366, -4.4951419e-05, -0.0035313361, -0.00044937931, -0.00013429622, 0.0003255639, 0.0003284588, -0.0012714439, 0.0004065256, 1.912449e-05, 0.0015023998, 0.00019118752, -0.00038793895, 0.0009404503, 0.00094881275, -0.0036727959, 0.0011743229, 5.5244554e-05, 0.004339954, 0.00055227978, 3.3109857e-05, -8.0265658e-05, -8.0979377e-05, 0.0003134662, -0.00010022624, -4.7150184e-06, -0.00037040688, -4.7136037e-05, 0.0004235414, -0.0010267586, -0.0010358885, 0.0040098606, -0.0012820944, -6.0314531e-05, -0.004738246, -0.00060296433, 0.00029567281, -0.00071677665, -0.0007231502, 0.00279927, -0.00089502571, -4.2105368e-05, -0.0033077534, -0.00042092734, -1.4101455e-05, 3.4185064e-05, 3.4489036e-05, -0.00013350494, 4.2686255e-05, 2.0081216e-06, 0.00015775592, 2.0075191e-05,
+ 0.00015473814, -0.00050989136, 0.00021693224, 0.00062664809, -5.3483231e-05, -0.00068415767, -0.00047760813, 2.2778455e-05, -0.00050989136, 0.0016801882, -0.00071483267, -0.0020649237, 0.00017623734, 0.0022544286, 0.0015738089, -7.5059307e-05, 0.00021693224, -0.00071483267, 0.00030412411, 0.00087851759, -7.4979818e-05, -0.00095914207, -0.00066957381, 3.193383e-05, 0.00062664809, -0.0020649237, 0.00087851759, 0.0025377572, -0.00021659279, -0.0027706556, -0.0019341853, 9.2246652e-05, -5.3483231e-05, 0.00017623734, -7.4979818e-05, -0.00021659279, 1.8485786e-05, 0.00023647023, 0.00016507906, -7.8730777e-06, -0.00068415767, 0.0022544286, -0.00095914207, -0.0027706556, 0.00023647023, 0.0030249279, 0.0021116919, -0.00010071243, -0.00047760813, 0.0015738089, -0.00066957381, -0.0019341853, 0.00016507906, 0.0021116919, 0.0014741649, -7.0307007e-05, 2.2778455e-05, -7.5059307e-05, 3.193383e-05, 9.2246652e-05, -7.8730777e-06, -0.00010071243, -7.0307007e-05, 3.3531359e-06,
+ 0.00063359485, -0.0023196867, 0.0018730335, 0.0012985131, 0.00020282378, -0.0035992402, -0.00018695061, 0.00039721606, -0.0020878146, 0.0076438055, -0.0061719988, -0.0042788457, -0.00066834262, 0.011860176, 0.00061603754, -0.0013089019, 0.00088825647, -0.0032520415, 0.0026258644, 0.0018204262, 0.00028434501, -0.0050458877, -0.00026209192, 0.00055686965, 0.0025658897, -0.0093941111, 0.0075852849, 0.0052586309, 0.00082138208, -0.014575961, -0.0007571, 0.0016086189, -0.00021899385, 0.00080176965, -0.00064738975, -0.00044881422, -7.010341e-05, 0.0012440307, 6.4617056e-05, -0.00013729258, -0.00280137, 0.01025624, -0.0082814118, -0.005741233, -0.00089676305, 0.015913645, 0.00082658159, -0.0017562472, -0.0019556268, 0.0071598461, -0.0057812253, -0.0040079352, -0.00062602722, 0.011109261, 0.00057703379, -0.0012260302, 9.3269261e-05, -0.00034147289, 0.00027572265, 0.00019114953, 2.9856972e-05, -0.00052983145, -2.752034e-05, 5.8472774e-05,
+ -0.041515831, -0.051419819, 0.10808615, -0.10777382, 0.05835078, -0.037160708, 0.025557353, 0.001905, 0.15199575, 0.18825575, -0.39571978, 0.39457627, -0.21363104, 0.13605098, -0.09356934, -0.0069744935, -0.12272913, -0.1520073, 0.31952436, -0.31860103, 0.17249661, -0.10985451, 0.075552662, 0.0056315621, -0.085084105, -0.10538171, 0.22151583, -0.22087571, 0.11958628, -0.076158553, 0.052378199, 0.0039041786, -0.013289877, -0.016460301, 0.034600095, -0.034500111, 0.018679012, -0.011895733, 0.0081813146, 0.00060982076, 0.23583754, 0.29209878, -0.61400125, 0.61222698, -0.33147124, 0.21109754, -0.14518276, -0.010821667, 0.0122498, 0.015172104, -0.031892261, 0.031800103, -0.017217176, 0.010964763, -0.0075410378, -0.00056209566, -0.026027287, -0.032236339, 0.067761845, -0.067566035, 0.036581527, -0.023296954, 0.016022528, 0.0011942909,
+ 0.0024806555, -0.012607447, -0.028544717, -0.01238767, -0.0056621325, 0.0032258734, 0.0048137484, 0.00062987802, -0.0090820556, 0.046157775, 0.10450653, 0.045353137, 0.020729925, -0.011810411, -0.017623862, -0.0023060789, 0.0073333154, -0.037270144, -0.08438391, -0.036620438, -0.0167384, 0.009536329, 0.014230406, 0.0018620458, 0.0050839486, -0.025838177, -0.058500616, -0.025387757, -0.011604187, 0.0066112262, 0.0098654769, 0.0012908957, 0.00079409724, -0.0040358443, -0.0091376174, -0.00396549, -0.0018125386, 0.0010326533, 0.0015409573, 0.00020163396, -0.014091773, 0.071618688, 0.16215298, 0.070370207, 0.032164679, -0.018325107, -0.027345293, -0.0035781261, -0.0007319505, 0.0037199956, 0.0084224995, 0.0036551473, 0.0016706877, -0.00095183698, -0.0014203607, -0.00018585391, 0.0015551834, -0.0079039163, -0.017895379, -0.0077661325, -0.0035497289, 0.0020223787, 0.0030178563, 0.00039488589,
+ -0.0014522971, 0.0057415966, -0.0029688526, -0.01754708, -0.018967105, -0.014477427, -0.005234577, -2.2985461e-05, 0.0053170797, -0.021020855, 0.010869419, 0.06424252, 0.069441444, 0.053004054, 0.019164579, 8.4153254e-05, -0.0042932816, 0.016973311, -0.0087765239, -0.05187269, -0.056070567, -0.042798179, -0.01547446, -6.7949634e-05, -0.0029763923, 0.011767044, -0.006084478, -0.035961646, -0.038871897, -0.029670583, -0.010727939, -4.7107267e-05, -0.00046490337, 0.0018379763, -0.00095037688, -0.0056170992, -0.0060716716, -0.0046344544, -0.0016756713, -7.3580112e-06, 0.0082500136, -0.032616088, 0.016865057, 0.099679089, 0.10774577, 0.082241416, 0.029735879, 0.00013057271, 0.00042851963, -0.0016941347, 0.00087599956, 0.0051775002, 0.0055964973, 0.004271758, 0.0015445318, 6.7821669e-06, -0.00091048046, 0.0035995469, -0.0018612461, -0.011000693, -0.01189094, -0.0090762521, -0.003281684, -1.4410146e-05,
+ 0.000792734, -0.0028964847, -0.00012194323, 0.01370553, -0.018353344, -0.0041775544, -0.027854541, -0.0047277453, -0.0029023193, 0.010604469, 0.00044645263, -0.050178022, 0.067194375, 0.01529466, 0.1019797, 0.017308992, 0.0023434808, -0.0085625899, -0.00036048864, 0.040516297, -0.054256169, -0.012349689, -0.082343612, -0.013976164, 0.0016246589, -0.0059361646, -0.00024991503, 0.028088629, -0.037614034, -0.0085616371, -0.057086144, -0.009689219, 0.00025376675, -0.00092721078, -3.9035964e-05, 0.0043873579, -0.0058751972, -0.0013373016, -0.0089166812, -0.0015134264, -0.0045032565, 0.01645396, 0.00069271864, -0.077856528, 0.10425921, 0.023731288, 0.15823232, 0.026856738, -0.00023390674, 0.00085464645, 3.5980976e-05, -0.0040439995, 0.0054153991, 0.0012326432, 0.008218854, 0.0013949843, 0.00049698428, -0.0018158769, -7.6449182e-05, 0.008592331, -0.011506159, -0.0026190108, -0.017462691, -0.0029639388,
+ -0.00032276152, 0.0023490567, -0.006248042, 0.0077342916, -0.0070757237, 0.011820122, -0.011897481, -0.0036607186, 0.0011816788, -0.0086002526, 0.022875028, -0.028316413, 0.025905297, -0.043275257, 0.043558482, 0.013402446, -0.00095414782, 0.0069442831, -0.018470466, 0.022864118, -0.020917259, 0.034942652, -0.035171343, -0.010821819, -0.0006614796, 0.0048142452, -0.012804972, 0.015850948, -0.014501254, 0.024224602, -0.024383146, -0.0075024144, -0.00010332109, 0.00075197039, -0.0020000975, 0.0024758696, -0.0022650516, 0.0037838088, -0.0038085729, -0.0011718542, 0.0018335002, -0.013344205, 0.035493035, -0.043935921, 0.040194818, -0.067146155, 0.067585609, 0.020795317, 9.5235093e-05, -0.00069312053, 0.0018435682, -0.0022821059, 0.0020877867, -0.0034876846, 0.0035105106, 0.0010801439, -0.00020234707, 0.001472681, -0.0039170499, 0.004848816, -0.0044359438, 0.0074103226, -0.0074588213, -0.0022949938,
+ -0.00039223948, 0.00095087574, 0.0009593309, -0.003713511, 0.0011873409, 5.5856972e-05, 0.0043880649, 0.00055840212, 0.0014360482, -0.0034813002, -0.0035122558, 0.013595726, -0.004347035, -0.00020450084, -0.01606537, -0.0020443948, -0.0011595386, 0.0028109795, 0.0028359746, -0.010977884, 0.003510018, 0.00016512442, 0.012972, 0.0016507487, -0.00080387034, 0.0019487605, 0.0019660888, -0.0076106091, 0.0024333811, 0.00011447538, 0.0089930652, 0.0011444103, -0.00012556209, 0.00030439043, 0.00030709706, -0.0011887539, 0.00038008669, 1.7880704e-05, 0.0014046893, 0.00017875339, 0.0022281812, -0.0054016068, -0.0054496377, 0.021095213, -0.0067448862, -0.00031730476, -0.024927128, -0.0031720955, 0.00011573549, -0.00028056857, -0.00028306338, 0.001095721, -0.00035034078, -1.6481345e-05, -0.0012947571, -0.000164764, -0.0002459045, 0.00059612719, 0.00060142793, -0.0023280906, 0.00074437297, 3.5018098e-05, 0.0027509849, 0.00035007591,
+ 0.00063359485, -0.0020878146, 0.00088825647, 0.0025658897, -0.00021899385, -0.00280137, -0.0019556268, 9.3269261e-05, -0.0023196867, 0.0076438055, -0.0032520415, -0.0093941111, 0.00080176965, 0.01025624, 0.0071598461, -0.00034147289, 0.0018730335, -0.0061719988, 0.0026258644, 0.0075852849, -0.00064738975, -0.0082814118, -0.0057812253, 0.00027572265, 0.0012985131, -0.0042788457, 0.0018204262, 0.0052586309, -0.00044881422, -0.005741233, -0.0040079352, 0.00019114953, 0.00020282378, -0.00066834262, 0.00028434501, 0.00082138208, -7.010341e-05, -0.00089676305, -0.00062602722, 2.9856972e-05, -0.0035992402, 0.011860176, -0.0050458877, -0.014575961, 0.0012440307, 0.015913645, 0.011109261, -0.00052983145, -0.00018695061, 0.00061603754, -0.00026209192, -0.0007571, 6.4617056e-05, 0.00082658159, 0.00057703379, -2.752034e-05, 0.00039721606, -0.0013089019, 0.00055686965, 0.0016086189, -0.00013729258, -0.0017562472, -0.0012260302, 5.8472774e-05,
+ 0.0025943341, -0.0094982503, 0.0076693723, 0.0053169259, 0.00083048758, -0.014737544, -0.0007654929, 0.0016264513, -0.0094982503, 0.034774534, -0.028078734, -0.019466071, -0.0030405409, 0.05395638, 0.0028025855, -0.0059546848, 0.0076693723, -0.028078734, 0.022672203, 0.0157179, 0.0024550879, -0.043567136, -0.0022629506, 0.0048081165, 0.0053169259, -0.019466071, 0.0157179, 0.010896708, 0.0017020325, -0.030203676, -0.0015688299, 0.0033333105, 0.00083048758, -0.0030405409, 0.0024550879, 0.0017020325, 0.00026585227, -0.0047177219, -0.00024504644, 0.00052065292, -0.014737544, 0.05395638, -0.043567136, -0.030203676, -0.0047177219, 0.083719052, 0.0043485089, -0.0092393256, -0.0007654929, 0.0028025855, -0.0022629506, -0.0015688299, -0.00024504644, 0.0043485089, 0.00022586889, -0.00047990617, 0.0016264513, -0.0059546848, 0.0048081165, 0.0033333105, 0.00052065292, -0.0092393256, -0.00047990617, 0.001019662,
+};
+
+
+static double * projection_matrices[] =
+{
+  dgq0_refined_onto_dgq0,
+  dgq1_refined_onto_dgq1,
+  dgq2_refined_onto_dgq2,
+  dgq3_refined_onto_dgq3,
+  dgq4_refined_onto_dgq4,
+  dgq5_refined_onto_dgq5,
+  dgq6_refined_onto_dgq6,
+  dgq7_refined_onto_dgq7,
+  0,0,0,0,0,0,0
+};
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6e6e5a95715efdc160abe2e673f93bc998d6a48b 100644 (file)
@@ -0,0 +1,397 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+// Transfer matrices for finite elements
+
+static double dgq0_into_dgq0_refined[] =
+{
+  1., 1., 1., 1., 1., 1., 1., 1.
+};
+
+static double dgq1_into_dgq1_refined[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0.,
+ .5, .5, 0., 0., 0., 0., 0., 0.,
+ .5, 0., .5, 0., 0., 0., 0., 0.,
+ .25, .25, .25, .25, 0., 0., 0., 0.,
+ .5, 0., 0., 0., .5, 0., 0., 0.,
+ .25, .25, 0., 0., .25, .25, 0., 0.,
+ .25, 0., .25, 0., .25, 0., .25, 0.,
+ .125, .125, .125, .125, .125, .125, .125, .125,
+};
+
+static double dgq2_into_dgq2_refined[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 10.125/27., 20.25/27., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 10.125/27., 0., 0., 20.25/27., 0., 0., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 3.796875/27., 7.59375/27., -1.265625/27., 7.59375/27., 15.1875/27., -2.53125/27., -1.265625/27., -2.53125/27., 0.421875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 10.125/27., 0., 0., 20.25/27., 0., 0., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 10.125/27., 20.25/27., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., -.125, 0., 0., 0., 0., 0., 0., 0., 0.,
+ 3.796875/27., 7.59375/27., -1.265625/27., 0., 0., 0., 0., 0., 0., 7.59375/27., 15.1875/27., -2.53125/27., 0., 0., 0., 0., 0., 0., -1.265625/27., -2.53125/27., 0.421875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., -.125, 0., 0., 0., 0., 0., 0., 0.,
+ 3.796875/27., 0., 0., 7.59375/27., 0., 0., -1.265625/27., 0., 0., 7.59375/27., 0., 0., 15.1875/27., 0., 0., -2.53125/27., 0., 0., -1.265625/27., 0., 0., -2.53125/27., 0., 0., 0.421875/27., 0., 0.,
+ 1.423828125/27., 2.84765625/27., -0.474609375/27., 2.84765625/27., 5.6953125/27., -0.94921875/27., -0.474609375/27., -0.94921875/27., 0.158203125/27., 2.84765625/27., 5.6953125/27., -0.94921875/27., 5.6953125/27., 11.390625/27., -1.8984375/27., -0.94921875/27., -1.8984375/27., 0.31640625/27., -0.474609375/27., -0.94921875/27., 0.158203125/27., -0.94921875/27., -1.8984375/27., 0.31640625/27., 0.158203125/27., 0.31640625/27., -0.052734375/27.,
+ 0., 3.796875/27., 0., 0., 7.59375/27., 0., 0., -1.265625/27., 0., 0., 7.59375/27., 0., 0., 15.1875/27., 0., 0., -2.53125/27., 0., 0., -1.265625/27., 0., 0., -2.53125/27., 0., 0., 0.421875/27., 0.,
+ 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., -.125, 0., 0., 0., 0., 0.,
+ 0., 0., 0., 3.796875/27., 7.59375/27., -1.265625/27., 0., 0., 0., 0., 0., 0., 7.59375/27., 15.1875/27., -2.53125/27., 0., 0., 0., 0., 0., 0., -1.265625/27., -2.53125/27., 0.421875/27., 0., 0., 0.,
+ 0., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., -.125, 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 20.25/27., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 20.25/27., 0., 0., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., 7.59375/27., -1.265625/27., 7.59375/27., 15.1875/27., -2.53125/27., -1.265625/27., -2.53125/27., 0.421875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 20.25/27., 0., 0., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 20.25/27., -.125, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+};
+
+static double dgq3_into_dgq3_refined[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 8.4375/27., 0., 0., 0., 25.3125/27., 0., 0., 0., -8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 2.63671875/27., 7.91015625/27., -2.63671875/27., 0.52734375/27., 7.91015625/27., 23.73046875/27., -7.91015625/27., 1.58203125/27., -2.63671875/27., -7.91015625/27., 2.63671875/27., -0.52734375/27., 0.52734375/27., 1.58203125/27., -0.52734375/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 8.4375/27., 0., 0., 0., 25.3125/27., 0., 0., 0., -8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., 4.74609375/27., 4.74609375/27., -0.52734375/27., -1.58203125/27., 14.23828125/27., 14.23828125/27., -1.58203125/27., 0.52734375/27., -4.74609375/27., -4.74609375/27., 0.52734375/27., -0.10546875/27., 0.94921875/27., 0.94921875/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.6875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25.3125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 2.63671875/27., 7.91015625/27., -2.63671875/27., 0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 7.91015625/27., 23.73046875/27., -7.91015625/27., 1.58203125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -2.63671875/27., -7.91015625/27., 2.63671875/27., -0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.52734375/27., 1.58203125/27., -0.52734375/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25.3125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., 4.74609375/27., 4.74609375/27., -0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.58203125/27., 14.23828125/27., 14.23828125/27., -1.58203125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.52734375/27., -4.74609375/27., -4.74609375/27., 0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.10546875/27., 0.94921875/27., 0.94921875/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 2.63671875/27., 0., 0., 0., 7.91015625/27., 0., 0., 0., -2.63671875/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., 7.91015625/27., 0., 0., 0., 23.73046875/27., 0., 0., 0., -7.91015625/27., 0., 0., 0., 1.58203125/27., 0., 0., 0., -2.63671875/27., 0., 0., 0., -7.91015625/27., 0., 0., 0., 2.63671875/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., 1.58203125/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., 0.10546875/27., 0., 0., 0.,
+ 0.8239746094/27., 2.471923828/27., -0.8239746094/27., 0.1647949219/27., 2.471923828/27., 7.415771484/27., -2.471923828/27., 0.4943847656/27., -0.8239746094/27., -2.471923828/27., 0.8239746094/27., -0.1647949219/27., 0.1647949219/27., 0.4943847656/27., -0.1647949219/27., 0.03295898438/27., 2.471923828/27., 7.415771484/27., -2.471923828/27., 0.4943847656/27., 7.415771484/27., 22.24731445/27., -7.415771484/27., 1.483154297/27., -2.471923828/27., -7.415771484/27., 2.471923828/27., -0.4943847656/27., 0.4943847656/27., 1.483154297/27., -0.4943847656/27., 0.09887695313/27., -0.8239746094/27., -2.471923828/27., 0.8239746094/27., -0.1647949219/27., -2.471923828/27., -7.415771484/27., 2.471923828/27., -0.4943847656/27., 0.8239746094/27., 2.471923828/27., -0.8239746094/27., 0.1647949219/27., -0.1647949219/27., -0.4943847656/27., 0.1647949219/27., -0.03295898438/27., 0.1647949219/27., 0.4943847656/27., -0.1647949219/27., 0.03295898438/27., 0.4943847656/27., 1.483154297/27., -0.4943847656/27., 0.09887695313/27., -0.1647949219/27., -0.4943847656/27., 0.1647949219/27., -0.03295898438/27., 0.03295898438/27., 0.09887695313/27., -0.03295898438/27., 0.006591796875/27.,
+ 0., 2.63671875/27., 0., 0., 0., 7.91015625/27., 0., 0., 0., -2.63671875/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., 7.91015625/27., 0., 0., 0., 23.73046875/27., 0., 0., 0., -7.91015625/27., 0., 0., 0., 1.58203125/27., 0., 0., 0., -2.63671875/27., 0., 0., 0., -7.91015625/27., 0., 0., 0., 2.63671875/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., 1.58203125/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., 0.10546875/27., 0., 0.,
+ -0.1647949219/27., 1.483154297/27., 1.483154297/27., -0.1647949219/27., -0.4943847656/27., 4.449462891/27., 4.449462891/27., -0.4943847656/27., 0.1647949219/27., -1.483154297/27., -1.483154297/27., 0.1647949219/27., -0.03295898438/27., 0.2966308594/27., 0.2966308594/27., -0.03295898438/27., -0.4943847656/27., 4.449462891/27., 4.449462891/27., -0.4943847656/27., -1.483154297/27., 13.34838867/27., 13.34838867/27., -1.483154297/27., 0.4943847656/27., -4.449462891/27., -4.449462891/27., 0.4943847656/27., -0.09887695313/27., 0.8898925781/27., 0.8898925781/27., -0.09887695313/27., 0.1647949219/27., -1.483154297/27., -1.483154297/27., 0.1647949219/27., 0.4943847656/27., -4.449462891/27., -4.449462891/27., 0.4943847656/27., -0.1647949219/27., 1.483154297/27., 1.483154297/27., -0.1647949219/27., 0.03295898438/27., -0.2966308594/27., -0.2966308594/27., 0.03295898438/27., -0.03295898438/27., 0.2966308594/27., 0.2966308594/27., -0.03295898438/27., -0.09887695313/27., 0.8898925781/27., 0.8898925781/27., -0.09887695313/27., 0.03295898438/27., -0.2966308594/27., -0.2966308594/27., 0.03295898438/27., -0.006591796875/27., 0.05932617187/27., 0.05932617188/27., -0.006591796875/27.,
+ 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25.3125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 2.63671875/27., 7.91015625/27., -2.63671875/27., 0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 7.91015625/27., 23.73046875/27., -7.91015625/27., 1.58203125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -2.63671875/27., -7.91015625/27., 2.63671875/27., -0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.52734375/27., 1.58203125/27., -0.52734375/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25.3125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., -0.52734375/27., 4.74609375/27., 4.74609375/27., -0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.58203125/27., 14.23828125/27., 14.23828125/27., -1.58203125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.52734375/27., -4.74609375/27., -4.74609375/27., 0.52734375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.10546875/27., 0.94921875/27., 0.94921875/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -0.10546875/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., -0.10546875/27., 0., 0., 0.,
+ -0.1647949219/27., -0.4943847656/27., 0.1647949219/27., -0.03295898438/27., 1.483154297/27., 4.449462891/27., -1.483154297/27., 0.2966308594/27., 1.483154297/27., 4.449462891/27., -1.483154297/27., 0.2966308594/27., -0.1647949219/27., -0.4943847656/27., 0.1647949219/27., -0.03295898438/27., -0.4943847656/27., -1.483154297/27., 0.4943847656/27., -0.09887695313/27., 4.449462891/27., 13.34838867/27., -4.449462891/27., 0.8898925781/27., 4.449462891/27., 13.34838867/27., -4.449462891/27., 0.8898925781/27., -0.4943847656/27., -1.483154297/27., 0.4943847656/27., -0.09887695313/27., 0.1647949219/27., 0.4943847656/27., -0.1647949219/27., 0.03295898438/27., -1.483154297/27., -4.449462891/27., 1.483154297/27., -0.2966308594/27., -1.483154297/27., -4.449462891/27., 1.483154297/27., -0.2966308594/27., 0.1647949219/27., 0.4943847656/27., -0.1647949219/27., 0.03295898438/27., -0.03295898438/27., -0.09887695313/27., 0.03295898438/27., -0.006591796875/27., 0.2966308594/27., 0.8898925781/27., -0.2966308594/27., 0.05932617187/27., 0.2966308594/27., 0.8898925781/27., -0.2966308594/27., 0.05932617188/27., -0.03295898438/27., -0.09887695313/27., 0.03295898438/27., -0.006591796875/27.,
+ 0., -0.52734375/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -0.10546875/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., -0.10546875/27., 0., 0.,
+ 0.03295898438/27., -0.2966308594/27., -0.2966308594/27., 0.03295898438/27., -0.2966308594/27., 2.669677734/27., 2.669677734/27., -0.2966308594/27., -0.2966308594/27., 2.669677734/27., 2.669677734/27., -0.2966308594/27., 0.03295898438/27., -0.2966308594/27., -0.2966308594/27., 0.03295898438/27., 0.09887695313/27., -0.8898925781/27., -0.8898925781/27., 0.09887695313/27., -0.8898925781/27., 8.009033203/27., 8.009033203/27., -0.8898925781/27., -0.8898925781/27., 8.009033203/27., 8.009033203/27., -0.8898925781/27., 0.09887695313/27., -0.8898925781/27., -0.8898925781/27., 0.09887695313/27., -0.03295898438/27., 0.2966308594/27., 0.2966308594/27., -0.03295898438/27., 0.2966308594/27., -2.669677734/27., -2.669677734/27., 0.2966308594/27., 0.2966308594/27., -2.669677734/27., -2.669677734/27., 0.2966308594/27., -0.03295898438/27., 0.2966308594/27., 0.2966308594/27., -0.03295898438/27., 0.006591796875/27., -0.05932617188/27., -0.05932617188/27., 0.006591796875/27., -0.05932617188/27., 0.5339355469/27., 0.5339355469/27., -0.05932617187/27., -0.05932617188/27., 0.5339355469/27., 0.5339355469/27., -0.05932617188/27., 0.006591796875/27., -0.05932617187/27., -0.05932617188/27., 0.006591796875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 25.3125/27., 0., 0., 0., -8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 2.63671875/27., 7.91015625/27., -2.63671875/27., 0.52734375/27., 7.91015625/27., 23.73046875/27., -7.91015625/27., 1.58203125/27., -2.63671875/27., -7.91015625/27., 2.63671875/27., -0.52734375/27., 0.52734375/27., 1.58203125/27., -0.52734375/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 25.3125/27., 0., 0., 0., -8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.52734375/27., 4.74609375/27., 4.74609375/27., -0.52734375/27., -1.58203125/27., 14.23828125/27., 14.23828125/27., -1.58203125/27., 0.52734375/27., -4.74609375/27., -4.74609375/27., 0.52734375/27., -0.10546875/27., 0.94921875/27., 0.94921875/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 8.4375/27., 25.3125/27., -8.4375/27., 1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 15.1875/27., 15.1875/27., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., 15.1875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -0.10546875/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -0.10546875/27., 0., 0., 0.,
+ -0.1647949219/27., -0.4943847656/27., 0.1647949219/27., -0.03295898438/27., -0.4943847656/27., -1.483154297/27., 0.4943847656/27., -0.09887695313/27., 0.1647949219/27., 0.4943847656/27., -0.1647949219/27., 0.03295898438/27., -0.03295898438/27., -0.09887695313/27., 0.03295898438/27., -0.006591796875/27., 1.483154297/27., 4.449462891/27., -1.483154297/27., 0.2966308594/27., 4.449462891/27., 13.34838867/27., -4.449462891/27., 0.8898925781/27., -1.483154297/27., -4.449462891/27., 1.483154297/27., -0.2966308594/27., 0.2966308594/27., 0.8898925781/27., -0.2966308594/27., 0.05932617187/27., 1.483154297/27., 4.449462891/27., -1.483154297/27., 0.2966308594/27., 4.449462891/27., 13.34838867/27., -4.449462891/27., 0.8898925781/27., -1.483154297/27., -4.449462891/27., 1.483154297/27., -0.2966308594/27., 0.2966308594/27., 0.8898925781/27., -0.2966308594/27., 0.05932617188/27., -0.1647949219/27., -0.4943847656/27., 0.1647949219/27., -0.03295898438/27., -0.4943847656/27., -1.483154297/27., 0.4943847656/27., -0.09887695313/27., 0.1647949219/27., 0.4943847656/27., -0.1647949219/27., 0.03295898438/27., -0.03295898438/27., -0.09887695313/27., 0.03295898438/27., -0.006591796875/27.,
+ 0., -0.52734375/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -0.10546875/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., 4.74609375/27., 0., 0., 0., 14.23828125/27., 0., 0., 0., -4.74609375/27., 0., 0., 0., 0.94921875/27., 0., 0., 0., -0.52734375/27., 0., 0., 0., -1.58203125/27., 0., 0., 0., 0.52734375/27., 0., 0., 0., -0.10546875/27., 0., 0.,
+ 0.03295898438/27., -0.2966308594/27., -0.2966308594/27., 0.03295898438/27., 0.09887695313/27., -0.8898925781/27., -0.8898925781/27., 0.09887695313/27., -0.03295898438/27., 0.2966308594/27., 0.2966308594/27., -0.03295898438/27., 0.006591796875/27., -0.05932617188/27., -0.05932617188/27., 0.006591796875/27., -0.2966308594/27., 2.669677734/27., 2.669677734/27., -0.2966308594/27., -0.8898925781/27., 8.009033203/27., 8.009033203/27., -0.8898925781/27., 0.2966308594/27., -2.669677734/27., -2.669677734/27., 0.2966308594/27., -0.05932617188/27., 0.5339355469/27., 0.5339355469/27., -0.05932617187/27., -0.2966308594/27., 2.669677734/27., 2.669677734/27., -0.2966308594/27., -0.8898925781/27., 8.009033203/27., 8.009033203/27., -0.8898925781/27., 0.2966308594/27., -2.669677734/27., -2.669677734/27., 0.2966308594/27., -0.05932617188/27., 0.5339355469/27., 0.5339355469/27., -0.05932617188/27., 0.03295898438/27., -0.2966308594/27., -0.2966308594/27., 0.03295898438/27., 0.09887695313/27., -0.8898925781/27., -0.8898925781/27., 0.09887695313/27., -0.03295898438/27., 0.2966308594/27., 0.2966308594/27., -0.03295898438/27., 0.006591796875/27., -0.05932617187/27., -0.05932617188/27., 0.006591796875/27.,
+ 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4.74609375/27., 14.23828125/27., -4.74609375/27., 0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.52734375/27., -1.58203125/27., 0.52734375/27., -0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -0.94921875/27., 8.54296875/27., 8.54296875/27., -0.94921875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.10546875/27., -0.94921875/27., -0.94921875/27., 0.10546875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0.10546875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 0.10546875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 0.10546875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 0.10546875/27., 0., 0., 0.,
+ 0.03295898438/27., 0.09887695313/27., -0.03295898438/27., 0.006591796875/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617188/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617188/27., 0.03295898438/27., 0.09887695313/27., -0.03295898438/27., 0.006591796875/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617188/27., 2.669677734/27., 8.009033203/27., -2.669677734/27., 0.5339355469/27., 2.669677734/27., 8.009033203/27., -2.669677734/27., 0.5339355469/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617187/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617188/27., 2.669677734/27., 8.009033203/27., -2.669677734/27., 0.5339355469/27., 2.669677734/27., 8.009033203/27., -2.669677734/27., 0.5339355469/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617188/27., 0.03295898438/27., 0.09887695313/27., -0.03295898438/27., 0.006591796875/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617187/27., -0.2966308594/27., -0.8898925781/27., 0.2966308594/27., -0.05932617188/27., 0.03295898438/27., 0.09887695313/27., -0.03295898438/27., 0.006591796875/27.,
+ 0., 0.10546875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 0.10546875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., 8.54296875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 0.10546875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., -0.94921875/27., 0., 0., 0., 0.10546875/27., 0., 0.,
+ -0.006591796875/27., 0.05932617187/27., 0.05932617188/27., -0.006591796875/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., -0.006591796875/27., 0.05932617188/27., 0.05932617188/27., -0.006591796875/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., -0.5339355469/27., 4.805419922/27., 4.805419922/27., -0.5339355469/27., -0.5339355469/27., 4.805419922/27., 4.805419922/27., -0.5339355469/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., -0.5339355469/27., 4.805419922/27., 4.805419922/27., -0.5339355469/27., -0.5339355469/27., 4.805419922/27., 4.805419922/27., -0.5339355469/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., -0.006591796875/27., 0.05932617188/27., 0.05932617188/27., -0.006591796875/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617187/27., 0.05932617188/27., -0.5339355469/27., -0.5339355469/27., 0.05932617188/27., -0.006591796875/27., 0.05932617187/27., 0.05932617188/27., -0.006591796875/27.,
+};
+
+static double * embedding[] =
+{
+  dgq0_into_dgq0_refined,
+  dgq1_into_dgq1_refined,
+  dgq2_into_dgq2_refined,
+  dgq3_into_dgq3_refined,
+//    dgq4_into_dgq4_refined,
+  0,0,0,0,0,0,0
+};
+
+
+static double dgq0_refined_onto_dgq0[] =
+{
+ 0.125,
+};
+
+static double dgq1_refined_onto_dgq1[] =
+{
+ 0.421875, 0.28125, 0.28125, 0.1875, 0.28125, 0.1875, 0.1875, 0.125,
+ -0.140625, 0, -0.09375, 0, -0.09375, 0, -0.0625, 0,
+ -0.140625, -0.09375, 0, 0, -0.09375, -0.0625, 0, 0,
+ 0.046875, 0, 0, 0, 0.03125, 0, 0, 0,
+ -0.140625, -0.09375, -0.09375, -0.0625, 0, 0, 0, 0,
+ 0.046875, 0, 0.03125, 0, 0, 0, 0, 0,
+ 0.046875, 0.03125, 0, 0, 0, 0, 0, 0,
+ -0.015625, 0, 0, 0, 0, 0, 0, 0,
+};
+
+static double dgq2_refined_onto_dgq2[] =
+{
+ 0.32495117, 0.35449219, -0.088623047, 0.35449219, 0.38671875, -0.096679688, -0.088623047, -0.096679687, 0.024169922, 0.35449219, 0.38671875, -0.096679688, 0.38671875, 0.421875, -0.10546875, -0.096679687, -0.10546875, 0.026367187, -0.088623047, -0.096679687, 0.024169922, -0.096679687, -0.10546875, 0.026367187, 0.024169922, 0.026367187, -0.0065917969,
+ -0.044311523, 0.17724609, 0.10339355, -0.048339844, 0.19335938, 0.11279297, 0.012084961, -0.048339844, -0.028198242, -0.048339844, 0.19335938, 0.11279297, -0.052734375, 0.2109375, 0.12304687, 0.013183594, -0.052734375, -0.030761719, 0.012084961, -0.048339844, -0.028198242, 0.013183594, -0.052734375, -0.030761719, -0.0032958984, 0.013183594, 0.0076904297,
+ 0.088623047, -0.11816406, -0.088623047, 0.096679688, -0.12890625, -0.096679687, -0.024169922, 0.032226563, 0.024169922, 0.096679688, -0.12890625, -0.096679688, 0.10546875, -0.140625, -0.10546875, -0.026367187, 0.03515625, 0.026367188, -0.024169922, 0.032226563, 0.024169922, -0.026367187, 0.03515625, 0.026367188, 0.0065917969, -0.0087890625, -0.0065917969,
+ -0.044311523, -0.048339844, 0.012084961, 0.17724609, 0.19335937, -0.048339844, 0.10339355, 0.11279297, -0.028198242, -0.048339844, -0.052734375, 0.013183594, 0.19335937, 0.2109375, -0.052734375, 0.11279297, 0.12304687, -0.030761719, 0.012084961, 0.013183594, -0.0032958984, -0.048339844, -0.052734375, 0.013183594, -0.028198242, -0.030761719, 0.0076904297,
+ 0.0060424805, -0.024169922, -0.014099121, -0.024169922, 0.096679688, 0.056396484, -0.014099121, 0.056396484, 0.032897949, 0.0065917969, -0.026367188, -0.015380859, -0.026367187, 0.10546875, 0.061523438, -0.015380859, 0.061523438, 0.035888672, -0.0016479492, 0.0065917969, 0.0038452148, 0.0065917969, -0.026367187, -0.015380859, 0.0038452148, -0.015380859, -0.008972168,
+ -0.012084961, 0.016113281, 0.012084961, 0.048339844, -0.064453125, -0.048339844, 0.028198242, -0.037597656, -0.028198242, -0.013183594, 0.017578125, 0.013183594, 0.052734375, -0.0703125, -0.052734375, 0.030761719, -0.041015625, -0.030761719, 0.0032958984, -0.0043945313, -0.0032958984, -0.013183594, 0.017578125, 0.013183594, -0.0076904297, 0.010253906, 0.0076904297,
+ 0.088623047, 0.096679687, -0.024169922, -0.11816406, -0.12890625, 0.032226562, -0.088623047, -0.096679687, 0.024169922, 0.096679688, 0.10546875, -0.026367188, -0.12890625, -0.140625, 0.03515625, -0.096679687, -0.10546875, 0.026367188, -0.024169922, -0.026367187, 0.0065917969, 0.032226562, 0.03515625, -0.0087890625, 0.024169922, 0.026367187, -0.0065917969,
+ -0.012084961, 0.048339844, 0.028198242, 0.016113281, -0.064453125, -0.037597656, 0.012084961, -0.048339844, -0.028198242, -0.013183594, 0.052734375, 0.030761719, 0.017578125, -0.0703125, -0.041015625, 0.013183594, -0.052734375, -0.030761719, 0.0032958984, -0.013183594, -0.0076904297, -0.0043945312, 0.017578125, 0.010253906, -0.0032958984, 0.013183594, 0.0076904297,
+ 0.024169922, -0.032226563, -0.024169922, -0.032226562, 0.04296875, 0.032226563, -0.024169922, 0.032226563, 0.024169922, 0.026367188, -0.03515625, -0.026367188, -0.03515625, 0.046875, 0.03515625, -0.026367188, 0.03515625, 0.026367188, -0.0065917969, 0.0087890625, 0.0065917969, 0.0087890625, -0.01171875, -0.0087890625, 0.0065917969, -0.0087890625, -0.0065917969,
+ -0.044311523, -0.048339844, 0.012084961, -0.048339844, -0.052734375, 0.013183594, 0.012084961, 0.013183594, -0.0032958984, 0.17724609, 0.19335937, -0.048339844, 0.19335937, 0.2109375, -0.052734375, -0.048339844, -0.052734375, 0.013183594, 0.10339355, 0.11279297, -0.028198242, 0.11279297, 0.12304687, -0.030761719, -0.028198242, -0.030761719, 0.0076904297,
+ 0.0060424805, -0.024169922, -0.014099121, 0.0065917969, -0.026367188, -0.015380859, -0.0016479492, 0.0065917969, 0.0038452148, -0.024169922, 0.096679688, 0.056396484, -0.026367188, 0.10546875, 0.061523438, 0.0065917969, -0.026367187, -0.015380859, -0.014099121, 0.056396484, 0.032897949, -0.015380859, 0.061523438, 0.035888672, 0.0038452148, -0.015380859, -0.008972168,
+ -0.012084961, 0.016113281, 0.012084961, -0.013183594, 0.017578125, 0.013183594, 0.0032958984, -0.0043945313, -0.0032958984, 0.048339844, -0.064453125, -0.048339844, 0.052734375, -0.0703125, -0.052734375, -0.013183594, 0.017578125, 0.013183594, 0.028198242, -0.037597656, -0.028198242, 0.030761719, -0.041015625, -0.030761719, -0.0076904297, 0.010253906, 0.0076904297,
+ 0.0060424805, 0.0065917969, -0.0016479492, -0.024169922, -0.026367188, 0.0065917969, -0.014099121, -0.015380859, 0.0038452148, -0.024169922, -0.026367188, 0.0065917969, 0.096679688, 0.10546875, -0.026367187, 0.056396484, 0.061523438, -0.015380859, -0.014099121, -0.015380859, 0.0038452148, 0.056396484, 0.061523438, -0.015380859, 0.032897949, 0.035888672, -0.008972168,
+ -0.00082397461, 0.0032958984, 0.0019226074, 0.0032958984, -0.013183594, -0.0076904297, 0.0019226074, -0.0076904297, -0.004486084, 0.0032958984, -0.013183594, -0.0076904297, -0.013183594, 0.052734375, 0.030761719, -0.0076904297, 0.030761719, 0.017944336, 0.0019226074, -0.0076904297, -0.004486084, -0.0076904297, 0.030761719, 0.017944336, -0.004486084, 0.017944336, 0.010467529,
+ 0.0016479492, -0.0021972656, -0.0016479492, -0.0065917969, 0.0087890625, 0.0065917969, -0.0038452148, 0.0051269531, 0.0038452148, -0.0065917969, 0.0087890625, 0.0065917969, 0.026367188, -0.03515625, -0.026367187, 0.015380859, -0.020507812, -0.015380859, -0.0038452148, 0.0051269531, 0.0038452148, 0.015380859, -0.020507812, -0.015380859, 0.008972168, -0.011962891, -0.008972168,
+ -0.012084961, -0.013183594, 0.0032958984, 0.016113281, 0.017578125, -0.0043945312, 0.012084961, 0.013183594, -0.0032958984, 0.048339844, 0.052734375, -0.013183594, -0.064453125, -0.0703125, 0.017578125, -0.048339844, -0.052734375, 0.013183594, 0.028198242, 0.030761719, -0.0076904297, -0.037597656, -0.041015625, 0.010253906, -0.028198242, -0.030761719, 0.0076904297,
+ 0.0016479492, -0.0065917969, -0.0038452148, -0.0021972656, 0.0087890625, 0.0051269531, -0.0016479492, 0.0065917969, 0.0038452148, -0.0065917969, 0.026367188, 0.015380859, 0.0087890625, -0.03515625, -0.020507812, 0.0065917969, -0.026367187, -0.015380859, -0.0038452148, 0.015380859, 0.008972168, 0.0051269531, -0.020507812, -0.011962891, 0.0038452148, -0.015380859, -0.008972168,
+ -0.0032958984, 0.0043945313, 0.0032958984, 0.0043945313, -0.005859375, -0.0043945312, 0.0032958984, -0.0043945313, -0.0032958984, 0.013183594, -0.017578125, -0.013183594, -0.017578125, 0.0234375, 0.017578125, -0.013183594, 0.017578125, 0.013183594, 0.0076904297, -0.010253906, -0.0076904297, -0.010253906, 0.013671875, 0.010253906, -0.0076904297, 0.010253906, 0.0076904297,
+ 0.088623047, 0.096679688, -0.024169922, 0.096679688, 0.10546875, -0.026367187, -0.024169922, -0.026367187, 0.0065917969, -0.11816406, -0.12890625, 0.032226562, -0.12890625, -0.140625, 0.03515625, 0.032226563, 0.03515625, -0.0087890625, -0.088623047, -0.096679687, 0.024169922, -0.096679687, -0.10546875, 0.026367187, 0.024169922, 0.026367187, -0.0065917969,
+ -0.012084961, 0.048339844, 0.028198242, -0.013183594, 0.052734375, 0.030761719, 0.0032958984, -0.013183594, -0.0076904297, 0.016113281, -0.064453125, -0.037597656, 0.017578125, -0.0703125, -0.041015625, -0.0043945312, 0.017578125, 0.010253906, 0.012084961, -0.048339844, -0.028198242, 0.013183594, -0.052734375, -0.030761719, -0.0032958984, 0.013183594, 0.0076904297,
+ 0.024169922, -0.032226563, -0.024169922, 0.026367188, -0.03515625, -0.026367188, -0.0065917969, 0.0087890625, 0.0065917969, -0.032226563, 0.04296875, 0.032226563, -0.03515625, 0.046875, 0.03515625, 0.0087890625, -0.01171875, -0.0087890625, -0.024169922, 0.032226563, 0.024169922, -0.026367187, 0.03515625, 0.026367188, 0.0065917969, -0.0087890625, -0.0065917969,
+ -0.012084961, -0.013183594, 0.0032958984, 0.048339844, 0.052734375, -0.013183594, 0.028198242, 0.030761719, -0.0076904297, 0.016113281, 0.017578125, -0.0043945312, -0.064453125, -0.0703125, 0.017578125, -0.037597656, -0.041015625, 0.010253906, 0.012084961, 0.013183594, -0.0032958984, -0.048339844, -0.052734375, 0.013183594, -0.028198242, -0.030761719, 0.0076904297,
+ 0.0016479492, -0.0065917969, -0.0038452148, -0.0065917969, 0.026367188, 0.015380859, -0.0038452148, 0.015380859, 0.008972168, -0.0021972656, 0.0087890625, 0.0051269531, 0.0087890625, -0.03515625, -0.020507812, 0.0051269531, -0.020507812, -0.011962891, -0.0016479492, 0.0065917969, 0.0038452148, 0.0065917969, -0.026367187, -0.015380859, 0.0038452148, -0.015380859, -0.008972168,
+ -0.0032958984, 0.0043945313, 0.0032958984, 0.013183594, -0.017578125, -0.013183594, 0.0076904297, -0.010253906, -0.0076904297, 0.0043945313, -0.005859375, -0.0043945313, -0.017578125, 0.0234375, 0.017578125, -0.010253906, 0.013671875, 0.010253906, 0.0032958984, -0.0043945313, -0.0032958984, -0.013183594, 0.017578125, 0.013183594, -0.0076904297, 0.010253906, 0.0076904297,
+ 0.024169922, 0.026367187, -0.0065917969, -0.032226562, -0.03515625, 0.0087890625, -0.024169922, -0.026367187, 0.0065917969, -0.032226562, -0.03515625, 0.0087890625, 0.04296875, 0.046875, -0.01171875, 0.032226563, 0.03515625, -0.0087890625, -0.024169922, -0.026367187, 0.0065917969, 0.032226562, 0.03515625, -0.0087890625, 0.024169922, 0.026367187, -0.0065917969,
+ -0.0032958984, 0.013183594, 0.0076904297, 0.0043945312, -0.017578125, -0.010253906, 0.0032958984, -0.013183594, -0.0076904297, 0.0043945312, -0.017578125, -0.010253906, -0.005859375, 0.0234375, 0.013671875, -0.0043945312, 0.017578125, 0.010253906, 0.0032958984, -0.013183594, -0.0076904297, -0.0043945312, 0.017578125, 0.010253906, -0.0032958984, 0.013183594, 0.0076904297,
+ 0.0065917969, -0.0087890625, -0.0065917969, -0.0087890625, 0.01171875, 0.0087890625, -0.0065917969, 0.0087890625, 0.0065917969, -0.0087890625, 0.01171875, 0.0087890625, 0.01171875, -0.015625, -0.01171875, 0.0087890625, -0.01171875, -0.0087890625, -0.0065917969, 0.0087890625, 0.0065917969, 0.0087890625, -0.01171875, -0.0087890625, 0.0065917969, -0.0087890625, -0.0065917969,
+};
+
+static double dgq3_refined_onto_dgq3[] =
+{
+ 0.32495117, 0.44311523, -0.35449219, -0.029541016, 0.44311523, 0.60424805, -0.48339844, -0.040283203, -0.35449219, -0.48339844, 0.38671875, 0.032226563, -0.029541016, -0.040283203, 0.032226563, 0.0026855469, 0.44311523, 0.60424805, -0.48339844, -0.040283203, 0.60424805, 0.82397461, -0.65917969, -0.054931641, -0.48339844, -0.65917969, 0.52734375, 0.043945313, -0.040283203, -0.054931641, 0.043945312, 0.0036621094, -0.35449219, -0.48339844, 0.38671875, 0.032226563, -0.48339844, -0.65917969, 0.52734375, 0.043945312, 0.38671875, 0.52734375, -0.421875, -0.03515625, 0.032226563, 0.043945312, -0.03515625, -0.0029296875, -0.029541016, -0.040283203, 0.032226563, 0.0026855469, -0.040283203, -0.054931641, 0.043945312, 0.0036621094, 0.032226563, 0.043945312, -0.03515625, -0.0029296875, 0.0026855469, 0.0036621094, -0.0029296875, -0.00024414063,
+ -0.026258681, 0.11488173, 0.29212782, 0.05798792, -0.035807292, 0.1566569, 0.39835612, 0.079074436, 0.028645833, -0.12532552, -0.3186849, -0.063259549, 0.0023871528, -0.010443793, -0.026557075, -0.0052716291, -0.035807292, 0.1566569, 0.39835612, 0.079074436, -0.048828125, 0.21362305, 0.54321289, 0.10782878, 0.0390625, -0.17089844, -0.43457031, -0.086263021, 0.0032552083, -0.014241536, -0.036214193, -0.0071885851, 0.028645833, -0.12532552, -0.3186849, -0.063259549, 0.0390625, -0.17089844, -0.43457031, -0.086263021, -0.03125, 0.13671875, 0.34765625, 0.069010417, -0.0026041667, 0.011393229, 0.028971354, 0.0057508681, 0.0023871528, -0.010443793, -0.026557075, -0.0052716291, 0.0032552083, -0.014241536, -0.036214193, -0.0071885851, -0.0026041667, 0.011393229, 0.028971354, 0.0057508681, -0.00021701389, 0.00094943576, 0.0024142795, 0.000479239,
+ 0.016411675, -0.055799696, 0.032823351, 0.040482133, 0.022379557, -0.076090495, 0.044759115, 0.055202908, -0.017903646, 0.060872396, -0.035807292, -0.044162326, -0.0014919705, 0.0050726997, -0.002983941, -0.0036801939, 0.022379557, -0.076090495, 0.044759115, 0.055202908, 0.030517578, -0.10375977, 0.061035156, 0.075276693, -0.024414062, 0.083007812, -0.048828125, -0.060221354, -0.0020345052, 0.0069173177, -0.0040690104, -0.0050184462, -0.017903646, 0.060872396, -0.035807292, -0.044162326, -0.024414062, 0.083007812, -0.048828125, -0.060221354, 0.01953125, -0.06640625, 0.0390625, 0.048177083, 0.0016276042, -0.0055338542, 0.0032552083, 0.0040147569, -0.0014919705, 0.0050726997, -0.002983941, -0.0036801939, -0.0020345052, 0.0069173177, -0.0040690104, -0.0050184462, 0.0016276042, -0.0055338542, 0.0032552083, 0.0040147569, 0.00013563368, -0.00046115451, 0.00027126736, 0.00033456308,
+ -0.059082031, 0.088623047, 0.088623047, -0.029541016, -0.080566406, 0.12084961, 0.12084961, -0.040283203, 0.064453125, -0.096679688, -0.096679688, 0.032226562, 0.0053710937, -0.0080566406, -0.0080566406, 0.0026855469, -0.080566406, 0.12084961, 0.12084961, -0.040283203, -0.10986328, 0.16479492, 0.16479492, -0.054931641, 0.087890625, -0.13183594, -0.13183594, 0.043945312, 0.0073242187, -0.010986328, -0.010986328, 0.0036621094, 0.064453125, -0.096679688, -0.096679688, 0.032226562, 0.087890625, -0.13183594, -0.13183594, 0.043945312, -0.0703125, 0.10546875, 0.10546875, -0.03515625, -0.005859375, 0.0087890625, 0.0087890625, -0.0029296875, 0.0053710937, -0.0080566406, -0.0080566406, 0.0026855469, 0.0073242187, -0.010986328, -0.010986328, 0.0036621094, -0.005859375, 0.0087890625, 0.0087890625, -0.0029296875, -0.00048828125, 0.00073242188, 0.00073242188, -0.00024414062,
+ -0.026258681, -0.035807292, 0.028645833, 0.0023871528, 0.11488173, 0.1566569, -0.12532552, -0.010443793, 0.29212782, 0.39835612, -0.3186849, -0.026557075, 0.05798792, 0.079074436, -0.063259549, -0.0052716291, -0.035807292, -0.048828125, 0.0390625, 0.0032552083, 0.1566569, 0.21362305, -0.17089844, -0.014241536, 0.39835612, 0.54321289, -0.43457031, -0.036214193, 0.079074436, 0.10782878, -0.086263021, -0.0071885851, 0.028645833, 0.0390625, -0.03125, -0.0026041667, -0.12532552, -0.17089844, 0.13671875, 0.011393229, -0.3186849, -0.43457031, 0.34765625, 0.028971354, -0.063259549, -0.086263021, 0.069010417, 0.0057508681, 0.0023871528, 0.0032552083, -0.0026041667, -0.00021701389, -0.010443793, -0.014241536, 0.011393229, 0.00094943576, -0.026557075, -0.036214193, 0.028971354, 0.0024142795, -0.0052716291, -0.0071885851, 0.0057508681, 0.000479239,
+ 0.0021219136, -0.0092833719, -0.023606289, -0.0046858925, -0.0092833719, 0.040614752, 0.10327751, 0.02050078, -0.023606289, 0.10327751, 0.26261996, 0.052130554, -0.0046858925, 0.02050078, 0.052130554, 0.010348013, 0.0028935185, -0.012659144, -0.032190394, -0.0063898534, -0.012659144, 0.055383753, 0.14083297, 0.027955609, -0.032190394, 0.14083297, 0.35811813, 0.071087119, -0.0063898534, 0.027955609, 0.071087119, 0.014110926, -0.0023148148, 0.010127315, 0.025752315, 0.0051118827, 0.010127315, -0.044307002, -0.11266638, -0.022364487, 0.025752315, -0.11266638, -0.2864945, -0.056869695, 0.0051118827, -0.022364487, -0.056869695, -0.011288741, -0.00019290123, 0.0008439429, 0.0021460262, 0.00042599023, 0.0008439429, -0.0036922502, -0.0093888648, -0.0018637072, 0.0021460262, -0.0093888648, -0.023874542, -0.0047391413, 0.00042599023, -0.0018637072, -0.0047391413, -0.00094072842,
+ -0.001326196, 0.0045090664, -0.002652392, -0.0032712834, 0.0058021074, -0.019727165, 0.011604215, 0.014311865, 0.01475393, -0.050163363, 0.029507861, 0.036393028, 0.0029286828, -0.0099575215, 0.0058573656, 0.0072240843, -0.0018084491, 0.0061487269, -0.0036168981, -0.004460841, 0.0079119647, -0.02690068, 0.015823929, 0.01951618, 0.020118996, -0.068404586, 0.040237992, 0.049626857, 0.0039936584, -0.013578438, 0.0079873167, 0.009851024, 0.0014467593, -0.0049189815, 0.0028935185, 0.0035686728, -0.0063295718, 0.021520544, -0.012659144, -0.015612944, -0.016095197, 0.054723669, -0.032190394, -0.039701485, -0.0031949267, 0.010862751, -0.0063898534, -0.0078808192, 0.00012056327, -0.00040991512, 0.00024112654, 0.0002973894, -0.00052746431, 0.0017933787, -0.0010549286, -0.0013010786, -0.0013412664, 0.0045603057, -0.0026825328, -0.0033084571, -0.00026624389, 0.00090522923, -0.00053248778, -0.00065673493,
+ 0.0047743056, -0.0071614583, -0.0071614583, 0.0023871528, -0.020887587, 0.03133138, 0.03133138, -0.010443793, -0.053114149, 0.079671224, 0.079671224, -0.026557075, -0.010543258, 0.015814887, 0.015814887, -0.0052716291, 0.0065104167, -0.009765625, -0.009765625, 0.0032552083, -0.028483073, 0.042724609, 0.042724609, -0.014241536, -0.072428385, 0.10864258, 0.10864258, -0.036214193, -0.01437717, 0.021565755, 0.021565755, -0.0071885851, -0.0052083333, 0.0078125, 0.0078125, -0.0026041667, 0.022786458, -0.034179688, -0.034179688, 0.011393229, 0.057942708, -0.086914063, -0.086914063, 0.028971354, 0.011501736, -0.017252604, -0.017252604, 0.0057508681, -0.00043402778, 0.00065104167, 0.00065104167, -0.00021701389, 0.0018988715, -0.0028483073, -0.0028483073, 0.00094943576, 0.004828559, -0.0072428385, -0.0072428385, 0.0024142795, 0.00095847801, -0.001437717, -0.001437717, 0.000479239,
+ 0.016411675, 0.022379557, -0.017903646, -0.0014919705, -0.055799696, -0.076090495, 0.060872396, 0.0050726997, 0.032823351, 0.044759115, -0.035807292, -0.002983941, 0.040482133, 0.055202908, -0.044162326, -0.0036801939, 0.022379557, 0.030517578, -0.024414062, -0.0020345052, -0.076090495, -0.10375977, 0.083007813, 0.0069173177, 0.044759115, 0.061035156, -0.048828125, -0.0040690104, 0.055202908, 0.075276693, -0.060221354, -0.0050184462, -0.017903646, -0.024414063, 0.01953125, 0.0016276042, 0.060872396, 0.083007812, -0.06640625, -0.0055338542, -0.035807292, -0.048828125, 0.0390625, 0.0032552083, -0.044162326, -0.060221354, 0.048177083, 0.0040147569, -0.0014919705, -0.0020345052, 0.0016276042, 0.00013563368, 0.0050726997, 0.0069173177, -0.0055338542, -0.00046115451, -0.002983941, -0.0040690104, 0.0032552083, 0.00027126736, -0.0036801939, -0.0050184462, 0.0040147569, 0.00033456308,
+ -0.001326196, 0.0058021074, 0.01475393, 0.0029286828, 0.0045090664, -0.019727165, -0.050163363, -0.0099575215, -0.002652392, 0.011604215, 0.029507861, 0.0058573656, -0.0032712834, 0.014311865, 0.036393028, 0.0072240843, -0.0018084491, 0.0079119647, 0.020118996, 0.0039936584, 0.0061487269, -0.02690068, -0.068404586, -0.013578438, -0.0036168981, 0.015823929, 0.040237992, 0.0079873167, -0.004460841, 0.01951618, 0.049626857, 0.009851024, 0.0014467593, -0.0063295718, -0.016095197, -0.0031949267, -0.0049189815, 0.021520544, 0.054723669, 0.010862751, 0.0028935185, -0.012659144, -0.032190394, -0.0063898534, 0.0035686728, -0.015612944, -0.039701485, -0.0078808192, 0.00012056327, -0.00052746431, -0.0013412664, -0.00026624389, -0.00040991512, 0.0017933787, 0.0045603057, 0.00090522923, 0.00024112654, -0.0010549286, -0.0026825328, -0.00053248778, 0.0002973894, -0.0013010786, -0.0033084571, -0.00065673493,
+ 0.00082887249, -0.0028181665, 0.001657745, 0.0020445521, -0.0028181665, 0.009581766, -0.0056363329, -0.0069514773, 0.001657745, -0.0056363329, 0.00331549, 0.0040891043, 0.0020445521, -0.0069514773, 0.0040891043, 0.0050432286, 0.0011302807, -0.0038429543, 0.0022605613, 0.0027880257, -0.0038429543, 0.013066045, -0.0076859086, -0.0094792872, 0.0022605613, -0.0076859086, 0.0045211227, 0.0055760513, 0.0027880257, -0.0094792872, 0.0055760513, 0.00687713, -0.00090422454, 0.0030743634, -0.0018084491, -0.0022304205, 0.0030743634, -0.010452836, 0.0061487269, 0.0075834298, -0.0018084491, 0.0061487269, -0.0036168981, -0.004460841, -0.0022304205, 0.0075834298, -0.004460841, -0.005501704, -7.5352045e-05, 0.00025619695, -0.00015070409, -0.00018586838, 0.00025619695, -0.00087106964, 0.0005123939, 0.00063195248, -0.00015070409, 0.0005123939, -0.00030140818, -0.00037173675, -0.00018586838, 0.00063195248, -0.00037173675, -0.00045847533,
+ -0.002983941, 0.0044759115, 0.0044759115, -0.0014919705, 0.010145399, -0.015218099, -0.015218099, 0.0050726997, -0.0059678819, 0.0089518229, 0.0089518229, -0.002983941, -0.0073603877, 0.011040582, 0.011040582, -0.0036801939, -0.0040690104, 0.0061035156, 0.0061035156, -0.0020345052, 0.013834635, -0.020751953, -0.020751953, 0.0069173177, -0.0081380208, 0.012207031, 0.012207031, -0.0040690104, -0.010036892, 0.015055339, 0.015055339, -0.0050184462, 0.0032552083, -0.0048828125, -0.0048828125, 0.0016276042, -0.011067708, 0.016601563, 0.016601563, -0.0055338542, 0.0065104167, -0.009765625, -0.009765625, 0.0032552083, 0.0080295139, -0.012044271, -0.012044271, 0.0040147569, 0.00027126736, -0.00040690104, -0.00040690104, 0.00013563368, -0.00092230903, 0.0013834635, 0.0013834635, -0.00046115451, 0.00054253472, -0.00081380208, -0.00081380208, 0.00027126736, 0.00066912616, -0.0010036892, -0.0010036892, 0.00033456308,
+ -0.059082031, -0.080566406, 0.064453125, 0.0053710938, 0.088623047, 0.12084961, -0.096679687, -0.0080566406, 0.088623047, 0.12084961, -0.096679688, -0.0080566406, -0.029541016, -0.040283203, 0.032226563, 0.0026855469, -0.080566406, -0.10986328, 0.087890625, 0.0073242188, 0.12084961, 0.16479492, -0.13183594, -0.010986328, 0.12084961, 0.16479492, -0.13183594, -0.010986328, -0.040283203, -0.054931641, 0.043945312, 0.0036621094, 0.064453125, 0.087890625, -0.0703125, -0.005859375, -0.096679688, -0.13183594, 0.10546875, 0.0087890625, -0.096679688, -0.13183594, 0.10546875, 0.0087890625, 0.032226563, 0.043945313, -0.03515625, -0.0029296875, 0.0053710938, 0.0073242187, -0.005859375, -0.00048828125, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, 0.0026855469, 0.0036621094, -0.0029296875, -0.00024414063,
+ 0.0047743056, -0.020887587, -0.053114149, -0.010543258, -0.0071614583, 0.03133138, 0.079671224, 0.015814887, -0.0071614583, 0.03133138, 0.079671224, 0.015814887, 0.0023871528, -0.010443793, -0.026557075, -0.0052716291, 0.0065104167, -0.028483073, -0.072428385, -0.01437717, -0.009765625, 0.042724609, 0.10864258, 0.021565755, -0.009765625, 0.042724609, 0.10864258, 0.021565755, 0.0032552083, -0.014241536, -0.036214193, -0.0071885851, -0.0052083333, 0.022786458, 0.057942708, 0.011501736, 0.0078125, -0.034179688, -0.086914063, -0.017252604, 0.0078125, -0.034179688, -0.086914063, -0.017252604, -0.0026041667, 0.011393229, 0.028971354, 0.0057508681, -0.00043402778, 0.0018988715, 0.004828559, 0.00095847801, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, -0.00021701389, 0.00094943576, 0.0024142795, 0.000479239,
+ -0.002983941, 0.010145399, -0.0059678819, -0.0073603877, 0.0044759115, -0.015218099, 0.0089518229, 0.011040582, 0.0044759115, -0.015218099, 0.0089518229, 0.011040582, -0.0014919705, 0.0050726997, -0.002983941, -0.0036801939, -0.0040690104, 0.013834635, -0.0081380208, -0.010036892, 0.0061035156, -0.020751953, 0.012207031, 0.015055339, 0.0061035156, -0.020751953, 0.012207031, 0.015055339, -0.0020345052, 0.0069173177, -0.0040690104, -0.0050184462, 0.0032552083, -0.011067708, 0.0065104167, 0.0080295139, -0.0048828125, 0.016601563, -0.009765625, -0.012044271, -0.0048828125, 0.016601562, -0.009765625, -0.012044271, 0.0016276042, -0.0055338542, 0.0032552083, 0.0040147569, 0.00027126736, -0.00092230903, 0.00054253472, 0.00066912616, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, 0.00013563368, -0.00046115451, 0.00027126736, 0.00033456308,
+ 0.010742188, -0.016113281, -0.016113281, 0.0053710937, -0.016113281, 0.024169922, 0.024169922, -0.0080566406, -0.016113281, 0.024169922, 0.024169922, -0.0080566406, 0.0053710937, -0.0080566406, -0.0080566406, 0.0026855469, 0.014648438, -0.021972656, -0.021972656, 0.0073242187, -0.021972656, 0.032958984, 0.032958984, -0.010986328, -0.021972656, 0.032958984, 0.032958984, -0.010986328, 0.0073242187, -0.010986328, -0.010986328, 0.0036621094, -0.01171875, 0.017578125, 0.017578125, -0.005859375, 0.017578125, -0.026367188, -0.026367187, 0.0087890625, 0.017578125, -0.026367187, -0.026367188, 0.0087890625, -0.005859375, 0.0087890625, 0.0087890625, -0.0029296875, -0.0009765625, 0.0014648437, 0.0014648438, -0.00048828125, 0.0014648437, -0.0021972656, -0.0021972656, 0.00073242187, 0.0014648438, -0.0021972656, -0.0021972656, 0.00073242187, -0.00048828125, 0.00073242188, 0.00073242188, -0.00024414062,
+ -0.026258681, -0.035807292, 0.028645833, 0.0023871528, -0.035807292, -0.048828125, 0.0390625, 0.0032552083, 0.028645833, 0.0390625, -0.03125, -0.0026041667, 0.0023871528, 0.0032552083, -0.0026041667, -0.00021701389, 0.11488173, 0.1566569, -0.12532552, -0.010443793, 0.1566569, 0.21362305, -0.17089844, -0.014241536, -0.12532552, -0.17089844, 0.13671875, 0.011393229, -0.010443793, -0.014241536, 0.011393229, 0.00094943576, 0.29212782, 0.39835612, -0.3186849, -0.026557075, 0.39835612, 0.54321289, -0.43457031, -0.036214193, -0.3186849, -0.43457031, 0.34765625, 0.028971354, -0.026557075, -0.036214193, 0.028971354, 0.0024142795, 0.05798792, 0.079074436, -0.063259549, -0.0052716291, 0.079074436, 0.10782878, -0.086263021, -0.0071885851, -0.063259549, -0.086263021, 0.069010417, 0.0057508681, -0.0052716291, -0.0071885851, 0.0057508681, 0.000479239,
+ 0.0021219136, -0.0092833719, -0.023606289, -0.0046858925, 0.0028935185, -0.012659144, -0.032190394, -0.0063898534, -0.0023148148, 0.010127315, 0.025752315, 0.0051118827, -0.00019290123, 0.0008439429, 0.0021460262, 0.00042599023, -0.0092833719, 0.040614752, 0.10327751, 0.02050078, -0.012659144, 0.055383753, 0.14083297, 0.027955609, 0.010127315, -0.044307002, -0.11266638, -0.022364487, 0.0008439429, -0.0036922502, -0.0093888648, -0.0018637072, -0.023606289, 0.10327751, 0.26261996, 0.052130554, -0.032190394, 0.14083297, 0.35811813, 0.071087119, 0.025752315, -0.11266638, -0.2864945, -0.056869695, 0.0021460262, -0.0093888648, -0.023874542, -0.0047391413, -0.0046858925, 0.02050078, 0.052130554, 0.010348013, -0.0063898534, 0.027955609, 0.071087119, 0.014110926, 0.0051118827, -0.022364487, -0.056869695, -0.011288741, 0.00042599023, -0.0018637072, -0.0047391413, -0.00094072842,
+ -0.001326196, 0.0045090664, -0.002652392, -0.0032712834, -0.0018084491, 0.0061487269, -0.0036168981, -0.004460841, 0.0014467593, -0.0049189815, 0.0028935185, 0.0035686728, 0.00012056327, -0.00040991512, 0.00024112654, 0.0002973894, 0.0058021074, -0.019727165, 0.011604215, 0.014311865, 0.0079119647, -0.02690068, 0.015823929, 0.01951618, -0.0063295718, 0.021520544, -0.012659144, -0.015612944, -0.00052746431, 0.0017933787, -0.0010549286, -0.0013010786, 0.01475393, -0.050163363, 0.029507861, 0.036393028, 0.020118996, -0.068404586, 0.040237992, 0.049626857, -0.016095197, 0.054723669, -0.032190394, -0.039701485, -0.0013412664, 0.0045603057, -0.0026825328, -0.0033084571, 0.0029286828, -0.0099575215, 0.0058573656, 0.0072240843, 0.0039936584, -0.013578438, 0.0079873167, 0.009851024, -0.0031949267, 0.010862751, -0.0063898534, -0.0078808192, -0.00026624389, 0.00090522923, -0.00053248778, -0.00065673493,
+ 0.0047743056, -0.0071614583, -0.0071614583, 0.0023871528, 0.0065104167, -0.009765625, -0.009765625, 0.0032552083, -0.0052083333, 0.0078125, 0.0078125, -0.0026041667, -0.00043402778, 0.00065104167, 0.00065104167, -0.00021701389, -0.020887587, 0.03133138, 0.03133138, -0.010443793, -0.028483073, 0.042724609, 0.042724609, -0.014241536, 0.022786458, -0.034179688, -0.034179688, 0.011393229, 0.0018988715, -0.0028483073, -0.0028483073, 0.00094943576, -0.053114149, 0.079671224, 0.079671224, -0.026557075, -0.072428385, 0.10864258, 0.10864258, -0.036214193, 0.057942708, -0.086914063, -0.086914063, 0.028971354, 0.004828559, -0.0072428385, -0.0072428385, 0.0024142795, -0.010543258, 0.015814887, 0.015814887, -0.0052716291, -0.01437717, 0.021565755, 0.021565755, -0.0071885851, 0.011501736, -0.017252604, -0.017252604, 0.0057508681, 0.00095847801, -0.001437717, -0.001437717, 0.000479239,
+ 0.0021219136, 0.0028935185, -0.0023148148, -0.00019290123, -0.0092833719, -0.012659144, 0.010127315, 0.0008439429, -0.023606289, -0.032190394, 0.025752315, 0.0021460262, -0.0046858925, -0.0063898534, 0.0051118827, 0.00042599023, -0.0092833719, -0.012659144, 0.010127315, 0.0008439429, 0.040614752, 0.055383753, -0.044307002, -0.0036922502, 0.10327751, 0.14083297, -0.11266638, -0.0093888648, 0.02050078, 0.027955609, -0.022364487, -0.0018637072, -0.023606289, -0.032190394, 0.025752315, 0.0021460262, 0.10327751, 0.14083297, -0.11266638, -0.0093888648, 0.26261996, 0.35811813, -0.2864945, -0.023874542, 0.052130554, 0.071087119, -0.056869695, -0.0047391413, -0.0046858925, -0.0063898534, 0.0051118827, 0.00042599023, 0.02050078, 0.027955609, -0.022364487, -0.0018637072, 0.052130554, 0.071087119, -0.056869695, -0.0047391413, 0.010348013, 0.014110926, -0.011288741, -0.00094072842,
+ -0.00017146776, 0.00075017147, 0.0019075789, 0.00037865798, 0.00075017147, -0.0032820002, -0.0083456576, -0.0016566287, 0.0019075789, -0.0083456576, -0.021221815, -0.00421257, 0.00037865798, -0.0016566287, -0.00421257, -0.00083620304, 0.00075017147, -0.0032820002, -0.0083456576, -0.0016566287, -0.0032820002, 0.014358751, 0.036512252, 0.0072477504, -0.0083456576, 0.036512252, 0.092845441, 0.018429994, -0.0016566287, 0.0072477504, 0.018429994, 0.0036583883, 0.0019075789, -0.0083456576, -0.021221815, -0.00421257, -0.0083456576, 0.036512252, 0.092845441, 0.018429994, -0.021221815, 0.092845441, 0.23609269, 0.046864841, -0.00421257, 0.018429994, 0.046864841, 0.0093027588, 0.00037865798, -0.0016566287, -0.00421257, -0.00083620304, -0.0016566287, 0.0072477504, 0.018429994, 0.0036583883, -0.00421257, 0.018429994, 0.046864841, 0.0093027588, -0.00083620304, 0.0036583883, 0.0093027588, 0.001846615,
+ 0.00010716735, -0.000364369, 0.00021433471, 0.00026434614, -0.00046885717, 0.0015941144, -0.00093771433, -0.0011565143, -0.0011922368, 0.0040536051, -0.0023844736, -0.0029408508, -0.00023666124, 0.00080464821, -0.00047332247, -0.00058376438, -0.00046885717, 0.0015941144, -0.00093771433, -0.0011565143, 0.0020512501, -0.0069742504, 0.0041025002, 0.0050597503, 0.005216036, -0.017734522, 0.010432072, 0.012866222, 0.0010353929, -0.0035203359, 0.0020707858, 0.0025539692, -0.0011922368, 0.0040536051, -0.0023844736, -0.0029408508, 0.005216036, -0.017734522, 0.010432072, 0.012866222, 0.013263634, -0.045096357, 0.026527269, 0.032716965, 0.0026328563, -0.0089517113, 0.0052657125, 0.0064943788, -0.00023666124, 0.00080464821, -0.00047332247, -0.00058376438, 0.0010353929, -0.0035203359, 0.0020707858, 0.0025539692, 0.0026328563, -0.0089517113, 0.0052657125, 0.0064943788, 0.0005226269, -0.0017769315, 0.0010452538, 0.0012891463,
+ -0.00038580247, 0.0005787037, 0.0005787037, -0.00019290123, 0.0016878858, -0.0025318287, -0.0025318287, 0.0008439429, 0.0042920525, -0.0064380787, -0.0064380787, 0.0021460262, 0.00085198045, -0.0012779707, -0.0012779707, 0.00042599023, 0.0016878858, -0.0025318287, -0.0025318287, 0.0008439429, -0.0073845004, 0.011076751, 0.011076751, -0.0036922502, -0.01877773, 0.028166594, 0.028166594, -0.0093888648, -0.0037274145, 0.0055911217, 0.0055911217, -0.0018637072, 0.0042920525, -0.0064380787, -0.0064380787, 0.0021460262, -0.01877773, 0.028166594, 0.028166594, -0.0093888648, -0.047749084, 0.071623626, 0.071623626, -0.023874542, -0.0094782825, 0.014217424, 0.014217424, -0.0047391413, 0.00085198045, -0.0012779707, -0.0012779707, 0.00042599023, -0.0037274145, 0.0055911217, 0.0055911217, -0.0018637072, -0.0094782825, 0.014217424, 0.014217424, -0.0047391413, -0.0018814568, 0.0028221852, 0.0028221852, -0.00094072842,
+ -0.001326196, -0.0018084491, 0.0014467593, 0.00012056327, 0.0045090664, 0.0061487269, -0.0049189815, -0.00040991512, -0.002652392, -0.0036168981, 0.0028935185, 0.00024112654, -0.0032712834, -0.004460841, 0.0035686728, 0.0002973894, 0.0058021074, 0.0079119647, -0.0063295718, -0.00052746431, -0.019727165, -0.02690068, 0.021520544, 0.0017933787, 0.011604215, 0.015823929, -0.012659144, -0.0010549286, 0.014311865, 0.01951618, -0.015612944, -0.0013010786, 0.01475393, 0.020118996, -0.016095197, -0.0013412664, -0.050163363, -0.068404586, 0.054723669, 0.0045603057, 0.029507861, 0.040237992, -0.032190394, -0.0026825328, 0.036393028, 0.049626857, -0.039701485, -0.0033084571, 0.0029286828, 0.0039936584, -0.0031949267, -0.00026624389, -0.0099575215, -0.013578438, 0.010862751, 0.00090522923, 0.0058573656, 0.0079873167, -0.0063898534, -0.00053248778, 0.0072240843, 0.009851024, -0.0078808192, -0.00065673493,
+ 0.00010716735, -0.00046885717, -0.0011922368, -0.00023666124, -0.000364369, 0.0015941144, 0.0040536051, 0.00080464821, 0.00021433471, -0.00093771433, -0.0023844736, -0.00047332247, 0.00026434614, -0.0011565143, -0.0029408508, -0.00058376438, -0.00046885717, 0.0020512501, 0.005216036, 0.0010353929, 0.0015941144, -0.0069742504, -0.017734522, -0.0035203359, -0.00093771433, 0.0041025002, 0.010432072, 0.0020707858, -0.0011565143, 0.0050597503, 0.012866222, 0.0025539692, -0.0011922368, 0.005216036, 0.013263634, 0.0026328563, 0.0040536051, -0.017734522, -0.045096357, -0.0089517113, -0.0023844736, 0.010432072, 0.026527269, 0.0052657125, -0.0029408508, 0.012866222, 0.032716965, 0.0064943788, -0.00023666124, 0.0010353929, 0.0026328563, 0.0005226269, 0.00080464821, -0.0035203359, -0.0089517113, -0.0017769315, -0.00047332247, 0.0020707858, 0.0052657125, 0.0010452538, -0.00058376438, 0.0025539692, 0.0064943788, 0.0012891463,
+ -6.6979595e-05, 0.00022773062, -0.00013395919, -0.00016521634, 0.00022773062, -0.00077428412, 0.00045546125, 0.00056173554, -0.00013395919, 0.00045546125, -0.00026791838, -0.00033043267, -0.00016521634, 0.00056173554, -0.00033043267, -0.00040753363, 0.00029303573, -0.00099632148, 0.00058607146, 0.00072282147, -0.00099632148, 0.003387493, -0.001992643, -0.002457593, 0.00058607146, -0.001992643, 0.0011721429, 0.0014456429, 0.00072282147, -0.002457593, 0.0014456429, 0.0017829596, 0.000745148, -0.0025335032, 0.001490296, 0.0018380317, -0.0025335032, 0.0086139109, -0.0050670064, -0.0062493079, 0.001490296, -0.0050670064, 0.002980592, 0.0036760635, 0.0018380317, -0.0062493079, 0.0036760635, 0.0045338116, 0.00014791327, -0.00050290513, 0.00029582655, 0.00036485274, -0.00050290513, 0.0017098774, -0.0010058103, -0.0012404993, 0.00029582655, -0.0010058103, 0.00059165309, 0.00072970548, 0.00036485274, -0.0012404993, 0.00072970548, 0.00089997009,
+ 0.00024112654, -0.00036168981, -0.00036168981, 0.00012056327, -0.00081983025, 0.0012297454, 0.0012297454, -0.00040991512, 0.00048225309, -0.00072337963, -0.00072337963, 0.00024112654, 0.00059477881, -0.00089216821, -0.00089216821, 0.0002973894, -0.0010549286, 0.0015823929, 0.0015823929, -0.00052746431, 0.0035867573, -0.005380136, -0.005380136, 0.0017933787, -0.0021098573, 0.0031647859, 0.0031647859, -0.0010549286, -0.0026021573, 0.0039032359, 0.0039032359, -0.0013010786, -0.0026825328, 0.0040237992, 0.0040237992, -0.0013412664, 0.0091206115, -0.013680917, -0.013680917, 0.0045603057, -0.0053650656, 0.0080475984, 0.0080475984, -0.0026825328, -0.0066169142, 0.0099253713, 0.0099253713, -0.0033084571, -0.00053248778, 0.00079873167, 0.00079873167, -0.00026624389, 0.0018104585, -0.0027156877, -0.0027156877, 0.00090522923, -0.0010649756, 0.0015974633, 0.0015974633, -0.00053248778, -0.0013134699, 0.0019702048, 0.0019702048, -0.00065673493,
+ 0.0047743056, 0.0065104167, -0.0052083333, -0.00043402778, -0.0071614583, -0.009765625, 0.0078125, 0.00065104167, -0.0071614583, -0.009765625, 0.0078125, 0.00065104167, 0.0023871528, 0.0032552083, -0.0026041667, -0.00021701389, -0.020887587, -0.028483073, 0.022786458, 0.0018988715, 0.03133138, 0.042724609, -0.034179688, -0.0028483073, 0.03133138, 0.042724609, -0.034179688, -0.0028483073, -0.010443793, -0.014241536, 0.011393229, 0.00094943576, -0.053114149, -0.072428385, 0.057942708, 0.004828559, 0.079671224, 0.10864258, -0.086914063, -0.0072428385, 0.079671224, 0.10864258, -0.086914063, -0.0072428385, -0.026557075, -0.036214193, 0.028971354, 0.0024142795, -0.010543258, -0.01437717, 0.011501736, 0.00095847801, 0.015814887, 0.021565755, -0.017252604, -0.001437717, 0.015814887, 0.021565755, -0.017252604, -0.001437717, -0.0052716291, -0.0071885851, 0.0057508681, 0.000479239,
+ -0.00038580247, 0.0016878858, 0.0042920525, 0.00085198045, 0.0005787037, -0.0025318287, -0.0064380787, -0.0012779707, 0.0005787037, -0.0025318287, -0.0064380787, -0.0012779707, -0.00019290123, 0.0008439429, 0.0021460262, 0.00042599023, 0.0016878858, -0.0073845004, -0.01877773, -0.0037274145, -0.0025318287, 0.011076751, 0.028166594, 0.0055911217, -0.0025318287, 0.011076751, 0.028166594, 0.0055911217, 0.0008439429, -0.0036922502, -0.0093888648, -0.0018637072, 0.0042920525, -0.01877773, -0.047749084, -0.0094782825, -0.0064380787, 0.028166594, 0.071623626, 0.014217424, -0.0064380787, 0.028166594, 0.071623626, 0.014217424, 0.0021460262, -0.0093888648, -0.023874542, -0.0047391413, 0.00085198045, -0.0037274145, -0.0094782825, -0.0018814568, -0.0012779707, 0.0055911217, 0.014217424, 0.0028221852, -0.0012779707, 0.0055911217, 0.014217424, 0.0028221852, 0.00042599023, -0.0018637072, -0.0047391413, -0.00094072842,
+ 0.00024112654, -0.00081983025, 0.00048225309, 0.00059477881, -0.00036168981, 0.0012297454, -0.00072337963, -0.00089216821, -0.00036168981, 0.0012297454, -0.00072337963, -0.00089216821, 0.00012056327, -0.00040991512, 0.00024112654, 0.0002973894, -0.0010549286, 0.0035867573, -0.0021098573, -0.0026021573, 0.0015823929, -0.005380136, 0.0031647859, 0.0039032359, 0.0015823929, -0.005380136, 0.0031647859, 0.0039032359, -0.00052746431, 0.0017933787, -0.0010549286, -0.0013010786, -0.0026825328, 0.0091206115, -0.0053650656, -0.0066169142, 0.0040237992, -0.013680917, 0.0080475984, 0.0099253713, 0.0040237992, -0.013680917, 0.0080475984, 0.0099253713, -0.0013412664, 0.0045603057, -0.0026825328, -0.0033084571, -0.00053248778, 0.0018104585, -0.0010649756, -0.0013134699, 0.00079873167, -0.0027156877, 0.0015974633, 0.0019702048, 0.00079873167, -0.0027156877, 0.0015974633, 0.0019702048, -0.00026624389, 0.00090522923, -0.00053248778, -0.00065673493,
+ -0.00086805556, 0.0013020833, 0.0013020833, -0.00043402778, 0.0013020833, -0.001953125, -0.001953125, 0.00065104167, 0.0013020833, -0.001953125, -0.001953125, 0.00065104167, -0.00043402778, 0.00065104167, 0.00065104167, -0.00021701389, 0.0037977431, -0.0056966146, -0.0056966146, 0.0018988715, -0.0056966146, 0.0085449219, 0.0085449219, -0.0028483073, -0.0056966146, 0.0085449219, 0.0085449219, -0.0028483073, 0.0018988715, -0.0028483073, -0.0028483073, 0.00094943576, 0.0096571181, -0.014485677, -0.014485677, 0.004828559, -0.014485677, 0.021728516, 0.021728516, -0.0072428385, -0.014485677, 0.021728516, 0.021728516, -0.0072428385, 0.004828559, -0.0072428385, -0.0072428385, 0.0024142795, 0.001916956, -0.002875434, -0.002875434, 0.00095847801, -0.002875434, 0.004313151, 0.004313151, -0.001437717, -0.002875434, 0.004313151, 0.004313151, -0.001437717, 0.00095847801, -0.001437717, -0.001437717, 0.000479239,
+ 0.016411675, 0.022379557, -0.017903646, -0.0014919705, 0.022379557, 0.030517578, -0.024414062, -0.0020345052, -0.017903646, -0.024414063, 0.01953125, 0.0016276042, -0.0014919705, -0.0020345052, 0.0016276042, 0.00013563368, -0.055799696, -0.076090495, 0.060872396, 0.0050726997, -0.076090495, -0.10375977, 0.083007813, 0.0069173177, 0.060872396, 0.083007813, -0.06640625, -0.0055338542, 0.0050726997, 0.0069173177, -0.0055338542, -0.00046115451, 0.032823351, 0.044759115, -0.035807292, -0.002983941, 0.044759115, 0.061035156, -0.048828125, -0.0040690104, -0.035807292, -0.048828125, 0.0390625, 0.0032552083, -0.002983941, -0.0040690104, 0.0032552083, 0.00027126736, 0.040482133, 0.055202908, -0.044162326, -0.0036801939, 0.055202908, 0.075276693, -0.060221354, -0.0050184462, -0.044162326, -0.060221354, 0.048177083, 0.0040147569, -0.0036801939, -0.0050184462, 0.0040147569, 0.00033456308,
+ -0.001326196, 0.0058021074, 0.01475393, 0.0029286828, -0.0018084491, 0.0079119647, 0.020118996, 0.0039936584, 0.0014467593, -0.0063295718, -0.016095197, -0.0031949267, 0.00012056327, -0.00052746431, -0.0013412664, -0.00026624389, 0.0045090664, -0.019727165, -0.050163363, -0.0099575215, 0.0061487269, -0.02690068, -0.068404586, -0.013578438, -0.0049189815, 0.021520544, 0.054723669, 0.010862751, -0.00040991512, 0.0017933787, 0.0045603057, 0.00090522923, -0.002652392, 0.011604215, 0.029507861, 0.0058573656, -0.0036168981, 0.015823929, 0.040237992, 0.0079873167, 0.0028935185, -0.012659144, -0.032190394, -0.0063898534, 0.00024112654, -0.0010549286, -0.0026825328, -0.00053248778, -0.0032712834, 0.014311865, 0.036393028, 0.0072240843, -0.004460841, 0.01951618, 0.049626857, 0.009851024, 0.0035686728, -0.015612944, -0.039701485, -0.0078808192, 0.0002973894, -0.0013010786, -0.0033084571, -0.00065673493,
+ 0.00082887249, -0.0028181665, 0.001657745, 0.0020445521, 0.0011302807, -0.0038429543, 0.0022605613, 0.0027880257, -0.00090422454, 0.0030743634, -0.0018084491, -0.0022304205, -7.5352045e-05, 0.00025619695, -0.00015070409, -0.00018586838, -0.0028181665, 0.009581766, -0.0056363329, -0.0069514773, -0.0038429543, 0.013066045, -0.0076859086, -0.0094792872, 0.0030743634, -0.010452836, 0.0061487269, 0.0075834298, 0.00025619695, -0.00087106964, 0.0005123939, 0.00063195248, 0.001657745, -0.0056363329, 0.00331549, 0.0040891043, 0.0022605613, -0.0076859086, 0.0045211227, 0.0055760513, -0.0018084491, 0.0061487269, -0.0036168981, -0.004460841, -0.00015070409, 0.0005123939, -0.00030140818, -0.00037173675, 0.0020445521, -0.0069514773, 0.0040891043, 0.0050432286, 0.0027880257, -0.0094792872, 0.0055760513, 0.00687713, -0.0022304205, 0.0075834298, -0.004460841, -0.005501704, -0.00018586838, 0.00063195248, -0.00037173675, -0.00045847533,
+ -0.002983941, 0.0044759115, 0.0044759115, -0.0014919705, -0.0040690104, 0.0061035156, 0.0061035156, -0.0020345052, 0.0032552083, -0.0048828125, -0.0048828125, 0.0016276042, 0.00027126736, -0.00040690104, -0.00040690104, 0.00013563368, 0.010145399, -0.015218099, -0.015218099, 0.0050726997, 0.013834635, -0.020751953, -0.020751953, 0.0069173177, -0.011067708, 0.016601563, 0.016601563, -0.0055338542, -0.00092230903, 0.0013834635, 0.0013834635, -0.00046115451, -0.0059678819, 0.0089518229, 0.0089518229, -0.002983941, -0.0081380208, 0.012207031, 0.012207031, -0.0040690104, 0.0065104167, -0.009765625, -0.009765625, 0.0032552083, 0.00054253472, -0.00081380208, -0.00081380208, 0.00027126736, -0.0073603877, 0.011040582, 0.011040582, -0.0036801939, -0.010036892, 0.015055339, 0.015055339, -0.0050184462, 0.0080295139, -0.012044271, -0.012044271, 0.0040147569, 0.00066912616, -0.0010036892, -0.0010036892, 0.00033456308,
+ -0.001326196, -0.0018084491, 0.0014467593, 0.00012056327, 0.0058021074, 0.0079119647, -0.0063295718, -0.00052746431, 0.01475393, 0.020118996, -0.016095197, -0.0013412664, 0.0029286828, 0.0039936584, -0.0031949267, -0.00026624389, 0.0045090664, 0.0061487269, -0.0049189815, -0.00040991512, -0.019727165, -0.02690068, 0.021520544, 0.0017933787, -0.050163363, -0.068404586, 0.054723669, 0.0045603057, -0.0099575215, -0.013578438, 0.010862751, 0.00090522923, -0.002652392, -0.0036168981, 0.0028935185, 0.00024112654, 0.011604215, 0.015823929, -0.012659144, -0.0010549286, 0.029507861, 0.040237992, -0.032190394, -0.0026825328, 0.0058573656, 0.0079873167, -0.0063898534, -0.00053248778, -0.0032712834, -0.004460841, 0.0035686728, 0.0002973894, 0.014311865, 0.01951618, -0.015612944, -0.0013010786, 0.036393028, 0.049626857, -0.039701485, -0.0033084571, 0.0072240843, 0.009851024, -0.0078808192, -0.00065673493,
+ 0.00010716735, -0.00046885717, -0.0011922368, -0.00023666124, -0.00046885717, 0.0020512501, 0.005216036, 0.0010353929, -0.0011922368, 0.005216036, 0.013263634, 0.0026328563, -0.00023666124, 0.0010353929, 0.0026328563, 0.0005226269, -0.000364369, 0.0015941144, 0.0040536051, 0.00080464821, 0.0015941144, -0.0069742504, -0.017734522, -0.0035203359, 0.0040536051, -0.017734522, -0.045096357, -0.0089517113, 0.00080464821, -0.0035203359, -0.0089517113, -0.0017769315, 0.00021433471, -0.00093771433, -0.0023844736, -0.00047332247, -0.00093771433, 0.0041025002, 0.010432072, 0.0020707858, -0.0023844736, 0.010432072, 0.026527269, 0.0052657125, -0.00047332247, 0.0020707858, 0.0052657125, 0.0010452538, 0.00026434614, -0.0011565143, -0.0029408508, -0.00058376438, -0.0011565143, 0.0050597503, 0.012866222, 0.0025539692, -0.0029408508, 0.012866222, 0.032716965, 0.0064943788, -0.00058376438, 0.0025539692, 0.0064943788, 0.0012891463,
+ -6.6979595e-05, 0.00022773062, -0.00013395919, -0.00016521634, 0.00029303573, -0.00099632148, 0.00058607146, 0.00072282147, 0.000745148, -0.0025335032, 0.001490296, 0.0018380317, 0.00014791327, -0.00050290513, 0.00029582655, 0.00036485274, 0.00022773062, -0.00077428412, 0.00045546125, 0.00056173554, -0.00099632148, 0.003387493, -0.001992643, -0.002457593, -0.0025335032, 0.0086139109, -0.0050670064, -0.0062493079, -0.00050290513, 0.0017098774, -0.0010058103, -0.0012404993, -0.00013395919, 0.00045546125, -0.00026791838, -0.00033043267, 0.00058607146, -0.001992643, 0.0011721429, 0.0014456429, 0.001490296, -0.0050670064, 0.002980592, 0.0036760635, 0.00029582655, -0.0010058103, 0.00059165309, 0.00072970548, -0.00016521634, 0.00056173554, -0.00033043267, -0.00040753363, 0.00072282147, -0.002457593, 0.0014456429, 0.0017829596, 0.0018380317, -0.0062493079, 0.0036760635, 0.0045338116, 0.00036485274, -0.0012404993, 0.00072970548, 0.00089997009,
+ 0.00024112654, -0.00036168981, -0.00036168981, 0.00012056327, -0.0010549286, 0.0015823929, 0.0015823929, -0.00052746431, -0.0026825328, 0.0040237992, 0.0040237992, -0.0013412664, -0.00053248778, 0.00079873167, 0.00079873167, -0.00026624389, -0.00081983025, 0.0012297454, 0.0012297454, -0.00040991512, 0.0035867573, -0.005380136, -0.005380136, 0.0017933787, 0.0091206115, -0.013680917, -0.013680917, 0.0045603057, 0.0018104585, -0.0027156877, -0.0027156877, 0.00090522923, 0.00048225309, -0.00072337963, -0.00072337963, 0.00024112654, -0.0021098573, 0.0031647859, 0.0031647859, -0.0010549286, -0.0053650656, 0.0080475984, 0.0080475984, -0.0026825328, -0.0010649756, 0.0015974633, 0.0015974633, -0.00053248778, 0.00059477881, -0.00089216821, -0.00089216821, 0.0002973894, -0.0026021573, 0.0039032359, 0.0039032359, -0.0013010786, -0.0066169142, 0.0099253713, 0.0099253713, -0.0033084571, -0.0013134699, 0.0019702048, 0.0019702048, -0.00065673493,
+ 0.00082887249, 0.0011302807, -0.00090422454, -7.5352045e-05, -0.0028181665, -0.0038429543, 0.0030743634, 0.00025619695, 0.001657745, 0.0022605613, -0.0018084491, -0.00015070409, 0.0020445521, 0.0027880257, -0.0022304205, -0.00018586838, -0.0028181665, -0.0038429543, 0.0030743634, 0.00025619695, 0.009581766, 0.013066045, -0.010452836, -0.00087106964, -0.0056363329, -0.0076859086, 0.0061487269, 0.0005123939, -0.0069514773, -0.0094792872, 0.0075834298, 0.00063195248, 0.001657745, 0.0022605613, -0.0018084491, -0.00015070409, -0.0056363329, -0.0076859086, 0.0061487269, 0.0005123939, 0.00331549, 0.0045211227, -0.0036168981, -0.00030140818, 0.0040891043, 0.0055760513, -0.004460841, -0.00037173675, 0.0020445521, 0.0027880257, -0.0022304205, -0.00018586838, -0.0069514773, -0.0094792872, 0.0075834298, 0.00063195248, 0.0040891043, 0.0055760513, -0.004460841, -0.00037173675, 0.0050432286, 0.00687713, -0.005501704, -0.00045847533,
+ -6.6979595e-05, 0.00029303573, 0.000745148, 0.00014791327, 0.00022773062, -0.00099632148, -0.0025335032, -0.00050290513, -0.00013395919, 0.00058607146, 0.001490296, 0.00029582655, -0.00016521634, 0.00072282147, 0.0018380317, 0.00036485274, 0.00022773062, -0.00099632148, -0.0025335032, -0.00050290513, -0.00077428412, 0.003387493, 0.0086139109, 0.0017098774, 0.00045546125, -0.001992643, -0.0050670064, -0.0010058103, 0.00056173554, -0.002457593, -0.0062493079, -0.0012404993, -0.00013395919, 0.00058607146, 0.001490296, 0.00029582655, 0.00045546125, -0.001992643, -0.0050670064, -0.0010058103, -0.00026791838, 0.0011721429, 0.002980592, 0.00059165309, -0.00033043267, 0.0014456429, 0.0036760635, 0.00072970548, -0.00016521634, 0.00072282147, 0.0018380317, 0.00036485274, 0.00056173554, -0.002457593, -0.0062493079, -0.0012404993, -0.00033043267, 0.0014456429, 0.0036760635, 0.00072970548, -0.00040753363, 0.0017829596, 0.0045338116, 0.00089997009,
+ 4.1862247e-05, -0.00014233164, 8.3724494e-05, 0.00010326021, -0.00014233164, 0.00048392758, -0.00028466328, -0.00035108471, 8.3724494e-05, -0.00028466328, 0.00016744899, 0.00020652042, 0.00010326021, -0.00035108471, 0.00020652042, 0.00025470852, -0.00014233164, 0.00048392758, -0.00028466328, -0.00035108471, 0.00048392758, -0.0016453538, 0.00096785515, 0.001193688, -0.00028466328, 0.00096785515, -0.00056932656, -0.00070216942, -0.00035108471, 0.001193688, -0.00070216942, -0.00086600896, 8.3724494e-05, -0.00028466328, 0.00016744899, 0.00020652042, -0.00028466328, 0.00096785515, -0.00056932656, -0.00070216942, 0.00016744899, -0.00056932656, 0.00033489798, 0.00041304084, 0.00020652042, -0.00070216942, 0.00041304084, 0.00050941703, 0.00010326021, -0.00035108471, 0.00020652042, 0.00025470852, -0.00035108471, 0.001193688, -0.00070216942, -0.00086600896, 0.00020652042, -0.00070216942, 0.00041304084, 0.00050941703, 0.00025470852, -0.00086600896, 0.00050941703, 0.00062828101,
+ -0.00015070409, 0.00022605613, 0.00022605613, -7.5352045e-05, 0.0005123939, -0.00076859086, -0.00076859086, 0.00025619695, -0.00030140818, 0.00045211227, 0.00045211227, -0.00015070409, -0.00037173675, 0.00055760513, 0.00055760513, -0.00018586838, 0.0005123939, -0.00076859086, -0.00076859086, 0.00025619695, -0.0017421393, 0.0026132089, 0.0026132089, -0.00087106964, 0.0010247878, -0.0015371817, -0.0015371817, 0.0005123939, 0.001263905, -0.0018958574, -0.0018958574, 0.00063195248, -0.00030140818, 0.00045211227, 0.00045211227, -0.00015070409, 0.0010247878, -0.0015371817, -0.0015371817, 0.0005123939, -0.00060281636, 0.00090422454, 0.00090422454, -0.00030140818, -0.00074347351, 0.0011152103, 0.0011152103, -0.00037173675, -0.00037173675, 0.00055760513, 0.00055760513, -0.00018586838, 0.001263905, -0.0018958574, -0.0018958574, 0.00063195248, -0.00074347351, 0.0011152103, 0.0011152103, -0.00037173675, -0.00091695066, 0.001375426, 0.001375426, -0.00045847533,
+ -0.002983941, -0.0040690104, 0.0032552083, 0.00027126736, 0.0044759115, 0.0061035156, -0.0048828125, -0.00040690104, 0.0044759115, 0.0061035156, -0.0048828125, -0.00040690104, -0.0014919705, -0.0020345052, 0.0016276042, 0.00013563368, 0.010145399, 0.013834635, -0.011067708, -0.00092230903, -0.015218099, -0.020751953, 0.016601563, 0.0013834635, -0.015218099, -0.020751953, 0.016601563, 0.0013834635, 0.0050726997, 0.0069173177, -0.0055338542, -0.00046115451, -0.0059678819, -0.0081380208, 0.0065104167, 0.00054253472, 0.0089518229, 0.012207031, -0.009765625, -0.00081380208, 0.0089518229, 0.012207031, -0.009765625, -0.00081380208, -0.002983941, -0.0040690104, 0.0032552083, 0.00027126736, -0.0073603877, -0.010036892, 0.0080295139, 0.00066912616, 0.011040582, 0.015055339, -0.012044271, -0.0010036892, 0.011040582, 0.015055339, -0.012044271, -0.0010036892, -0.0036801939, -0.0050184462, 0.0040147569, 0.00033456308,
+ 0.00024112654, -0.0010549286, -0.0026825328, -0.00053248778, -0.00036168981, 0.0015823929, 0.0040237992, 0.00079873167, -0.00036168981, 0.0015823929, 0.0040237992, 0.00079873167, 0.00012056327, -0.00052746431, -0.0013412664, -0.00026624389, -0.00081983025, 0.0035867573, 0.0091206115, 0.0018104585, 0.0012297454, -0.005380136, -0.013680917, -0.0027156877, 0.0012297454, -0.005380136, -0.013680917, -0.0027156877, -0.00040991512, 0.0017933787, 0.0045603057, 0.00090522923, 0.00048225309, -0.0021098573, -0.0053650656, -0.0010649756, -0.00072337963, 0.0031647859, 0.0080475984, 0.0015974633, -0.00072337963, 0.0031647859, 0.0080475984, 0.0015974633, 0.00024112654, -0.0010549286, -0.0026825328, -0.00053248778, 0.00059477881, -0.0026021573, -0.0066169142, -0.0013134699, -0.00089216821, 0.0039032359, 0.0099253713, 0.0019702048, -0.00089216821, 0.0039032359, 0.0099253713, 0.0019702048, 0.0002973894, -0.0013010786, -0.0033084571, -0.00065673493,
+ -0.00015070409, 0.0005123939, -0.00030140818, -0.00037173675, 0.00022605613, -0.00076859086, 0.00045211227, 0.00055760513, 0.00022605613, -0.00076859086, 0.00045211227, 0.00055760513, -7.5352045e-05, 0.00025619695, -0.00015070409, -0.00018586838, 0.0005123939, -0.0017421393, 0.0010247878, 0.001263905, -0.00076859086, 0.0026132089, -0.0015371817, -0.0018958574, -0.00076859086, 0.0026132089, -0.0015371817, -0.0018958574, 0.00025619695, -0.00087106964, 0.0005123939, 0.00063195248, -0.00030140818, 0.0010247878, -0.00060281636, -0.00074347351, 0.00045211227, -0.0015371817, 0.00090422454, 0.0011152103, 0.00045211227, -0.0015371817, 0.00090422454, 0.0011152103, -0.00015070409, 0.0005123939, -0.00030140818, -0.00037173675, -0.00037173675, 0.001263905, -0.00074347351, -0.00091695066, 0.00055760513, -0.0018958574, 0.0011152103, 0.001375426, 0.00055760513, -0.0018958574, 0.0011152103, 0.001375426, -0.00018586838, 0.00063195248, -0.00037173675, -0.00045847533,
+ 0.00054253472, -0.00081380208, -0.00081380208, 0.00027126736, -0.00081380208, 0.0012207031, 0.0012207031, -0.00040690104, -0.00081380208, 0.0012207031, 0.0012207031, -0.00040690104, 0.00027126736, -0.00040690104, -0.00040690104, 0.00013563368, -0.0018446181, 0.0027669271, 0.0027669271, -0.00092230903, 0.0027669271, -0.0041503906, -0.0041503906, 0.0013834635, 0.0027669271, -0.0041503906, -0.0041503906, 0.0013834635, -0.00092230903, 0.0013834635, 0.0013834635, -0.00046115451, 0.0010850694, -0.0016276042, -0.0016276042, 0.00054253472, -0.0016276042, 0.0024414062, 0.0024414063, -0.00081380208, -0.0016276042, 0.0024414063, 0.0024414063, -0.00081380208, 0.00054253472, -0.00081380208, -0.00081380208, 0.00027126736, 0.0013382523, -0.0020073785, -0.0020073785, 0.00066912616, -0.0020073785, 0.0030110677, 0.0030110677, -0.0010036892, -0.0020073785, 0.0030110677, 0.0030110677, -0.0010036892, 0.00066912616, -0.0010036892, -0.0010036892, 0.00033456308,
+ -0.059082031, -0.080566406, 0.064453125, 0.0053710938, -0.080566406, -0.10986328, 0.087890625, 0.0073242188, 0.064453125, 0.087890625, -0.0703125, -0.005859375, 0.0053710938, 0.0073242187, -0.005859375, -0.00048828125, 0.088623047, 0.12084961, -0.096679687, -0.0080566406, 0.12084961, 0.16479492, -0.13183594, -0.010986328, -0.096679688, -0.13183594, 0.10546875, 0.0087890625, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, 0.088623047, 0.12084961, -0.096679688, -0.0080566406, 0.12084961, 0.16479492, -0.13183594, -0.010986328, -0.096679688, -0.13183594, 0.10546875, 0.0087890625, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, -0.029541016, -0.040283203, 0.032226563, 0.0026855469, -0.040283203, -0.054931641, 0.043945312, 0.0036621094, 0.032226563, 0.043945312, -0.03515625, -0.0029296875, 0.0026855469, 0.0036621094, -0.0029296875, -0.00024414063,
+ 0.0047743056, -0.020887587, -0.053114149, -0.010543258, 0.0065104167, -0.028483073, -0.072428385, -0.01437717, -0.0052083333, 0.022786458, 0.057942708, 0.011501736, -0.00043402778, 0.0018988715, 0.004828559, 0.00095847801, -0.0071614583, 0.03133138, 0.079671224, 0.015814887, -0.009765625, 0.042724609, 0.10864258, 0.021565755, 0.0078125, -0.034179688, -0.086914063, -0.017252604, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, -0.0071614583, 0.03133138, 0.079671224, 0.015814887, -0.009765625, 0.042724609, 0.10864258, 0.021565755, 0.0078125, -0.034179688, -0.086914063, -0.017252604, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, 0.0023871528, -0.010443793, -0.026557075, -0.0052716291, 0.0032552083, -0.014241536, -0.036214193, -0.0071885851, -0.0026041667, 0.011393229, 0.028971354, 0.0057508681, -0.00021701389, 0.00094943576, 0.0024142795, 0.000479239,
+ -0.002983941, 0.010145399, -0.0059678819, -0.0073603877, -0.0040690104, 0.013834635, -0.0081380208, -0.010036892, 0.0032552083, -0.011067708, 0.0065104167, 0.0080295139, 0.00027126736, -0.00092230903, 0.00054253472, 0.00066912616, 0.0044759115, -0.015218099, 0.0089518229, 0.011040582, 0.0061035156, -0.020751953, 0.012207031, 0.015055339, -0.0048828125, 0.016601563, -0.009765625, -0.012044271, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, 0.0044759115, -0.015218099, 0.0089518229, 0.011040582, 0.0061035156, -0.020751953, 0.012207031, 0.015055339, -0.0048828125, 0.016601562, -0.009765625, -0.012044271, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, -0.0014919705, 0.0050726997, -0.002983941, -0.0036801939, -0.0020345052, 0.0069173177, -0.0040690104, -0.0050184462, 0.0016276042, -0.0055338542, 0.0032552083, 0.0040147569, 0.00013563368, -0.00046115451, 0.00027126736, 0.00033456308,
+ 0.010742188, -0.016113281, -0.016113281, 0.0053710937, 0.014648438, -0.021972656, -0.021972656, 0.0073242187, -0.01171875, 0.017578125, 0.017578125, -0.005859375, -0.0009765625, 0.0014648437, 0.0014648438, -0.00048828125, -0.016113281, 0.024169922, 0.024169922, -0.0080566406, -0.021972656, 0.032958984, 0.032958984, -0.010986328, 0.017578125, -0.026367188, -0.026367188, 0.0087890625, 0.0014648437, -0.0021972656, -0.0021972656, 0.00073242188, -0.016113281, 0.024169922, 0.024169922, -0.0080566406, -0.021972656, 0.032958984, 0.032958984, -0.010986328, 0.017578125, -0.026367187, -0.026367188, 0.0087890625, 0.0014648438, -0.0021972656, -0.0021972656, 0.00073242187, 0.0053710937, -0.0080566406, -0.0080566406, 0.0026855469, 0.0073242187, -0.010986328, -0.010986328, 0.0036621094, -0.005859375, 0.0087890625, 0.0087890625, -0.0029296875, -0.00048828125, 0.00073242188, 0.00073242188, -0.00024414062,
+ 0.0047743056, 0.0065104167, -0.0052083333, -0.00043402778, -0.020887587, -0.028483073, 0.022786458, 0.0018988715, -0.053114149, -0.072428385, 0.057942708, 0.004828559, -0.010543258, -0.01437717, 0.011501736, 0.00095847801, -0.0071614583, -0.009765625, 0.0078125, 0.00065104167, 0.03133138, 0.042724609, -0.034179688, -0.0028483073, 0.079671224, 0.10864258, -0.086914063, -0.0072428385, 0.015814887, 0.021565755, -0.017252604, -0.001437717, -0.0071614583, -0.009765625, 0.0078125, 0.00065104167, 0.03133138, 0.042724609, -0.034179688, -0.0028483073, 0.079671224, 0.10864258, -0.086914063, -0.0072428385, 0.015814887, 0.021565755, -0.017252604, -0.001437717, 0.0023871528, 0.0032552083, -0.0026041667, -0.00021701389, -0.010443793, -0.014241536, 0.011393229, 0.00094943576, -0.026557075, -0.036214193, 0.028971354, 0.0024142795, -0.0052716291, -0.0071885851, 0.0057508681, 0.000479239,
+ -0.00038580247, 0.0016878858, 0.0042920525, 0.00085198045, 0.0016878858, -0.0073845004, -0.01877773, -0.0037274145, 0.0042920525, -0.01877773, -0.047749084, -0.0094782825, 0.00085198045, -0.0037274145, -0.0094782825, -0.0018814568, 0.0005787037, -0.0025318287, -0.0064380787, -0.0012779707, -0.0025318287, 0.011076751, 0.028166594, 0.0055911217, -0.0064380787, 0.028166594, 0.071623626, 0.014217424, -0.0012779707, 0.0055911217, 0.014217424, 0.0028221852, 0.0005787037, -0.0025318287, -0.0064380787, -0.0012779707, -0.0025318287, 0.011076751, 0.028166594, 0.0055911217, -0.0064380787, 0.028166594, 0.071623626, 0.014217424, -0.0012779707, 0.0055911217, 0.014217424, 0.0028221852, -0.00019290123, 0.0008439429, 0.0021460262, 0.00042599023, 0.0008439429, -0.0036922502, -0.0093888648, -0.0018637072, 0.0021460262, -0.0093888648, -0.023874542, -0.0047391413, 0.00042599023, -0.0018637072, -0.0047391413, -0.00094072842,
+ 0.00024112654, -0.00081983025, 0.00048225309, 0.00059477881, -0.0010549286, 0.0035867573, -0.0021098573, -0.0026021573, -0.0026825328, 0.0091206115, -0.0053650656, -0.0066169142, -0.00053248778, 0.0018104585, -0.0010649756, -0.0013134699, -0.00036168981, 0.0012297454, -0.00072337963, -0.00089216821, 0.0015823929, -0.005380136, 0.0031647859, 0.0039032359, 0.0040237992, -0.013680917, 0.0080475984, 0.0099253713, 0.00079873167, -0.0027156877, 0.0015974633, 0.0019702048, -0.00036168981, 0.0012297454, -0.00072337963, -0.00089216821, 0.0015823929, -0.005380136, 0.0031647859, 0.0039032359, 0.0040237992, -0.013680917, 0.0080475984, 0.0099253713, 0.00079873167, -0.0027156877, 0.0015974633, 0.0019702048, 0.00012056327, -0.00040991512, 0.00024112654, 0.0002973894, -0.00052746431, 0.0017933787, -0.0010549286, -0.0013010786, -0.0013412664, 0.0045603057, -0.0026825328, -0.0033084571, -0.00026624389, 0.00090522923, -0.00053248778, -0.00065673493,
+ -0.00086805556, 0.0013020833, 0.0013020833, -0.00043402778, 0.0037977431, -0.0056966146, -0.0056966146, 0.0018988715, 0.0096571181, -0.014485677, -0.014485677, 0.004828559, 0.001916956, -0.002875434, -0.002875434, 0.00095847801, 0.0013020833, -0.001953125, -0.001953125, 0.00065104167, -0.0056966146, 0.0085449219, 0.0085449219, -0.0028483073, -0.014485677, 0.021728516, 0.021728516, -0.0072428385, -0.002875434, 0.004313151, 0.004313151, -0.001437717, 0.0013020833, -0.001953125, -0.001953125, 0.00065104167, -0.0056966146, 0.0085449219, 0.0085449219, -0.0028483073, -0.014485677, 0.021728516, 0.021728516, -0.0072428385, -0.002875434, 0.004313151, 0.004313151, -0.001437717, -0.00043402778, 0.00065104167, 0.00065104167, -0.00021701389, 0.0018988715, -0.0028483073, -0.0028483073, 0.00094943576, 0.004828559, -0.0072428385, -0.0072428385, 0.0024142795, 0.00095847801, -0.001437717, -0.001437717, 0.000479239,
+ -0.002983941, -0.0040690104, 0.0032552083, 0.00027126736, 0.010145399, 0.013834635, -0.011067708, -0.00092230903, -0.0059678819, -0.0081380208, 0.0065104167, 0.00054253472, -0.0073603877, -0.010036892, 0.0080295139, 0.00066912616, 0.0044759115, 0.0061035156, -0.0048828125, -0.00040690104, -0.015218099, -0.020751953, 0.016601563, 0.0013834635, 0.0089518229, 0.012207031, -0.009765625, -0.00081380208, 0.011040582, 0.015055339, -0.012044271, -0.0010036892, 0.0044759115, 0.0061035156, -0.0048828125, -0.00040690104, -0.015218099, -0.020751953, 0.016601563, 0.0013834635, 0.0089518229, 0.012207031, -0.009765625, -0.00081380208, 0.011040582, 0.015055339, -0.012044271, -0.0010036892, -0.0014919705, -0.0020345052, 0.0016276042, 0.00013563368, 0.0050726997, 0.0069173177, -0.0055338542, -0.00046115451, -0.002983941, -0.0040690104, 0.0032552083, 0.00027126736, -0.0036801939, -0.0050184462, 0.0040147569, 0.00033456308,
+ 0.00024112654, -0.0010549286, -0.0026825328, -0.00053248778, -0.00081983025, 0.0035867573, 0.0091206115, 0.0018104585, 0.00048225309, -0.0021098573, -0.0053650656, -0.0010649756, 0.00059477881, -0.0026021573, -0.0066169142, -0.0013134699, -0.00036168981, 0.0015823929, 0.0040237992, 0.00079873167, 0.0012297454, -0.005380136, -0.013680917, -0.0027156877, -0.00072337963, 0.0031647859, 0.0080475984, 0.0015974633, -0.00089216821, 0.0039032359, 0.0099253713, 0.0019702048, -0.00036168981, 0.0015823929, 0.0040237992, 0.00079873167, 0.0012297454, -0.005380136, -0.013680917, -0.0027156877, -0.00072337963, 0.0031647859, 0.0080475984, 0.0015974633, -0.00089216821, 0.0039032359, 0.0099253713, 0.0019702048, 0.00012056327, -0.00052746431, -0.0013412664, -0.00026624389, -0.00040991512, 0.0017933787, 0.0045603057, 0.00090522923, 0.00024112654, -0.0010549286, -0.0026825328, -0.00053248778, 0.0002973894, -0.0013010786, -0.0033084571, -0.00065673493,
+ -0.00015070409, 0.0005123939, -0.00030140818, -0.00037173675, 0.0005123939, -0.0017421393, 0.0010247878, 0.001263905, -0.00030140818, 0.0010247878, -0.00060281636, -0.00074347351, -0.00037173675, 0.001263905, -0.00074347351, -0.00091695066, 0.00022605613, -0.00076859086, 0.00045211227, 0.00055760513, -0.00076859086, 0.0026132089, -0.0015371817, -0.0018958574, 0.00045211227, -0.0015371817, 0.00090422454, 0.0011152103, 0.00055760513, -0.0018958574, 0.0011152103, 0.001375426, 0.00022605613, -0.00076859086, 0.00045211227, 0.00055760513, -0.00076859086, 0.0026132089, -0.0015371817, -0.0018958574, 0.00045211227, -0.0015371817, 0.00090422454, 0.0011152103, 0.00055760513, -0.0018958574, 0.0011152103, 0.001375426, -7.5352045e-05, 0.00025619695, -0.00015070409, -0.00018586838, 0.00025619695, -0.00087106964, 0.0005123939, 0.00063195248, -0.00015070409, 0.0005123939, -0.00030140818, -0.00037173675, -0.00018586838, 0.00063195248, -0.00037173675, -0.00045847533,
+ 0.00054253472, -0.00081380208, -0.00081380208, 0.00027126736, -0.0018446181, 0.0027669271, 0.0027669271, -0.00092230903, 0.0010850694, -0.0016276042, -0.0016276042, 0.00054253472, 0.0013382523, -0.0020073785, -0.0020073785, 0.00066912616, -0.00081380208, 0.0012207031, 0.0012207031, -0.00040690104, 0.0027669271, -0.0041503906, -0.0041503906, 0.0013834635, -0.0016276042, 0.0024414062, 0.0024414063, -0.00081380208, -0.0020073785, 0.0030110677, 0.0030110677, -0.0010036892, -0.00081380208, 0.0012207031, 0.0012207031, -0.00040690104, 0.0027669271, -0.0041503906, -0.0041503906, 0.0013834635, -0.0016276042, 0.0024414063, 0.0024414063, -0.00081380208, -0.0020073785, 0.0030110677, 0.0030110677, -0.0010036892, 0.00027126736, -0.00040690104, -0.00040690104, 0.00013563368, -0.00092230903, 0.0013834635, 0.0013834635, -0.00046115451, 0.00054253472, -0.00081380208, -0.00081380208, 0.00027126736, 0.00066912616, -0.0010036892, -0.0010036892, 0.00033456308,
+ 0.010742188, 0.014648438, -0.01171875, -0.0009765625, -0.016113281, -0.021972656, 0.017578125, 0.0014648437, -0.016113281, -0.021972656, 0.017578125, 0.0014648438, 0.0053710938, 0.0073242187, -0.005859375, -0.00048828125, -0.016113281, -0.021972656, 0.017578125, 0.0014648437, 0.024169922, 0.032958984, -0.026367188, -0.0021972656, 0.024169922, 0.032958984, -0.026367187, -0.0021972656, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, -0.016113281, -0.021972656, 0.017578125, 0.0014648438, 0.024169922, 0.032958984, -0.026367187, -0.0021972656, 0.024169922, 0.032958984, -0.026367188, -0.0021972656, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, 0.0053710938, 0.0073242187, -0.005859375, -0.00048828125, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, -0.0080566406, -0.010986328, 0.0087890625, 0.00073242188, 0.0026855469, 0.0036621094, -0.0029296875, -0.00024414063,
+ -0.00086805556, 0.0037977431, 0.0096571181, 0.001916956, 0.0013020833, -0.0056966146, -0.014485677, -0.002875434, 0.0013020833, -0.0056966146, -0.014485677, -0.002875434, -0.00043402778, 0.0018988715, 0.004828559, 0.00095847801, 0.0013020833, -0.0056966146, -0.014485677, -0.002875434, -0.001953125, 0.0085449219, 0.021728516, 0.004313151, -0.001953125, 0.0085449219, 0.021728516, 0.004313151, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, 0.0013020833, -0.0056966146, -0.014485677, -0.002875434, -0.001953125, 0.0085449219, 0.021728516, 0.004313151, -0.001953125, 0.0085449219, 0.021728516, 0.004313151, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, -0.00043402778, 0.0018988715, 0.004828559, 0.00095847801, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, 0.00065104167, -0.0028483073, -0.0072428385, -0.001437717, -0.00021701389, 0.00094943576, 0.0024142795, 0.000479239,
+ 0.00054253472, -0.0018446181, 0.0010850694, 0.0013382523, -0.00081380208, 0.0027669271, -0.0016276042, -0.0020073785, -0.00081380208, 0.0027669271, -0.0016276042, -0.0020073785, 0.00027126736, -0.00092230903, 0.00054253472, 0.00066912616, -0.00081380208, 0.0027669271, -0.0016276042, -0.0020073785, 0.0012207031, -0.0041503906, 0.0024414062, 0.0030110677, 0.0012207031, -0.0041503906, 0.0024414063, 0.0030110677, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, -0.00081380208, 0.0027669271, -0.0016276042, -0.0020073785, 0.0012207031, -0.0041503906, 0.0024414063, 0.0030110677, 0.0012207031, -0.0041503906, 0.0024414062, 0.0030110677, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, 0.00027126736, -0.00092230903, 0.00054253472, 0.00066912616, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, -0.00040690104, 0.0013834635, -0.00081380208, -0.0010036892, 0.00013563368, -0.00046115451, 0.00027126736, 0.00033456308,
+ -0.001953125, 0.0029296875, 0.0029296875, -0.0009765625, 0.0029296875, -0.0043945313, -0.0043945312, 0.0014648438, 0.0029296875, -0.0043945312, -0.0043945313, 0.0014648437, -0.0009765625, 0.0014648438, 0.0014648438, -0.00048828125, 0.0029296875, -0.0043945313, -0.0043945312, 0.0014648438, -0.0043945313, 0.0065917969, 0.0065917969, -0.0021972656, -0.0043945312, 0.0065917969, 0.0065917969, -0.0021972656, 0.0014648438, -0.0021972656, -0.0021972656, 0.00073242187, 0.0029296875, -0.0043945312, -0.0043945313, 0.0014648437, -0.0043945312, 0.0065917969, 0.0065917969, -0.0021972656, -0.0043945313, 0.0065917969, 0.0065917969, -0.0021972656, 0.0014648438, -0.0021972656, -0.0021972656, 0.00073242187, -0.0009765625, 0.0014648438, 0.0014648438, -0.00048828125, 0.0014648438, -0.0021972656, -0.0021972656, 0.00073242188, 0.0014648438, -0.0021972656, -0.0021972656, 0.00073242187, -0.00048828125, 0.00073242188, 0.00073242188, -0.00024414062,
+};
+
+static double dgq4_refined_onto_dgq4[] =
+{
+ 0.38217423, 0.51200375, -0.54857544, 0.073143393, 0.0091429241, 0.51200375, 0.68593804, -0.73493361, 0.097991148, 0.012248893, -0.54857544, -0.73493361, 0.78742887, -0.10499052, -0.013123814, 0.073143393, 0.097991148, -0.10499052, 0.013998735, 0.0017498419, 0.0091429241, 0.012248893, -0.013123814, 0.0017498419, 0.00021873024, 0.51200375, 0.68593804, -0.73493361, 0.097991148, 0.012248893, 0.68593804, 0.91896005, -0.98460005, 0.13128001, 0.016410001, -0.73493361, -0.98460005, 1.0549286, -0.14065715, -0.017582144, 0.097991148, 0.13128001, -0.14065715, 0.018754287, 0.0023442858, 0.012248893, 0.016410001, -0.017582144, 0.0023442858, 0.00029303573, -0.54857544, -0.73493361, 0.78742887, -0.10499052, -0.013123814, -0.73493361, -0.98460005, 1.0549286, -0.14065715, -0.017582144, 0.78742887, 1.0549286, -1.1302807, 0.15070409, 0.018838011, -0.10499052, -0.14065715, 0.15070409, -0.020093879, -0.0025117348, -0.013123814, -0.017582144, 0.018838011, -0.0025117348, -0.00031396685, 0.073143393, 0.097991148, -0.10499052, 0.013998735, 0.0017498419, 0.097991148, 0.13128001, -0.14065715, 0.018754287, 0.0023442858, -0.10499052, -0.14065715, 0.15070409, -0.020093879, -0.0025117348, 0.013998735, 0.018754287, -0.020093879, 0.0026791838, 0.00033489798, 0.0017498419, 0.0023442858, -0.0025117348, 0.00033489798, 4.1862247e-05, 0.0091429241, 0.012248893, -0.013123814, 0.0017498419, 0.00021873024, 0.012248893, 0.016410001, -0.017582144, 0.0023442858, 0.00029303573, -0.013123814, -0.017582144, 0.018838011, -0.0025117348, -0.00031396685, 0.0017498419, 0.0023442858, -0.0025117348, 0.00033489798, 4.1862247e-05, 0.00021873024, 0.00029303573, -0.00031396685, 4.1862247e-05, 5.2327809e-06,
+ -0.035928834, 0.15828687, 0.27445915, 0.14800108, 0.016785837, -0.048134324, 0.21205897, 0.36769647, 0.19827896, 0.022488203, 0.05157249, -0.22720604, -0.39396051, -0.21244175, -0.024094503, -0.006876332, 0.030294138, 0.052528067, 0.028325566, 0.0032126004, -0.00085954149, 0.0037867673, 0.0065660084, 0.0035406958, 0.00040157505, -0.048134324, 0.21205897, 0.36769647, 0.19827896, 0.022488203, -0.064486175, 0.28409814, 0.49260771, 0.26563689, 0.030127736, 0.069092331, -0.30439086, -0.52779398, -0.28461095, -0.032279717, -0.0092123107, 0.040585449, 0.07037253, 0.037948127, 0.0043039623, -0.0011515388, 0.0050731811, 0.0087965663, 0.0047435159, 0.00053799528, 0.05157249, -0.22720604, -0.39396051, -0.21244175, -0.024094503, 0.069092331, -0.30439086, -0.52779398, -0.28461095, -0.032279717, -0.074027497, 0.32613307, 0.56549355, 0.30494031, 0.034585411, 0.0098703329, -0.043484409, -0.07539914, -0.040658707, -0.0046113882, 0.0012337916, -0.0054355511, -0.0094248925, -0.0050823384, -0.00057642352, -0.006876332, 0.030294138, 0.052528067, 0.028325566, 0.0032126004, -0.0092123107, 0.040585449, 0.07037253, 0.037948127, 0.0043039623, 0.0098703329, -0.043484409, -0.07539914, -0.040658707, -0.0046113882, -0.0013160444, 0.0057979212, 0.010053219, 0.005421161, 0.00061485175, -0.00016450555, 0.00072474015, 0.0012566523, 0.00067764512, 7.6856469e-05, -0.00085954149, 0.0037867673, 0.0065660084, 0.0035406958, 0.00040157505, -0.0011515388, 0.0050731811, 0.0087965663, 0.0047435159, 0.00053799528, 0.0012337916, -0.0054355511, -0.0094248925, -0.0050823384, -0.00057642352, -0.00016450555, 0.00072474015, 0.0012566523, 0.00067764512, 7.6856469e-05, -2.0563194e-05, 9.0592519e-05, 0.00015708154, 8.4705641e-05, 9.6070587e-06,
+ 0.01028579, -0.027428772, -0.041143158, 0.24685895, 0.074743404, 0.013780005, -0.03674668, -0.055120021, 0.33072012, 0.1001347, -0.014764291, 0.039371443, 0.059057165, -0.35434299, -0.10728718, 0.0019685722, -0.0052495258, -0.0078742887, 0.047245732, 0.014304958, 0.00024607152, -0.00065619072, -0.00098428608, 0.0059057165, 0.0017881197, 0.013780005, -0.03674668, -0.055120021, 0.33072012, 0.1001347, 0.018461251, -0.049230003, -0.073845004, 0.44307002, 0.13415176, -0.019779912, 0.052746431, 0.079119647, -0.47471788, -0.14373403, 0.0026373216, -0.0070328575, -0.010549286, 0.063295718, 0.019164537, 0.0003296652, -0.00087910719, -0.0013186608, 0.0079119647, 0.0023955671, -0.014764291, 0.039371443, 0.059057165, -0.35434299, -0.10728718, -0.019779912, 0.052746431, 0.079119647, -0.47471788, -0.14373403, 0.021192763, -0.056514034, -0.08477105, 0.5086263, 0.15400074, -0.0028257017, 0.0075352045, 0.011302807, -0.06781684, -0.020533432, -0.00035321271, 0.00094190056, 0.0014128508, -0.008477105, -0.002566679, 0.0019685722, -0.0052495258, -0.0078742887, 0.047245732, 0.014304958, 0.0026373216, -0.0070328575, -0.010549286, 0.063295718, 0.019164537, -0.0028257017, 0.0075352045, 0.011302807, -0.06781684, -0.020533432, 0.00037676022, -0.0010046939, -0.0015070409, 0.0090422454, 0.002737791, 4.7095028e-05, -0.00012558674, -0.00018838011, 0.0011302807, 0.00034222387, 0.00024607152, -0.00065619072, -0.00098428608, 0.0059057165, 0.0017881197, 0.0003296652, -0.00087910719, -0.0013186608, 0.0079119647, 0.0023955671, -0.00035321271, 0.00094190056, 0.0014128508, -0.008477105, -0.002566679, 4.7095028e-05, -0.00012558674, -0.00018838011, 0.0011302807, 0.00034222387, 5.8868785e-06, -1.5698343e-05, -2.3547514e-05, 0.00014128508, 4.2777984e-05,
+ -0.0039286002, 0.019314427, -0.016285834, -0.034857398, 0.00078572004, -0.0052631964, 0.025875788, -0.021818342, -0.046698906, 0.0010526393, 0.005639139, -0.027724058, 0.023376795, 0.050034543, -0.0011278278, -0.0007518852, 0.0036965411, -0.0031169059, -0.0066712724, 0.00015037704, -9.398565e-05, 0.00046206763, -0.00038961324, -0.00083390904, 1.879713e-05, -0.0052631964, 0.025875788, -0.021818342, -0.046698906, 0.0010526393, -0.0070511722, 0.034666127, -0.029230314, -0.062563128, 0.0014102344, 0.0075548274, -0.037142279, 0.031318194, 0.067031923, -0.0015109655, -0.0010073103, 0.0049523038, -0.0041757591, -0.0089375898, 0.00020146206, -0.00012591379, 0.00061903798, -0.00052196989, -0.0011171987, 2.5182758e-05, 0.005639139, -0.027724058, 0.023376795, 0.050034543, -0.0011278278, 0.0075548274, -0.037142279, 0.031318194, 0.067031923, -0.0015109655, -0.0080944579, 0.039795299, -0.033555207, -0.071819918, 0.0016188916, 0.0010792611, -0.0053060398, 0.0044740277, 0.009575989, -0.00021585221, 0.00013490763, -0.00066325498, 0.00055925346, 0.0011969986, -2.6981526e-05, -0.0007518852, 0.0036965411, -0.0031169059, -0.0066712724, 0.00015037704, -0.0010073103, 0.0049523038, -0.0041757591, -0.0089375898, 0.00020146206, 0.0010792611, -0.0053060398, 0.0044740277, 0.009575989, -0.00021585221, -0.00014390147, 0.00070747198, -0.00059653702, -0.0012767985, 2.8780295e-05, -1.7987684e-05, 8.8433997e-05, -7.4567128e-05, -0.00015959982, 3.5975369e-06, -9.398565e-05, 0.00046206763, -0.00038961324, -0.00083390904, 1.879713e-05, -0.00012591379, 0.00061903798, -0.00052196989, -0.0011171987, 2.5182758e-05, 0.00013490763, -0.00066325498, 0.00055925346, 0.0011969986, -2.6981526e-05, -1.7987684e-05, 8.8433997e-05, -7.4567128e-05, -0.00015959982, 3.5975369e-06, -2.2484605e-06, 1.105425e-05, -9.320891e-06, -1.9949977e-05, 4.4969211e-07,
+ 0.04571462, -0.073143393, -0.10971509, 0.19017282, 0.04571462, 0.061244467, -0.097991148, -0.14698672, 0.25477698, 0.061244467, -0.065619072, 0.10499052, 0.15748577, -0.27297534, -0.065619072, 0.0087492096, -0.013998735, -0.020998103, 0.036396712, 0.0087492096, 0.0010936512, -0.0017498419, -0.0026247629, 0.004549589, 0.0010936512, 0.061244467, -0.097991148, -0.14698672, 0.25477698, 0.061244467, 0.082050004, -0.13128001, -0.19692001, 0.34132802, 0.082050004, -0.087910719, 0.14065715, 0.21098573, -0.36570859, -0.087910719, 0.011721429, -0.018754287, -0.02813143, 0.048761145, 0.011721429, 0.0014651786, -0.0023442858, -0.0035164288, 0.0060951432, 0.0014651786, -0.065619072, 0.10499052, 0.15748577, -0.27297534, -0.065619072, -0.087910719, 0.14065715, 0.21098573, -0.36570859, -0.087910719, 0.094190056, -0.15070409, -0.22605613, 0.39183063, 0.094190056, -0.012558674, 0.020093879, 0.030140818, -0.052244084, -0.012558674, -0.0015698343, 0.0025117348, 0.0037676022, -0.0065305105, -0.0015698343, 0.0087492096, -0.013998735, -0.020998103, 0.036396712, 0.0087492096, 0.011721429, -0.018754287, -0.02813143, 0.048761145, 0.011721429, -0.012558674, 0.020093879, 0.030140818, -0.052244084, -0.012558674, 0.0016744899, -0.0026791838, -0.0040187757, 0.0069658779, 0.0016744899, 0.00020931124, -0.00033489798, -0.00050234697, 0.00087073474, 0.00020931124, 0.0010936512, -0.0017498419, -0.0026247629, 0.004549589, 0.0010936512, 0.0014651786, -0.0023442858, -0.0035164288, 0.0060951432, 0.0014651786, -0.0015698343, 0.0025117348, 0.0037676022, -0.0065305105, -0.0015698343, 0.00020931124, -0.00033489798, -0.00050234697, 0.00087073474, 0.00020931124, 2.6163904e-05, -4.1862247e-05, -6.2793371e-05, 0.00010884184, 2.6163904e-05,
+ -0.035928834, -0.048134324, 0.05157249, -0.006876332, -0.00085954149, 0.15828687, 0.21205897, -0.22720604, 0.030294138, 0.0037867673, 0.27445915, 0.36769647, -0.39396051, 0.052528067, 0.0065660084, 0.14800108, 0.19827896, -0.21244175, 0.028325566, 0.0035406958, 0.016785837, 0.022488203, -0.024094503, 0.0032126004, 0.00040157505, -0.048134324, -0.064486175, 0.069092331, -0.0092123107, -0.0011515388, 0.21205897, 0.28409814, -0.30439086, 0.040585449, 0.0050731811, 0.36769647, 0.49260771, -0.52779398, 0.07037253, 0.0087965663, 0.19827896, 0.26563689, -0.28461095, 0.037948127, 0.0047435159, 0.022488203, 0.030127736, -0.032279717, 0.0043039623, 0.00053799528, 0.05157249, 0.069092331, -0.074027497, 0.0098703329, 0.0012337916, -0.22720604, -0.30439086, 0.32613307, -0.043484409, -0.0054355511, -0.39396051, -0.52779398, 0.56549355, -0.07539914, -0.0094248925, -0.21244175, -0.28461095, 0.30494031, -0.040658707, -0.0050823384, -0.024094503, -0.032279717, 0.034585411, -0.0046113882, -0.00057642352, -0.006876332, -0.0092123107, 0.0098703329, -0.0013160444, -0.00016450555, 0.030294138, 0.040585449, -0.043484409, 0.0057979212, 0.00072474015, 0.052528067, 0.07037253, -0.07539914, 0.010053219, 0.0012566523, 0.028325566, 0.037948127, -0.040658707, 0.005421161, 0.00067764512, 0.0032126004, 0.0043039623, -0.0046113882, 0.00061485175, 7.6856469e-05, -0.00085954149, -0.0011515388, 0.0012337916, -0.00016450555, -2.0563194e-05, 0.0037867673, 0.0050731811, -0.0054355511, 0.00072474015, 9.0592519e-05, 0.0065660084, 0.0087965663, -0.0094248925, 0.0012566523, 0.00015708154, 0.0035406958, 0.0047435159, -0.0050823384, 0.00067764512, 8.4705641e-05, 0.00040157505, 0.00053799528, -0.00057642352, 7.6856469e-05, 9.6070587e-06,
+ 0.0033777295, -0.014880812, -0.025802361, -0.013913828, -0.0015780645, -0.014880812, 0.065558409, 0.11367402, 0.061298296, 0.0069522681, -0.025802361, 0.11367402, 0.19710337, 0.10628726, 0.012054781, -0.013913828, 0.061298296, 0.10628726, 0.057315013, 0.0065004962, -0.0015780645, 0.0069522681, 0.012054781, 0.0065004962, 0.0007372667, 0.0045251878, -0.019936016, -0.034567757, -0.018640535, -0.0021141533, -0.019936016, 0.087829447, 0.15229055, 0.082122119, 0.0093140434, -0.034567757, 0.15229055, 0.26406192, 0.14239442, 0.016149946, -0.018640535, 0.082122119, 0.14239442, 0.076785663, 0.0087087987, -0.0021141533, 0.0093140434, 0.016149946, 0.0087087987, 0.00098772572, -0.0048484155, 0.021360017, 0.037036882, 0.019972002, 0.0022651643, 0.021360017, -0.094102979, -0.16316845, -0.087987984, -0.0099793322, 0.037036882, -0.16316845, -0.28292349, -0.15256545, -0.017303514, 0.019972002, -0.087987984, -0.15256545, -0.082270353, -0.0093308557, 0.0022651643, -0.0099793322, -0.017303514, -0.0093308557, -0.0010582776, 0.0006464554, -0.0028480023, -0.004938251, -0.0026629336, -0.00030202191, -0.0028480023, 0.012547064, 0.021755793, 0.011731731, 0.0013305776, -0.004938251, 0.021755793, 0.037723132, 0.02034206, 0.0023071351, -0.0026629336, 0.011731731, 0.02034206, 0.01096938, 0.0012441141, -0.00030202191, 0.0013305776, 0.0023071351, 0.0012441141, 0.00014110367, 8.0806925e-05, -0.00035600029, -0.00061728137, -0.0003328667, -3.7752738e-05, -0.00035600029, 0.001568383, 0.0027194742, 0.0014664664, 0.0001663222, -0.00061728137, 0.0027194742, 0.0047153915, 0.0025427574, 0.00028839189, -0.0003328667, 0.0014664664, 0.0025427574, 0.0013711726, 0.00015551426, -3.7752738e-05, 0.0001663222, 0.00028839189, 0.00015551426, 1.7637959e-05,
+ -0.00096698418, 0.0025786245, 0.0038679367, -0.02320762, -0.0070267517, 0.0042601132, -0.011360302, -0.017040453, 0.10224272, 0.030956823, 0.0073867595, -0.019698025, -0.029547038, 0.17728223, 0.053677119, 0.0039832827, -0.010622087, -0.015933131, 0.095598786, 0.028945188, 0.00045177193, -0.0012047252, -0.0018070877, 0.010842526, 0.003282876, -0.0012954812, 0.0034546165, 0.0051819248, -0.031091549, -0.00941383, 0.0057073287, -0.015219543, -0.022829315, 0.13697589, 0.041473255, 0.0098961371, -0.026389699, -0.039584548, 0.23750729, 0.07191193, 0.0053364554, -0.014230548, -0.021345821, 0.12807493, 0.038778242, 0.0006052447, -0.0016139859, -0.0024209788, 0.014525873, 0.0043981115, 0.0013880156, -0.0037013749, -0.0055520623, 0.033312374, 0.010086246, -0.006114995, 0.016306653, 0.02445998, -0.14675988, -0.044435631, -0.010603004, 0.028274677, 0.042412016, -0.2544721, -0.077048496, -0.0057176307, 0.015247015, 0.022870523, -0.13722314, -0.041548117, -0.00064847646, 0.0017292706, 0.0025939058, -0.015563435, -0.0047122623, -0.00018506874, 0.00049351665, 0.00074027497, -0.0044416498, -0.0013448329, 0.00081533267, -0.0021742205, -0.0032613307, 0.019567984, 0.0059247507, 0.0014137339, -0.003769957, -0.0056549355, 0.033929613, 0.010273133, 0.00076235077, -0.0020329354, -0.0030494031, 0.018296418, 0.0055397489, 8.6463528e-05, -0.00023056941, -0.00034585411, 0.0020751247, 0.00062830164, -2.3133593e-05, 6.1689581e-05, 9.2534371e-05, -0.00055520623, -0.00016810411, 0.00010191658, -0.00027177756, -0.00040766634, 0.002445998, 0.00074059384, 0.00017671673, -0.00047124462, -0.00070686694, 0.0042412016, 0.0012841416, 9.5293846e-05, -0.00025411692, -0.00038117538, 0.0022870523, 0.00069246861, 1.0807941e-05, -2.8821176e-05, -4.3231764e-05, 0.00025939058, 7.8537705e-05,
+ 0.00036933424, -0.0018157814, 0.0015310583, 0.0032770019, -7.3866847e-05, -0.0016271266, 0.0079995459, -0.0067451792, -0.01443705, 0.00032542531, -0.0028213317, 0.013870693, -0.011695703, -0.025032907, 0.00056426635, -0.0015213927, 0.0074797198, -0.0063068644, -0.013498903, 0.00030427854, -0.00017255178, 0.0008483273, -0.00071530556, -0.0015310049, 3.4510356e-05, 0.00049480185, -0.0024326258, 0.0020511786, 0.0043902418, -9.8960369e-05, -0.0021798825, 0.010717095, -0.0090366038, -0.019341503, 0.0004359765, -0.0037797746, 0.018582746, -0.015668884, -0.033536909, 0.00075595492, -0.0020382295, 0.010020677, -0.0084493876, -0.018084654, 0.0004076459, -0.00023116985, 0.001136515, -0.0009583041, -0.002051107, 4.623397e-05, -0.00053014484, 0.0026063848, -0.0021976913, -0.0047038305, 0.00010602897, 0.0023355884, -0.011482602, 0.0096820755, 0.020723039, -0.00046711768, 0.0040497585, -0.019910085, 0.01678809, 0.035932403, -0.0008099517, 0.0021838173, -0.01073644, 0.0090529153, 0.019376415, -0.00043676346, 0.00024768198, -0.0012176947, 0.0010267544, 0.0021976147, -4.9536396e-05, 7.0685978e-05, -0.00034751797, 0.00029302551, 0.00062717741, -1.4137196e-05, -0.00031141178, 0.0015310136, -0.0012909434, -0.0027630718, 6.2282357e-05, -0.0005399678, 0.002654678, -0.002238412, -0.004790987, 0.00010799356, -0.00029117564, 0.0014315253, -0.0012070554, -0.002583522, 5.8235128e-05, -3.3024264e-05, 0.00016235929, -0.00013690059, -0.00029301529, 6.6048528e-06, 8.8357473e-06, -4.3439747e-05, 3.6628189e-05, 7.8397176e-05, -1.7671495e-06, -3.8926473e-05, 0.0001913767, -0.00016136792, -0.00034538398, 7.7852946e-06, -6.7495975e-05, 0.00033183476, -0.0002798015, -0.00059887338, 1.3499195e-05, -3.6396955e-05, 0.00017894067, -0.00015088192, -0.00032294025, 7.279391e-06, -4.128033e-06, 2.0294911e-05, -1.7112573e-05, -3.6626911e-05, 8.256066e-07,
+ -0.0042977075, 0.006876332, 0.010314498, -0.017878463, -0.0042977075, 0.018933836, -0.030294138, -0.045441208, 0.07876476, 0.018933836, 0.032830042, -0.052528067, -0.078792101, 0.13657298, 0.032830042, 0.017703479, -0.028325566, -0.042488349, 0.073646472, 0.017703479, 0.0020078753, -0.0032126004, -0.0048189006, 0.0083527611, 0.0020078753, -0.0057576942, 0.0092123107, 0.013818466, -0.023952008, -0.0057576942, 0.025365905, -0.040585449, -0.060878173, 0.10552217, 0.025365905, 0.043982832, -0.07037253, -0.1055588, 0.18296858, 0.043982832, 0.023717579, -0.037948127, -0.05692219, 0.09866513, 0.023717579, 0.0026899764, -0.0043039623, -0.0064559434, 0.011190302, 0.0026899764, 0.0061689581, -0.0098703329, -0.014805499, 0.025662866, 0.0061689581, -0.027177756, 0.043484409, 0.065226614, -0.11305946, -0.027177756, -0.047124462, 0.07539914, 0.11309871, -0.19603776, -0.047124462, -0.025411692, 0.040658707, 0.060988061, -0.10571264, -0.025411692, -0.0028821176, 0.0046113882, 0.0069170822, -0.011989609, -0.0028821176, -0.00082252775, 0.0013160444, 0.0019740666, -0.0034217154, -0.00082252775, 0.0036237008, -0.0057979212, -0.0086968818, 0.015074595, 0.0036237008, 0.0062832616, -0.010053219, -0.015079828, 0.026138368, 0.0062832616, 0.0033882256, -0.005421161, -0.0081317415, 0.014095019, 0.0033882256, 0.00038428235, -0.00061485175, -0.00092227763, 0.0015986146, 0.00038428235, -0.00010281597, 0.00016450555, 0.00024675832, -0.00042771443, -0.00010281597, 0.0004529626, -0.00072474015, -0.0010871102, 0.0018843244, 0.0004529626, 0.00078540771, -0.0012566523, -0.0018849785, 0.0032672961, 0.00078540771, 0.0004235282, -0.00067764512, -0.0010164677, 0.0017618773, 0.0004235282, 4.8035293e-05, -7.6856469e-05, -0.0001152847, 0.00019982682, 4.8035293e-05,
+ 0.01028579, 0.013780005, -0.014764291, 0.0019685722, 0.00024607152, -0.027428772, -0.03674668, 0.039371443, -0.0052495258, -0.00065619072, -0.041143158, -0.055120021, 0.059057165, -0.0078742887, -0.00098428608, 0.24685895, 0.33072012, -0.35434299, 0.047245732, 0.0059057165, 0.074743404, 0.1001347, -0.10728718, 0.014304958, 0.0017881197, 0.013780005, 0.018461251, -0.019779912, 0.0026373216, 0.0003296652, -0.03674668, -0.049230003, 0.052746431, -0.0070328575, -0.00087910719, -0.055120021, -0.073845004, 0.079119647, -0.010549286, -0.0013186608, 0.33072012, 0.44307002, -0.47471788, 0.063295718, 0.0079119647, 0.1001347, 0.13415176, -0.14373403, 0.019164537, 0.0023955671, -0.014764291, -0.019779912, 0.021192763, -0.0028257017, -0.00035321271, 0.039371443, 0.052746431, -0.056514034, 0.0075352045, 0.00094190056, 0.059057165, 0.079119647, -0.08477105, 0.011302807, 0.0014128508, -0.35434299, -0.47471788, 0.5086263, -0.06781684, -0.008477105, -0.10728718, -0.14373403, 0.15400074, -0.020533432, -0.002566679, 0.0019685722, 0.0026373216, -0.0028257017, 0.00037676022, 4.7095028e-05, -0.0052495258, -0.0070328575, 0.0075352045, -0.0010046939, -0.00012558674, -0.0078742887, -0.010549286, 0.011302807, -0.0015070409, -0.00018838011, 0.047245732, 0.063295718, -0.06781684, 0.0090422454, 0.0011302807, 0.014304958, 0.019164537, -0.020533432, 0.002737791, 0.00034222387, 0.00024607152, 0.0003296652, -0.00035321271, 4.7095028e-05, 5.8868785e-06, -0.00065619072, -0.00087910719, 0.00094190056, -0.00012558674, -1.5698343e-05, -0.00098428608, -0.0013186608, 0.0014128508, -0.00018838011, -2.3547514e-05, 0.0059057165, 0.0079119647, -0.008477105, 0.0011302807, 0.00014128508, 0.0017881197, 0.0023955671, -0.002566679, 0.00034222387, 4.2777984e-05,
+ -0.00096698418, 0.0042601132, 0.0073867595, 0.0039832827, 0.00045177193, 0.0025786245, -0.011360302, -0.019698025, -0.010622087, -0.0012047252, 0.0038679367, -0.017040453, -0.029547038, -0.015933131, -0.0018070877, -0.02320762, 0.10224272, 0.17728223, 0.095598786, 0.010842526, -0.0070267517, 0.030956823, 0.053677119, 0.028945188, 0.003282876, -0.0012954812, 0.0057073287, 0.0098961371, 0.0053364554, 0.0006052447, 0.0034546165, -0.015219543, -0.026389699, -0.014230548, -0.0016139859, 0.0051819248, -0.022829315, -0.039584548, -0.021345821, -0.0024209788, -0.031091549, 0.13697589, 0.23750729, 0.12807493, 0.014525873, -0.00941383, 0.041473255, 0.07191193, 0.038778242, 0.0043981115, 0.0013880156, -0.006114995, -0.010603004, -0.0057176307, -0.00064847646, -0.0037013749, 0.016306653, 0.028274677, 0.015247015, 0.0017292706, -0.0055520623, 0.02445998, 0.042412016, 0.022870523, 0.0025939058, 0.033312374, -0.14675988, -0.2544721, -0.13722314, -0.015563435, 0.010086246, -0.044435631, -0.077048496, -0.041548117, -0.0047122623, -0.00018506874, 0.00081533267, 0.0014137339, 0.00076235077, 8.6463528e-05, 0.00049351665, -0.0021742205, -0.003769957, -0.0020329354, -0.00023056941, 0.00074027497, -0.0032613307, -0.0056549355, -0.0030494031, -0.00034585411, -0.0044416498, 0.019567984, 0.033929613, 0.018296418, 0.0020751247, -0.0013448329, 0.0059247507, 0.010273133, 0.0055397489, 0.00062830164, -2.3133593e-05, 0.00010191658, 0.00017671673, 9.5293846e-05, 1.0807941e-05, 6.1689581e-05, -0.00027177756, -0.00047124462, -0.00025411692, -2.8821176e-05, 9.2534371e-05, -0.00040766634, -0.00070686694, -0.00038117538, -4.3231764e-05, -0.00055520623, 0.002445998, 0.0042412016, 0.0022870523, 0.00025939058, -0.00016810411, 0.00074059384, 0.0012841416, 0.00069246861, 7.8537705e-05,
+ 0.00027683046, -0.00073821456, -0.0011073218, 0.0066439311, 0.0020116347, -0.00073821456, 0.0019685722, 0.0029528583, -0.01771715, -0.0053643592, -0.0011073218, 0.0029528583, 0.0044292874, -0.026575724, -0.0080465387, 0.0066439311, -0.01771715, -0.026575724, 0.15945435, 0.048279232, 0.0020116347, -0.0053643592, -0.0080465387, 0.048279232, 0.014617879, 0.00037087335, -0.00098899559, -0.0014834934, 0.0089009603, 0.002695013, -0.00098899559, 0.0026373216, 0.0039559823, -0.023735894, -0.0071867013, -0.0014834934, 0.0039559823, 0.0059339735, -0.035603841, -0.010780052, 0.0089009603, -0.023735894, -0.035603841, 0.21362305, 0.064680311, 0.002695013, -0.0071867013, -0.010780052, 0.064680311, 0.019583761, -0.0003973643, 0.0010596381, 0.0015894572, -0.0095367432, -0.0028875139, 0.0010596381, -0.0028257017, -0.0042385525, 0.025431315, 0.0077000371, 0.0015894572, -0.0042385525, -0.0063578288, 0.038146973, 0.011550056, -0.0095367432, 0.025431315, 0.038146973, -0.22888184, -0.069300334, -0.0028875139, 0.0077000371, 0.011550056, -0.069300334, -0.020982601, 5.2981906e-05, -0.00014128508, -0.00021192763, 0.0012715658, 0.00038500185, -0.00014128508, 0.00037676022, 0.00056514034, -0.003390842, -0.0010266716, -0.00021192763, 0.00056514034, 0.0008477105, -0.005086263, -0.0015400074, 0.0012715658, -0.003390842, -0.005086263, 0.030517578, 0.0092400445, 0.00038500185, -0.0010266716, -0.0015400074, 0.0092400445, 0.0027976801, 6.6227383e-06, -1.7660635e-05, -2.6490953e-05, 0.00015894572, 4.8125232e-05, -1.7660635e-05, 4.7095028e-05, 7.0642542e-05, -0.00042385525, -0.00012833395, -2.6490953e-05, 7.0642542e-05, 0.00010596381, -0.00063578288, -0.00019250093, 0.00015894572, -0.00042385525, -0.00063578288, 0.0038146973, 0.0011550056, 4.8125232e-05, -0.00012833395, -0.00019250093, 0.0011550056, 0.00034971002,
+ -0.00010573386, 0.00051982609, -0.0004383149, -0.00093814767, 2.1146771e-05, 0.00028195695, -0.0013862029, 0.0011688397, 0.0025017271, -5.639139e-05, 0.00042293543, -0.0020793044, 0.0017532596, 0.0037525907, -8.4587085e-05, -0.0025376126, 0.012475826, -0.010519558, -0.022515544, 0.00050752251, -0.00076833269, 0.0037774029, -0.0031850883, -0.0068172064, 0.00015366654, -0.00014165301, 0.00069641773, -0.00058721613, -0.0012568486, 2.8330603e-05, 0.00037774137, -0.0018571139, 0.0015659097, 0.0033515962, -7.5548274e-05, 0.00056661206, -0.0027856709, 0.0023488645, 0.0050273942, -0.00011332241, -0.0033996723, 0.016714025, -0.014093187, -0.030164365, 0.00067993447, -0.0010293452, 0.0050606355, -0.0042671039, -0.0091330995, 0.00020586905, 0.00015177109, -0.00074616185, 0.00062916014, 0.0013466235, -3.0354217e-05, -0.0004047229, 0.0019897649, -0.0016777604, -0.0035909959, 8.0944579e-05, -0.00060708434, 0.0029846474, -0.0025166406, -0.0053864938, 0.00012141687, 0.0036425061, -0.017907884, 0.015099843, 0.032318963, -0.00072850121, 0.0011028699, -0.0054221094, 0.004571897, 0.0097854638, -0.00022057398, -2.0236145e-05, 9.9488247e-05, -8.3888019e-05, -0.00017954979, 4.047229e-06, 5.3963053e-05, -0.00026530199, 0.00022370138, 0.00047879945, -1.0792611e-05, 8.0944579e-05, -0.00039795299, 0.00033555207, 0.00071819918, -1.6188916e-05, -0.00048566748, 0.0023877179, -0.0020133124, -0.0043091951, 9.7133495e-05, -0.00014704932, 0.00072294793, -0.00060958627, -0.0013047285, 2.9409864e-05, -2.5295181e-06, 1.2436031e-05, -1.0486002e-05, -2.2443724e-05, 5.0590362e-07, 6.7453816e-06, -3.3162749e-05, 2.7962673e-05, 5.9849931e-05, -1.3490763e-06, 1.0118072e-05, -4.9744123e-05, 4.1944009e-05, 8.9774897e-05, -2.0236145e-06, -6.0708434e-05, 0.00029846474, -0.00025166406, -0.00053864938, 1.2141687e-05, -1.8381165e-05, 9.0368491e-05, -7.6198284e-05, -0.00016309106, 3.676233e-06,
+ 0.0012303576, -0.0019685722, -0.0029528583, 0.0051182876, 0.0012303576, -0.0032809536, 0.0052495258, 0.0078742887, -0.013648767, -0.0032809536, -0.0049214304, 0.0078742887, 0.011811433, -0.020473151, -0.0049214304, 0.029528583, -0.047245732, -0.070868598, 0.1228389, 0.029528583, 0.0089405986, -0.014304958, -0.021457437, 0.03719289, 0.0089405986, 0.001648326, -0.0026373216, -0.0039559823, 0.0068570361, 0.001648326, -0.0043955359, 0.0070328575, 0.010549286, -0.01828543, -0.0043955359, -0.0065933039, 0.010549286, 0.015823929, -0.027428144, -0.0065933039, 0.039559823, -0.063295718, -0.094943576, 0.16456887, 0.039559823, 0.011977835, -0.019164537, -0.028746805, 0.049827795, 0.011977835, -0.0017660635, 0.0028257017, 0.0042385525, -0.0073468244, -0.0017660635, 0.0047095028, -0.0075352045, -0.011302807, 0.019591532, 0.0047095028, 0.0070642542, -0.011302807, -0.01695421, 0.029387297, 0.0070642542, -0.042385525, 0.06781684, 0.10172526, -0.17632378, -0.042385525, -0.012833395, 0.020533432, 0.030800148, -0.053386924, -0.012833395, 0.00023547514, -0.00037676022, -0.00056514034, 0.00097957658, 0.00023547514, -0.00062793371, 0.0010046939, 0.0015070409, -0.0026122042, -0.00062793371, -0.00094190056, 0.0015070409, 0.0022605613, -0.0039183063, -0.00094190056, 0.0056514034, -0.0090422454, -0.013563368, 0.023509838, 0.0056514034, 0.0017111193, -0.002737791, -0.0041066864, 0.0071182565, 0.0017111193, 2.9434392e-05, -4.7095028e-05, -7.0642542e-05, 0.00012244707, 2.9434392e-05, -7.8491713e-05, 0.00012558674, 0.00018838011, -0.00032652553, -7.8491713e-05, -0.00011773757, 0.00018838011, 0.00028257017, -0.00048978829, -0.00011773757, 0.00070642542, -0.0011302807, -0.001695421, 0.0029387297, 0.00070642542, 0.00021388992, -0.00034222387, -0.0005133358, 0.00088978206, 0.00021388992,
+ -0.0039286002, -0.0052631964, 0.005639139, -0.0007518852, -9.398565e-05, 0.019314427, 0.025875788, -0.027724058, 0.0036965411, 0.00046206763, -0.016285834, -0.021818342, 0.023376795, -0.0031169059, -0.00038961324, -0.034857398, -0.046698906, 0.050034543, -0.0066712724, -0.00083390904, 0.00078572004, 0.0010526393, -0.0011278278, 0.00015037704, 1.879713e-05, -0.0052631964, -0.0070511722, 0.0075548274, -0.0010073103, -0.00012591379, 0.025875788, 0.034666127, -0.037142279, 0.0049523038, 0.00061903798, -0.021818342, -0.029230314, 0.031318194, -0.0041757591, -0.00052196989, -0.046698906, -0.062563128, 0.067031923, -0.0089375898, -0.0011171987, 0.0010526393, 0.0014102344, -0.0015109655, 0.00020146206, 2.5182758e-05, 0.005639139, 0.0075548274, -0.0080944579, 0.0010792611, 0.00013490763, -0.027724058, -0.037142279, 0.039795299, -0.0053060398, -0.00066325498, 0.023376795, 0.031318194, -0.033555207, 0.0044740277, 0.00055925346, 0.050034543, 0.067031923, -0.071819918, 0.009575989, 0.0011969986, -0.0011278278, -0.0015109655, 0.0016188916, -0.00021585221, -2.6981526e-05, -0.0007518852, -0.0010073103, 0.0010792611, -0.00014390147, -1.7987684e-05, 0.0036965411, 0.0049523038, -0.0053060398, 0.00070747198, 8.8433997e-05, -0.0031169059, -0.0041757591, 0.0044740277, -0.00059653702, -7.4567128e-05, -0.0066712724, -0.0089375898, 0.009575989, -0.0012767985, -0.00015959982, 0.00015037704, 0.00020146206, -0.00021585221, 2.8780295e-05, 3.5975369e-06, -9.398565e-05, -0.00012591379, 0.00013490763, -1.7987684e-05, -2.2484605e-06, 0.00046206763, 0.00061903798, -0.00066325498, 8.8433997e-05, 1.105425e-05, -0.00038961324, -0.00052196989, 0.00055925346, -7.4567128e-05, -9.320891e-06, -0.00083390904, -0.0011171987, 0.0011969986, -0.00015959982, -1.9949977e-05, 1.879713e-05, 2.5182758e-05, -2.6981526e-05, 3.5975369e-06, 4.4969211e-07,
+ 0.00036933424, -0.0016271266, -0.0028213317, -0.0015213927, -0.00017255178, -0.0018157814, 0.0079995459, 0.013870693, 0.0074797198, 0.0008483273, 0.0015310583, -0.0067451792, -0.011695703, -0.0063068644, -0.00071530556, 0.0032770019, -0.01443705, -0.025032907, -0.013498903, -0.0015310049, -7.3866847e-05, 0.00032542531, 0.00056426635, 0.00030427854, 3.4510356e-05, 0.00049480185, -0.0021798825, -0.0037797746, -0.0020382295, -0.00023116985, -0.0024326258, 0.010717095, 0.018582746, 0.010020677, 0.001136515, 0.0020511786, -0.0090366038, -0.015668884, -0.0084493876, -0.0009583041, 0.0043902418, -0.019341503, -0.033536909, -0.018084654, -0.002051107, -9.8960369e-05, 0.0004359765, 0.00075595492, 0.0004076459, 4.623397e-05, -0.00053014484, 0.0023355884, 0.0040497585, 0.0021838173, 0.00024768198, 0.0026063848, -0.011482602, -0.019910085, -0.01073644, -0.0012176947, -0.0021976913, 0.0096820755, 0.01678809, 0.0090529153, 0.0010267544, -0.0047038305, 0.020723039, 0.035932403, 0.019376415, 0.0021976147, 0.00010602897, -0.00046711768, -0.0008099517, -0.00043676346, -4.9536396e-05, 7.0685978e-05, -0.00031141178, -0.0005399678, -0.00029117564, -3.3024264e-05, -0.00034751797, 0.0015310136, 0.002654678, 0.0014315253, 0.00016235929, 0.00029302551, -0.0012909434, -0.002238412, -0.0012070554, -0.00013690059, 0.00062717741, -0.0027630718, -0.004790987, -0.002583522, -0.00029301529, -1.4137196e-05, 6.2282357e-05, 0.00010799356, 5.8235128e-05, 6.6048528e-06, 8.8357473e-06, -3.8926473e-05, -6.7495975e-05, -3.6396955e-05, -4.128033e-06, -4.3439747e-05, 0.0001913767, 0.00033183476, 0.00017894067, 2.0294911e-05, 3.6628189e-05, -0.00016136792, -0.0002798015, -0.00015088192, -1.7112573e-05, 7.8397176e-05, -0.00034538398, -0.00059887338, -0.00032294025, -3.6626911e-05, -1.7671495e-06, 7.7852946e-06, 1.3499195e-05, 7.279391e-06, 8.256066e-07,
+ -0.00010573386, 0.00028195695, 0.00042293543, -0.0025376126, -0.00076833269, 0.00051982609, -0.0013862029, -0.0020793044, 0.012475826, 0.0037774029, -0.0004383149, 0.0011688397, 0.0017532596, -0.010519558, -0.0031850883, -0.00093814767, 0.0025017271, 0.0037525907, -0.022515544, -0.0068172064, 2.1146771e-05, -5.639139e-05, -8.4587085e-05, 0.00050752251, 0.00015366654, -0.00014165301, 0.00037774137, 0.00056661206, -0.0033996723, -0.0010293452, 0.00069641773, -0.0018571139, -0.0027856709, 0.016714025, 0.0050606355, -0.00058721613, 0.0015659097, 0.0023488645, -0.014093187, -0.0042671039, -0.0012568486, 0.0033515962, 0.0050273942, -0.030164365, -0.0091330995, 2.8330603e-05, -7.5548274e-05, -0.00011332241, 0.00067993447, 0.00020586905, 0.00015177109, -0.0004047229, -0.00060708434, 0.0036425061, 0.0011028699, -0.00074616185, 0.0019897649, 0.0029846474, -0.017907884, -0.0054221094, 0.00062916014, -0.0016777604, -0.0025166406, 0.015099843, 0.004571897, 0.0013466235, -0.0035909959, -0.0053864938, 0.032318963, 0.0097854638, -3.0354217e-05, 8.0944579e-05, 0.00012141687, -0.00072850121, -0.00022057398, -2.0236145e-05, 5.3963053e-05, 8.0944579e-05, -0.00048566748, -0.00014704932, 9.9488247e-05, -0.00026530199, -0.00039795299, 0.0023877179, 0.00072294793, -8.3888019e-05, 0.00022370138, 0.00033555207, -0.0020133124, -0.00060958627, -0.00017954979, 0.00047879945, 0.00071819918, -0.0043091951, -0.0013047285, 4.047229e-06, -1.0792611e-05, -1.6188916e-05, 9.7133495e-05, 2.9409864e-05, -2.5295181e-06, 6.7453816e-06, 1.0118072e-05, -6.0708434e-05, -1.8381165e-05, 1.2436031e-05, -3.3162749e-05, -4.9744123e-05, 0.00029846474, 9.0368491e-05, -1.0486002e-05, 2.7962673e-05, 4.1944009e-05, -0.00025166406, -7.6198284e-05, -2.2443724e-05, 5.9849931e-05, 8.9774897e-05, -0.00053864938, -0.00016309106, 5.0590362e-07, -1.3490763e-06, -2.0236145e-06, 1.2141687e-05, 3.676233e-06,
+ 4.0384459e-05, -0.00019854469, 0.00016741194, 0.00035832029, -8.0768918e-06, -0.00019854469, 0.00097611788, -0.00082305797, -0.0017616329, 3.9708937e-05, 0.00016741194, -0.00082305797, 0.00069399859, 0.0014854005, -3.3482388e-05, 0.00035832029, -0.0017616329, 0.0014854005, 0.0031792782, -7.1664058e-05, -8.0768918e-06, 3.9708937e-05, -3.3482388e-05, -7.1664058e-05, 1.6153784e-06, 5.4103582e-05, -0.00026599288, 0.00022428394, 0.00048004632, -1.0820716e-05, -0.00026599288, 0.0013077177, -0.0011026614, -0.0023600823, 5.3198576e-05, 0.00022428394, -0.0011026614, 0.00092975887, 0.0019900102, -4.4856788e-05, 0.00048004632, -0.0023600823, 0.0019900102, 0.0042593201, -9.6009265e-05, -1.0820716e-05, 5.3198576e-05, -4.4856788e-05, -9.6009265e-05, 2.1641433e-06, -5.7968123e-05, 0.00028499237, -0.00024030422, -0.00051433535, 1.1593625e-05, 0.00028499237, -0.0014011261, 0.0011814229, 0.0025286596, -5.6998475e-05, -0.00024030422, 0.0011814229, -0.00099617022, -0.0021321538, 4.8060844e-05, -0.00051433535, 0.0025286596, -0.0021321538, -0.0045635573, 0.00010286707, 1.1593625e-05, -5.6998475e-05, 4.8060844e-05, 0.00010286707, -2.3187249e-06, 7.7290831e-06, -3.7998983e-05, 3.2040563e-05, 6.8578046e-05, -1.5458166e-06, -3.7998983e-05, 0.00018681682, -0.00015752306, -0.00033715461, 7.5997966e-06, 3.2040563e-05, -0.00015752306, 0.0001328227, 0.00028428717, -6.4081125e-06, 6.8578046e-05, -0.00033715461, 0.00028428717, 0.0006084743, -1.3715609e-05, -1.5458166e-06, 7.5997966e-06, -6.4081125e-06, -1.3715609e-05, 3.0916332e-07, 9.6613539e-07, -4.7498729e-06, 4.0050703e-06, 8.5722558e-06, -1.9322708e-07, -4.7498729e-06, 2.3352102e-05, -1.9690382e-05, -4.2144327e-05, 9.4997458e-07, 4.0050703e-06, -1.9690382e-05, 1.6602837e-05, 3.5535897e-05, -8.0101407e-07, 8.5722558e-06, -4.2144327e-05, 3.5535897e-05, 7.6059288e-05, -1.7144512e-06, -1.9322708e-07, 9.4997458e-07, -8.0101407e-07, -1.7144512e-06, 3.8645415e-08,
+ -0.00046992825, 0.0007518852, 0.0011278278, -0.0019549015, -0.00046992825, 0.0023103382, -0.0036965411, -0.0055448116, 0.0096110068, 0.0023103382, -0.0019480662, 0.0031169059, 0.0046753589, -0.0081039554, -0.0019480662, -0.0041695452, 0.0066712724, 0.010006909, -0.017345308, -0.0041695452, 9.398565e-05, -0.00015037704, -0.00022556556, 0.00039098031, 9.398565e-05, -0.00062956895, 0.0010073103, 0.0015109655, -0.0026190068, -0.00062956895, 0.0030951899, -0.0049523038, -0.0074284557, 0.01287599, 0.0030951899, -0.0026098495, 0.0041757591, 0.0062636387, -0.010856974, -0.0026098495, -0.0055859936, 0.0089375898, 0.013406385, -0.023237733, -0.0055859936, 0.00012591379, -0.00020146206, -0.0003021931, 0.00052380137, 0.00012591379, 0.00067453816, -0.0010792611, -0.0016188916, 0.0028060787, 0.00067453816, -0.0033162749, 0.0053060398, 0.0079590597, -0.013795704, -0.0033162749, 0.0027962673, -0.0044740277, -0.0067110415, 0.011632472, 0.0027962673, 0.0059849931, -0.009575989, -0.014363984, 0.024897571, 0.0059849931, -0.00013490763, 0.00021585221, 0.00032377832, -0.00056121575, -0.00013490763, -8.9938421e-05, 0.00014390147, 0.00021585221, -0.00037414383, -8.9938421e-05, 0.00044216998, -0.00070747198, -0.001061208, 0.0018394271, 0.00044216998, -0.00037283564, 0.00059653702, 0.00089480553, -0.0015509963, -0.00037283564, -0.00079799909, 0.0012767985, 0.0019151978, -0.0033196762, -0.00079799909, 1.7987684e-05, -2.8780295e-05, -4.3170442e-05, 7.4828767e-05, 1.7987684e-05, -1.1242303e-05, 1.7987684e-05, 2.6981526e-05, -4.6767979e-05, -1.1242303e-05, 5.5271248e-05, -8.8433997e-05, -0.000132651, 0.00022992839, 5.5271248e-05, -4.6604455e-05, 7.4567128e-05, 0.00011185069, -0.00019387453, -4.6604455e-05, -9.9749886e-05, 0.00015959982, 0.00023939973, -0.00041495952, -9.9749886e-05, 2.2484605e-06, -3.5975369e-06, -5.3963053e-06, 9.3535958e-06, 2.2484605e-06,
+ 0.04571462, 0.061244467, -0.065619072, 0.0087492096, 0.0010936512, -0.073143393, -0.097991148, 0.10499052, -0.013998735, -0.0017498419, -0.10971509, -0.14698672, 0.15748577, -0.020998103, -0.0026247629, 0.19017282, 0.25477698, -0.27297534, 0.036396712, 0.004549589, 0.04571462, 0.061244467, -0.065619072, 0.0087492096, 0.0010936512, 0.061244467, 0.082050004, -0.087910719, 0.011721429, 0.0014651786, -0.097991148, -0.13128001, 0.14065715, -0.018754287, -0.0023442858, -0.14698672, -0.19692001, 0.21098573, -0.02813143, -0.0035164288, 0.25477698, 0.34132802, -0.36570859, 0.048761145, 0.0060951432, 0.061244467, 0.082050004, -0.087910719, 0.011721429, 0.0014651786, -0.065619072, -0.087910719, 0.094190056, -0.012558674, -0.0015698343, 0.10499052, 0.14065715, -0.15070409, 0.020093879, 0.0025117348, 0.15748577, 0.21098573, -0.22605613, 0.030140818, 0.0037676022, -0.27297534, -0.36570859, 0.39183063, -0.052244084, -0.0065305105, -0.065619072, -0.087910719, 0.094190056, -0.012558674, -0.0015698343, 0.0087492096, 0.011721429, -0.012558674, 0.0016744899, 0.00020931124, -0.013998735, -0.018754287, 0.020093879, -0.0026791838, -0.00033489798, -0.020998103, -0.02813143, 0.030140818, -0.0040187757, -0.00050234697, 0.036396712, 0.048761145, -0.052244084, 0.0069658779, 0.00087073474, 0.0087492096, 0.011721429, -0.012558674, 0.0016744899, 0.00020931124, 0.0010936512, 0.0014651786, -0.0015698343, 0.00020931124, 2.6163904e-05, -0.0017498419, -0.0023442858, 0.0025117348, -0.00033489798, -4.1862247e-05, -0.0026247629, -0.0035164288, 0.0037676022, -0.00050234697, -6.2793371e-05, 0.004549589, 0.0060951432, -0.0065305105, 0.00087073474, 0.00010884184, 0.0010936512, 0.0014651786, -0.0015698343, 0.00020931124, 2.6163904e-05,
+ -0.0042977075, 0.018933836, 0.032830042, 0.017703479, 0.0020078753, 0.006876332, -0.030294138, -0.052528067, -0.028325566, -0.0032126004, 0.010314498, -0.045441208, -0.078792101, -0.042488349, -0.0048189006, -0.017878463, 0.07876476, 0.13657298, 0.073646472, 0.0083527611, -0.0042977075, 0.018933836, 0.032830042, 0.017703479, 0.0020078753, -0.0057576942, 0.025365905, 0.043982832, 0.023717579, 0.0026899764, 0.0092123107, -0.040585449, -0.07037253, -0.037948127, -0.0043039623, 0.013818466, -0.060878173, -0.1055588, -0.05692219, -0.0064559434, -0.023952008, 0.10552217, 0.18296858, 0.09866513, 0.011190302, -0.0057576942, 0.025365905, 0.043982832, 0.023717579, 0.0026899764, 0.0061689581, -0.027177756, -0.047124462, -0.025411692, -0.0028821176, -0.0098703329, 0.043484409, 0.07539914, 0.040658707, 0.0046113882, -0.014805499, 0.065226614, 0.11309871, 0.060988061, 0.0069170822, 0.025662866, -0.11305946, -0.19603776, -0.10571264, -0.011989609, 0.0061689581, -0.027177756, -0.047124462, -0.025411692, -0.0028821176, -0.00082252775, 0.0036237008, 0.0062832616, 0.0033882256, 0.00038428235, 0.0013160444, -0.0057979212, -0.010053219, -0.005421161, -0.00061485175, 0.0019740666, -0.0086968818, -0.015079828, -0.0081317415, -0.00092227763, -0.0034217154, 0.015074595, 0.026138368, 0.014095019, 0.0015986146, -0.00082252775, 0.0036237008, 0.0062832616, 0.0033882256, 0.00038428235, -0.00010281597, 0.0004529626, 0.00078540771, 0.0004235282, 4.8035293e-05, 0.00016450555, -0.00072474015, -0.0012566523, -0.00067764512, -7.6856469e-05, 0.00024675832, -0.0010871102, -0.0018849785, -0.0010164677, -0.0001152847, -0.00042771443, 0.0018843244, 0.0032672961, 0.0017618773, 0.00019982682, -0.00010281597, 0.0004529626, 0.00078540771, 0.0004235282, 4.8035293e-05,
+ 0.0012303576, -0.0032809536, -0.0049214304, 0.029528583, 0.0089405986, -0.0019685722, 0.0052495258, 0.0078742887, -0.047245732, -0.014304958, -0.0029528583, 0.0078742887, 0.011811433, -0.070868598, -0.021457437, 0.0051182876, -0.013648767, -0.020473151, 0.1228389, 0.03719289, 0.0012303576, -0.0032809536, -0.0049214304, 0.029528583, 0.0089405986, 0.001648326, -0.0043955359, -0.0065933039, 0.039559823, 0.011977835, -0.0026373216, 0.0070328575, 0.010549286, -0.063295718, -0.019164537, -0.0039559823, 0.010549286, 0.015823929, -0.094943576, -0.028746805, 0.0068570361, -0.01828543, -0.027428144, 0.16456887, 0.049827795, 0.001648326, -0.0043955359, -0.0065933039, 0.039559823, 0.011977835, -0.0017660635, 0.0047095028, 0.0070642542, -0.042385525, -0.012833395, 0.0028257017, -0.0075352045, -0.011302807, 0.06781684, 0.020533432, 0.0042385525, -0.011302807, -0.01695421, 0.10172526, 0.030800148, -0.0073468244, 0.019591532, 0.029387297, -0.17632378, -0.053386924, -0.0017660635, 0.0047095028, 0.0070642542, -0.042385525, -0.012833395, 0.00023547514, -0.00062793371, -0.00094190056, 0.0056514034, 0.0017111193, -0.00037676022, 0.0010046939, 0.0015070409, -0.0090422454, -0.002737791, -0.00056514034, 0.0015070409, 0.0022605613, -0.013563368, -0.0041066864, 0.00097957658, -0.0026122042, -0.0039183063, 0.023509838, 0.0071182565, 0.00023547514, -0.00062793371, -0.00094190056, 0.0056514034, 0.0017111193, 2.9434392e-05, -7.8491713e-05, -0.00011773757, 0.00070642542, 0.00021388992, -4.7095028e-05, 0.00012558674, 0.00018838011, -0.0011302807, -0.00034222387, -7.0642542e-05, 0.00018838011, 0.00028257017, -0.001695421, -0.0005133358, 0.00012244707, -0.00032652553, -0.00048978829, 0.0029387297, 0.00088978206, 2.9434392e-05, -7.8491713e-05, -0.00011773757, 0.00070642542, 0.00021388992,
+ -0.00046992825, 0.0023103382, -0.0019480662, -0.0041695452, 9.398565e-05, 0.0007518852, -0.0036965411, 0.0031169059, 0.0066712724, -0.00015037704, 0.0011278278, -0.0055448116, 0.0046753589, 0.010006909, -0.00022556556, -0.0019549015, 0.0096110068, -0.0081039554, -0.017345308, 0.00039098031, -0.00046992825, 0.0023103382, -0.0019480662, -0.0041695452, 9.398565e-05, -0.00062956895, 0.0030951899, -0.0026098495, -0.0055859936, 0.00012591379, 0.0010073103, -0.0049523038, 0.0041757591, 0.0089375898, -0.00020146206, 0.0015109655, -0.0074284557, 0.0062636387, 0.013406385, -0.0003021931, -0.0026190068, 0.01287599, -0.010856974, -0.023237733, 0.00052380137, -0.00062956895, 0.0030951899, -0.0026098495, -0.0055859936, 0.00012591379, 0.00067453816, -0.0033162749, 0.0027962673, 0.0059849931, -0.00013490763, -0.0010792611, 0.0053060398, -0.0044740277, -0.009575989, 0.00021585221, -0.0016188916, 0.0079590597, -0.0067110415, -0.014363984, 0.00032377832, 0.0028060787, -0.013795704, 0.011632472, 0.024897571, -0.00056121575, 0.00067453816, -0.0033162749, 0.0027962673, 0.0059849931, -0.00013490763, -8.9938421e-05, 0.00044216998, -0.00037283564, -0.00079799909, 1.7987684e-05, 0.00014390147, -0.00070747198, 0.00059653702, 0.0012767985, -2.8780295e-05, 0.00021585221, -0.001061208, 0.00089480553, 0.0019151978, -4.3170442e-05, -0.00037414383, 0.0018394271, -0.0015509963, -0.0033196762, 7.4828767e-05, -8.9938421e-05, 0.00044216998, -0.00037283564, -0.00079799909, 1.7987684e-05, -1.1242303e-05, 5.5271248e-05, -4.6604455e-05, -9.9749886e-05, 2.2484605e-06, 1.7987684e-05, -8.8433997e-05, 7.4567128e-05, 0.00015959982, -3.5975369e-06, 2.6981526e-05, -0.000132651, 0.00011185069, 0.00023939973, -5.3963053e-06, -4.6767979e-05, 0.00022992839, -0.00019387453, -0.00041495952, 9.3535958e-06, -1.1242303e-05, 5.5271248e-05, -4.6604455e-05, -9.9749886e-05, 2.2484605e-06,
+ 0.005468256, -0.0087492096, -0.013123814, 0.022747945, 0.005468256, -0.0087492096, 0.013998735, 0.020998103, -0.036396712, -0.0087492096, -0.013123814, 0.020998103, 0.031497155, -0.054595068, -0.013123814, 0.022747945, -0.036396712, -0.054595068, 0.094631451, 0.022747945, 0.005468256, -0.0087492096, -0.013123814, 0.022747945, 0.005468256, 0.0073258932, -0.011721429, -0.017582144, 0.030475716, 0.0073258932, -0.011721429, 0.018754287, 0.02813143, -0.048761145, -0.011721429, -0.017582144, 0.02813143, 0.042197145, -0.073141718, -0.017582144, 0.030475716, -0.048761145, -0.073141718, 0.12677898, 0.030475716, 0.0073258932, -0.011721429, -0.017582144, 0.030475716, 0.0073258932, -0.0078491713, 0.012558674, 0.018838011, -0.032652553, -0.0078491713, 0.012558674, -0.020093879, -0.030140818, 0.052244084, 0.012558674, 0.018838011, -0.030140818, -0.045211227, 0.078366127, 0.018838011, -0.032652553, 0.052244084, 0.078366127, -0.13583462, -0.032652553, -0.0078491713, 0.012558674, 0.018838011, -0.032652553, -0.0078491713, 0.0010465562, -0.0016744899, -0.0025117348, 0.0043536737, 0.0010465562, -0.0016744899, 0.0026791838, 0.0040187757, -0.0069658779, -0.0016744899, -0.0025117348, 0.0040187757, 0.0060281636, -0.010448817, -0.0025117348, 0.0043536737, -0.0069658779, -0.010448817, 0.018111283, 0.0043536737, 0.0010465562, -0.0016744899, -0.0025117348, 0.0043536737, 0.0010465562, 0.00013081952, -0.00020931124, -0.00031396685, 0.00054420921, 0.00013081952, -0.00020931124, 0.00033489798, 0.00050234697, -0.00087073474, -0.00020931124, -0.00031396685, 0.00050234697, 0.00075352045, -0.0013061021, -0.00031396685, 0.00054420921, -0.00087073474, -0.0013061021, 0.0022639103, 0.00054420921, 0.00013081952, -0.00020931124, -0.00031396685, 0.00054420921, 0.00013081952,
+ -0.035928834, -0.048134324, 0.05157249, -0.006876332, -0.00085954149, -0.048134324, -0.064486175, 0.069092331, -0.0092123107, -0.0011515388, 0.05157249, 0.069092331, -0.074027497, 0.0098703329, 0.0012337916, -0.006876332, -0.0092123107, 0.0098703329, -0.0013160444, -0.00016450555, -0.00085954149, -0.0011515388, 0.0012337916, -0.00016450555, -2.0563194e-05, 0.15828687, 0.21205897, -0.22720604, 0.030294138, 0.0037867673, 0.21205897, 0.28409814, -0.30439086, 0.040585449, 0.0050731811, -0.22720604, -0.30439086, 0.32613307, -0.043484409, -0.0054355511, 0.030294138, 0.040585449, -0.043484409, 0.0057979212, 0.00072474015, 0.0037867673, 0.0050731811, -0.0054355511, 0.00072474015, 9.0592519e-05, 0.27445915, 0.36769647, -0.39396051, 0.052528067, 0.0065660084, 0.36769647, 0.49260771, -0.52779398, 0.07037253, 0.0087965663, -0.39396051, -0.52779398, 0.56549355, -0.07539914, -0.0094248925, 0.052528067, 0.07037253, -0.07539914, 0.010053219, 0.0012566523, 0.0065660084, 0.0087965663, -0.0094248925, 0.0012566523, 0.00015708154, 0.14800108, 0.19827896, -0.21244175, 0.028325566, 0.0035406958, 0.19827896, 0.26563689, -0.28461095, 0.037948127, 0.0047435159, -0.21244175, -0.28461095, 0.30494031, -0.040658707, -0.0050823384, 0.028325566, 0.037948127, -0.040658707, 0.005421161, 0.00067764512, 0.0035406958, 0.0047435159, -0.0050823384, 0.00067764512, 8.4705641e-05, 0.016785837, 0.022488203, -0.024094503, 0.0032126004, 0.00040157505, 0.022488203, 0.030127736, -0.032279717, 0.0043039623, 0.00053799528, -0.024094503, -0.032279717, 0.034585411, -0.0046113882, -0.00057642352, 0.0032126004, 0.0043039623, -0.0046113882, 0.00061485175, 7.6856469e-05, 0.00040157505, 0.00053799528, -0.00057642352, 7.6856469e-05, 9.6070587e-06,
+ 0.0033777295, -0.014880812, -0.025802361, -0.013913828, -0.0015780645, 0.0045251878, -0.019936016, -0.034567757, -0.018640535, -0.0021141533, -0.0048484155, 0.021360017, 0.037036882, 0.019972002, 0.0022651643, 0.0006464554, -0.0028480023, -0.004938251, -0.0026629336, -0.00030202191, 8.0806925e-05, -0.00035600029, -0.00061728137, -0.0003328667, -3.7752738e-05, -0.014880812, 0.065558409, 0.11367402, 0.061298296, 0.0069522681, -0.019936016, 0.087829447, 0.15229055, 0.082122119, 0.0093140434, 0.021360017, -0.094102979, -0.16316845, -0.087987984, -0.0099793322, -0.0028480023, 0.012547064, 0.021755793, 0.011731731, 0.0013305776, -0.00035600029, 0.001568383, 0.0027194742, 0.0014664664, 0.0001663222, -0.025802361, 0.11367402, 0.19710337, 0.10628726, 0.012054781, -0.034567757, 0.15229055, 0.26406192, 0.14239442, 0.016149946, 0.037036882, -0.16316845, -0.28292349, -0.15256545, -0.017303514, -0.004938251, 0.021755793, 0.037723132, 0.02034206, 0.0023071351, -0.00061728137, 0.0027194742, 0.0047153915, 0.0025427574, 0.00028839189, -0.013913828, 0.061298296, 0.10628726, 0.057315013, 0.0065004962, -0.018640535, 0.082122119, 0.14239442, 0.076785663, 0.0087087987, 0.019972002, -0.087987984, -0.15256545, -0.082270353, -0.0093308557, -0.0026629336, 0.011731731, 0.02034206, 0.01096938, 0.0012441141, -0.0003328667, 0.0014664664, 0.0025427574, 0.0013711726, 0.00015551426, -0.0015780645, 0.0069522681, 0.012054781, 0.0065004962, 0.0007372667, -0.0021141533, 0.0093140434, 0.016149946, 0.0087087987, 0.00098772572, 0.0022651643, -0.0099793322, -0.017303514, -0.0093308557, -0.0010582776, -0.00030202191, 0.0013305776, 0.0023071351, 0.0012441141, 0.00014110367, -3.7752738e-05, 0.0001663222, 0.00028839189, 0.00015551426, 1.7637959e-05,
+ -0.00096698418, 0.0025786245, 0.0038679367, -0.02320762, -0.0070267517, -0.0012954812, 0.0034546165, 0.0051819248, -0.031091549, -0.00941383, 0.0013880156, -0.0037013749, -0.0055520623, 0.033312374, 0.010086246, -0.00018506874, 0.00049351665, 0.00074027497, -0.0044416498, -0.0013448329, -2.3133593e-05, 6.1689581e-05, 9.2534371e-05, -0.00055520623, -0.00016810411, 0.0042601132, -0.011360302, -0.017040453, 0.10224272, 0.030956823, 0.0057073287, -0.015219543, -0.022829315, 0.13697589, 0.041473255, -0.006114995, 0.016306653, 0.02445998, -0.14675988, -0.044435631, 0.00081533267, -0.0021742205, -0.0032613307, 0.019567984, 0.0059247507, 0.00010191658, -0.00027177756, -0.00040766634, 0.002445998, 0.00074059384, 0.0073867595, -0.019698025, -0.029547038, 0.17728223, 0.053677119, 0.0098961371, -0.026389699, -0.039584548, 0.23750729, 0.07191193, -0.010603004, 0.028274677, 0.042412016, -0.2544721, -0.077048496, 0.0014137339, -0.003769957, -0.0056549355, 0.033929613, 0.010273133, 0.00017671673, -0.00047124462, -0.00070686694, 0.0042412016, 0.0012841416, 0.0039832827, -0.010622087, -0.015933131, 0.095598786, 0.028945188, 0.0053364554, -0.014230548, -0.021345821, 0.12807493, 0.038778242, -0.0057176307, 0.015247015, 0.022870523, -0.13722314, -0.041548117, 0.00076235077, -0.0020329354, -0.0030494031, 0.018296418, 0.0055397489, 9.5293846e-05, -0.00025411692, -0.00038117538, 0.0022870523, 0.00069246861, 0.00045177193, -0.0012047252, -0.0018070877, 0.010842526, 0.003282876, 0.0006052447, -0.0016139859, -0.0024209788, 0.014525873, 0.0043981115, -0.00064847646, 0.0017292706, 0.0025939058, -0.015563435, -0.0047122623, 8.6463528e-05, -0.00023056941, -0.00034585411, 0.0020751247, 0.00062830164, 1.0807941e-05, -2.8821176e-05, -4.3231764e-05, 0.00025939058, 7.8537705e-05,
+ 0.00036933424, -0.0018157814, 0.0015310583, 0.0032770019, -7.3866847e-05, 0.00049480185, -0.0024326258, 0.0020511786, 0.0043902418, -9.8960369e-05, -0.00053014484, 0.0026063848, -0.0021976913, -0.0047038305, 0.00010602897, 7.0685978e-05, -0.00034751797, 0.00029302551, 0.00062717741, -1.4137196e-05, 8.8357473e-06, -4.3439747e-05, 3.6628189e-05, 7.8397176e-05, -1.7671495e-06, -0.0016271266, 0.0079995459, -0.0067451792, -0.01443705, 0.00032542531, -0.0021798825, 0.010717095, -0.0090366038, -0.019341503, 0.0004359765, 0.0023355884, -0.011482602, 0.0096820755, 0.020723039, -0.00046711768, -0.00031141178, 0.0015310136, -0.0012909434, -0.0027630718, 6.2282357e-05, -3.8926473e-05, 0.0001913767, -0.00016136792, -0.00034538398, 7.7852946e-06, -0.0028213317, 0.013870693, -0.011695703, -0.025032907, 0.00056426635, -0.0037797746, 0.018582746, -0.015668884, -0.033536909, 0.00075595492, 0.0040497585, -0.019910085, 0.01678809, 0.035932403, -0.0008099517, -0.0005399678, 0.002654678, -0.002238412, -0.004790987, 0.00010799356, -6.7495975e-05, 0.00033183476, -0.0002798015, -0.00059887338, 1.3499195e-05, -0.0015213927, 0.0074797198, -0.0063068644, -0.013498903, 0.00030427854, -0.0020382295, 0.010020677, -0.0084493876, -0.018084654, 0.0004076459, 0.0021838173, -0.01073644, 0.0090529153, 0.019376415, -0.00043676346, -0.00029117564, 0.0014315253, -0.0012070554, -0.002583522, 5.8235128e-05, -3.6396955e-05, 0.00017894067, -0.00015088192, -0.00032294025, 7.279391e-06, -0.00017255178, 0.0008483273, -0.00071530556, -0.0015310049, 3.4510356e-05, -0.00023116985, 0.001136515, -0.0009583041, -0.002051107, 4.623397e-05, 0.00024768198, -0.0012176947, 0.0010267544, 0.0021976147, -4.9536396e-05, -3.3024264e-05, 0.00016235929, -0.00013690059, -0.00029301529, 6.6048528e-06, -4.128033e-06, 2.0294911e-05, -1.7112573e-05, -3.6626911e-05, 8.256066e-07,
+ -0.0042977075, 0.006876332, 0.010314498, -0.017878463, -0.0042977075, -0.0057576942, 0.0092123107, 0.013818466, -0.023952008, -0.0057576942, 0.0061689581, -0.0098703329, -0.014805499, 0.025662866, 0.0061689581, -0.00082252775, 0.0013160444, 0.0019740666, -0.0034217154, -0.00082252775, -0.00010281597, 0.00016450555, 0.00024675832, -0.00042771443, -0.00010281597, 0.018933836, -0.030294138, -0.045441208, 0.07876476, 0.018933836, 0.025365905, -0.040585449, -0.060878173, 0.10552217, 0.025365905, -0.027177756, 0.043484409, 0.065226614, -0.11305946, -0.027177756, 0.0036237008, -0.0057979212, -0.0086968818, 0.015074595, 0.0036237008, 0.0004529626, -0.00072474015, -0.0010871102, 0.0018843244, 0.0004529626, 0.032830042, -0.052528067, -0.078792101, 0.13657298, 0.032830042, 0.043982832, -0.07037253, -0.1055588, 0.18296858, 0.043982832, -0.047124462, 0.07539914, 0.11309871, -0.19603776, -0.047124462, 0.0062832616, -0.010053219, -0.015079828, 0.026138368, 0.0062832616, 0.00078540771, -0.0012566523, -0.0018849785, 0.0032672961, 0.00078540771, 0.017703479, -0.028325566, -0.042488349, 0.073646472, 0.017703479, 0.023717579, -0.037948127, -0.05692219, 0.09866513, 0.023717579, -0.025411692, 0.040658707, 0.060988061, -0.10571264, -0.025411692, 0.0033882256, -0.005421161, -0.0081317415, 0.014095019, 0.0033882256, 0.0004235282, -0.00067764512, -0.0010164677, 0.0017618773, 0.0004235282, 0.0020078753, -0.0032126004, -0.0048189006, 0.0083527611, 0.0020078753, 0.0026899764, -0.0043039623, -0.0064559434, 0.011190302, 0.0026899764, -0.0028821176, 0.0046113882, 0.0069170822, -0.011989609, -0.0028821176, 0.00038428235, -0.00061485175, -0.00092227763, 0.0015986146, 0.00038428235, 4.8035293e-05, -7.6856469e-05, -0.0001152847, 0.00019982682, 4.8035293e-05,
+ 0.0033777295, 0.0045251878, -0.0048484155, 0.0006464554, 8.0806925e-05, -0.014880812, -0.019936016, 0.021360017, -0.0028480023, -0.00035600029, -0.025802361, -0.034567757, 0.037036882, -0.004938251, -0.00061728137, -0.013913828, -0.018640535, 0.019972002, -0.0026629336, -0.0003328667, -0.0015780645, -0.0021141533, 0.0022651643, -0.00030202191, -3.7752738e-05, -0.014880812, -0.019936016, 0.021360017, -0.0028480023, -0.00035600029, 0.065558409, 0.087829447, -0.094102979, 0.012547064, 0.001568383, 0.11367402, 0.15229055, -0.16316845, 0.021755793, 0.0027194742, 0.061298296, 0.082122119, -0.087987984, 0.011731731, 0.0014664664, 0.0069522681, 0.0093140434, -0.0099793322, 0.0013305776, 0.0001663222, -0.025802361, -0.034567757, 0.037036882, -0.004938251, -0.00061728137, 0.11367402, 0.15229055, -0.16316845, 0.021755793, 0.0027194742, 0.19710337, 0.26406192, -0.28292349, 0.037723132, 0.0047153915, 0.10628726, 0.14239442, -0.15256545, 0.02034206, 0.0025427574, 0.012054781, 0.016149946, -0.017303514, 0.0023071351, 0.00028839189, -0.013913828, -0.018640535, 0.019972002, -0.0026629336, -0.0003328667, 0.061298296, 0.082122119, -0.087987984, 0.011731731, 0.0014664664, 0.10628726, 0.14239442, -0.15256545, 0.02034206, 0.0025427574, 0.057315013, 0.076785663, -0.082270353, 0.01096938, 0.0013711726, 0.0065004962, 0.0087087987, -0.0093308557, 0.0012441141, 0.00015551426, -0.0015780645, -0.0021141533, 0.0022651643, -0.00030202191, -3.7752738e-05, 0.0069522681, 0.0093140434, -0.0099793322, 0.0013305776, 0.0001663222, 0.012054781, 0.016149946, -0.017303514, 0.0023071351, 0.00028839189, 0.0065004962, 0.0087087987, -0.0093308557, 0.0012441141, 0.00015551426, 0.0007372667, 0.00098772572, -0.0010582776, 0.00014110367, 1.7637959e-05,
+ -0.00031754596, 0.0013989699, 0.0024257229, 0.0013080621, 0.00014835646, 0.0013989699, -0.006163255, -0.010686684, -0.0057627547, -0.00065359428, 0.0024257229, -0.010686684, -0.018530015, -0.0099922422, -0.00113329, 0.0013080621, -0.0057627547, -0.0099922422, -0.0053882797, -0.00061112245, 0.00014835646, -0.00065359428, -0.00113329, -0.00061112245, -6.9311668e-05, 0.0013989699, -0.006163255, -0.010686684, -0.0057627547, -0.00065359428, -0.006163255, 0.02715263, 0.047080897, 0.0253882, 0.0028794531, -0.010686684, 0.047080897, 0.081635216, 0.044021488, 0.0049927846, -0.0057627547, 0.0253882, 0.044021488, 0.023738425, 0.0026923407, -0.00065359428, 0.0028794531, 0.0049927846, 0.0026923407, 0.00030535717, 0.0024257229, -0.010686684, -0.018530015, -0.0099922422, -0.00113329, -0.010686684, 0.047080897, 0.081635216, 0.044021488, 0.0049927846, -0.018530015, 0.081635216, 0.14155016, 0.0763304, 0.0086571641, -0.0099922422, 0.044021488, 0.0763304, 0.041160886, 0.0046683438, -0.00113329, 0.0049927846, 0.0086571641, 0.0046683438, 0.00052946949, 0.0013080621, -0.0057627547, -0.0099922422, -0.0053882797, -0.00061112245, -0.0057627547, 0.0253882, 0.044021488, 0.023738425, 0.0026923407, -0.0099922422, 0.044021488, 0.0763304, 0.041160886, 0.0046683438, -0.0053882797, 0.023738425, 0.041160886, 0.022195856, 0.0025173871, -0.00061112245, 0.0026923407, 0.0046683438, 0.0025173871, 0.00028551447, 0.00014835646, -0.00065359428, -0.00113329, -0.00061112245, -6.9311668e-05, -0.00065359428, 0.0028794531, 0.0049927846, 0.0026923407, 0.00030535717, -0.00113329, 0.0049927846, 0.0086571641, 0.0046683438, 0.00052946949, -0.00061112245, 0.0026923407, 0.0046683438, 0.0025173871, 0.00028551447, -6.9311668e-05, 0.00030535717, 0.00052946949, 0.00028551447, 3.2382191e-05,
+ 9.0907791e-05, -0.00024242077, -0.00036363116, 0.002181787, 0.00066059661, -0.00040050033, 0.0010680009, 0.0016020013, -0.0096120078, -0.0029103024, -0.00069444154, 0.0018518441, 0.0027777662, -0.016666597, -0.0050462752, -0.00037447503, 0.00099860009, 0.0014979001, -0.0089874008, -0.0027211852, -4.2471831e-05, 0.00011325821, 0.00016988732, -0.0010193239, -0.00030862864, -0.00040050033, 0.0010680009, 0.0016020013, -0.0096120078, -0.0029103024, 0.0017644309, -0.004705149, -0.0070577234, 0.042346341, 0.012821531, 0.0030594085, -0.0081584225, -0.012237634, 0.073425803, 0.022231701, 0.0016497747, -0.0043993992, -0.0065990988, 0.039594593, 0.011988363, 0.00018711248, -0.00049896661, -0.00074844991, 0.0044906995, 0.001359684, -0.00069444154, 0.0018518441, 0.0027777662, -0.016666597, -0.0050462752, 0.0030594085, -0.0081584225, -0.012237634, 0.073425803, 0.022231701, 0.0053048155, -0.014146175, -0.021219262, 0.12731557, 0.038548326, 0.0028606021, -0.0076282723, -0.011442409, 0.068654451, 0.020787042, 0.00032444088, -0.00086517568, -0.0012977635, 0.0077865811, 0.0023576037, -0.00037447503, 0.00099860009, 0.0014979001, -0.0089874008, -0.0027211852, 0.0016497747, -0.0043993992, -0.0065990988, 0.039594593, 0.011988363, 0.0028606021, -0.0076282723, -0.011442409, 0.068654451, 0.020787042, 0.0015425691, -0.0041135177, -0.0061702765, 0.037021659, 0.011209336, 0.00017495354, -0.00046654279, -0.00069981418, 0.0041988851, 0.0012713291, -4.2471831e-05, 0.00011325821, 0.00016988732, -0.0010193239, -0.00030862864, 0.00018711248, -0.00049896661, -0.00074844991, 0.0044906995, 0.001359684, 0.00032444088, -0.00086517568, -0.0012977635, 0.0077865811, 0.0023576037, 0.00017495354, -0.00046654279, -0.00069981418, 0.0041988851, 0.0012713291, 1.9842704e-05, -5.2913878e-05, -7.9370817e-05, 0.0004762249, 0.00014419032,
+ -3.4721726e-05, 0.00017070463, -0.00014393734, -0.0003080764, 6.9443451e-06, 0.00015296887, -0.00075205061, 0.00063412552, 0.0013572511, -3.0593775e-05, 0.00026523809, -0.0013040069, 0.0010995324, 0.0023533852, -5.3047618e-05, 0.00014302866, -0.0007031809, 0.0005929188, 0.0012690543, -2.8605732e-05, 1.622188e-05, -7.975266e-05, 6.7247065e-05, 0.00014393231, -3.2443759e-06, 0.00015296887, -0.00075205061, 0.00063412552, 0.0013572511, -3.0593775e-05, -0.00067391456, 0.0033132091, -0.0027936822, -0.0059794601, 0.00013478291, -0.0011685241, 0.0057448892, -0.0048440634, -0.010367995, 0.00023370481, -0.00063012228, 0.0030979103, -0.0026121433, -0.0055909032, 0.00012602446, -7.1466572e-05, 0.00035135565, -0.00029626142, -0.0006341034, 1.4293314e-05, 0.00026523809, -0.0013040069, 0.0010995324, 0.0023533852, -5.3047618e-05, -0.0011685241, 0.0057448892, -0.0048440634, -0.010367995, 0.00023370481, -0.0020261448, 0.0099612646, -0.0083992911, -0.01797743, 0.00040522896, -0.0010925911, 0.0053715751, -0.0045292867, -0.0096942628, 0.00021851822, -0.00012391839, 0.00060922787, -0.00051369806, -0.0010994941, 2.4783678e-05, 0.00014302866, -0.0007031809, 0.0005929188, 0.0012690543, -2.8605732e-05, -0.00063012228, 0.0030979103, -0.0026121433, -0.0055909032, 0.00012602446, -0.0010925911, 0.0053715751, -0.0045292867, -0.0096942628, 0.00021851822, -0.00058917571, 0.002896602, -0.0024424011, -0.0052275954, 0.00011783514, -6.6822534e-05, 0.00032852388, -0.00027700978, -0.00059289812, 1.3364507e-05, 1.622188e-05, -7.975266e-05, 6.7247065e-05, 0.00014393231, -3.2443759e-06, -7.1466572e-05, 0.00035135565, -0.00029626142, -0.0006341034, 1.4293314e-05, -0.00012391839, 0.00060922787, -0.00051369806, -0.0010994941, 2.4783678e-05, -6.6822534e-05, 0.00032852388, -0.00027700978, -0.00059289812, 1.3364507e-05, -7.5788106e-06, 3.7260189e-05, -3.1417615e-05, -6.724472e-05, 1.5157621e-06,
+ 0.00040403462, -0.0006464554, -0.0009696831, 0.001680784, 0.00040403462, -0.0017800014, 0.0028480023, 0.0042720035, -0.007404806, -0.0017800014, -0.0030864068, 0.004938251, 0.0074073764, -0.012839452, -0.0030864068, -0.0016643335, 0.0026629336, 0.0039944004, -0.0069236273, -0.0016643335, -0.00018876369, 0.00030202191, 0.00045303286, -0.00078525696, -0.00018876369, -0.0017800014, 0.0028480023, 0.0042720035, -0.007404806, -0.0017800014, 0.0078419149, -0.012547064, -0.018820596, 0.032622366, 0.0078419149, 0.013597371, -0.021755793, -0.03263369, 0.056565063, 0.013597371, 0.007332332, -0.011731731, -0.017597597, 0.030502501, 0.007332332, 0.00083161102, -0.0013305776, -0.0019958664, 0.0034595018, 0.00083161102, -0.0030864068, 0.004938251, 0.0074073764, -0.012839452, -0.0030864068, 0.013597371, -0.021755793, -0.03263369, 0.056565063, 0.013597371, 0.023576958, -0.037723132, -0.056584698, 0.098080144, 0.023576958, 0.012713787, -0.02034206, -0.030513089, 0.052889355, 0.012713787, 0.0014419595, -0.0023071351, -0.0034607027, 0.0059985514, 0.0014419595, -0.0016643335, 0.0026629336, 0.0039944004, -0.0069236273, -0.0016643335, 0.007332332, -0.011731731, -0.017597597, 0.030502501, 0.007332332, 0.012713787, -0.02034206, -0.030513089, 0.052889355, 0.012713787, 0.0068558628, -0.01096938, -0.016454071, 0.028520389, 0.0068558628, 0.00077757131, -0.0012441141, -0.0018661711, 0.0032346966, 0.00077757131, -0.00018876369, 0.00030202191, 0.00045303286, -0.00078525696, -0.00018876369, 0.00083161102, -0.0013305776, -0.0019958664, 0.0034595018, 0.00083161102, 0.0014419595, -0.0023071351, -0.0034607027, 0.0059985514, 0.0014419595, 0.00077757131, -0.0012441141, -0.0018661711, 0.0032346966, 0.00077757131, 8.8189796e-05, -0.00014110367, -0.00021165551, 0.00036686955, 8.8189796e-05,
+ -0.00096698418, -0.0012954812, 0.0013880156, -0.00018506874, -2.3133593e-05, 0.0025786245, 0.0034546165, -0.0037013749, 0.00049351665, 6.1689581e-05, 0.0038679367, 0.0051819248, -0.0055520623, 0.00074027497, 9.2534371e-05, -0.02320762, -0.031091549, 0.033312374, -0.0044416498, -0.00055520623, -0.0070267517, -0.00941383, 0.010086246, -0.0013448329, -0.00016810411, 0.0042601132, 0.0057073287, -0.006114995, 0.00081533267, 0.00010191658, -0.011360302, -0.015219543, 0.016306653, -0.0021742205, -0.00027177756, -0.017040453, -0.022829315, 0.02445998, -0.0032613307, -0.00040766634, 0.10224272, 0.13697589, -0.14675988, 0.019567984, 0.002445998, 0.030956823, 0.041473255, -0.044435631, 0.0059247507, 0.00074059384, 0.0073867595, 0.0098961371, -0.010603004, 0.0014137339, 0.00017671673, -0.019698025, -0.026389699, 0.028274677, -0.003769957, -0.00047124462, -0.029547038, -0.039584548, 0.042412016, -0.0056549355, -0.00070686694, 0.17728223, 0.23750729, -0.2544721, 0.033929613, 0.0042412016, 0.053677119, 0.07191193, -0.077048496, 0.010273133, 0.0012841416, 0.0039832827, 0.0053364554, -0.0057176307, 0.00076235077, 9.5293846e-05, -0.010622087, -0.014230548, 0.015247015, -0.0020329354, -0.00025411692, -0.015933131, -0.021345821, 0.022870523, -0.0030494031, -0.00038117538, 0.095598786, 0.12807493, -0.13722314, 0.018296418, 0.0022870523, 0.028945188, 0.038778242, -0.041548117, 0.0055397489, 0.00069246861, 0.00045177193, 0.0006052447, -0.00064847646, 8.6463528e-05, 1.0807941e-05, -0.0012047252, -0.0016139859, 0.0017292706, -0.00023056941, -2.8821176e-05, -0.0018070877, -0.0024209788, 0.0025939058, -0.00034585411, -4.3231764e-05, 0.010842526, 0.014525873, -0.015563435, 0.0020751247, 0.00025939058, 0.003282876, 0.0043981115, -0.0047122623, 0.00062830164, 7.8537705e-05,
+ 9.0907791e-05, -0.00040050033, -0.00069444154, -0.00037447503, -4.2471831e-05, -0.00024242077, 0.0010680009, 0.0018518441, 0.00099860009, 0.00011325821, -0.00036363116, 0.0016020013, 0.0027777662, 0.0014979001, 0.00016988732, 0.002181787, -0.0096120078, -0.016666597, -0.0089874008, -0.0010193239, 0.00066059661, -0.0029103024, -0.0050462752, -0.0027211852, -0.00030862864, -0.00040050033, 0.0017644309, 0.0030594085, 0.0016497747, 0.00018711248, 0.0010680009, -0.004705149, -0.0081584225, -0.0043993992, -0.00049896661, 0.0016020013, -0.0070577234, -0.012237634, -0.0065990988, -0.00074844991, -0.0096120078, 0.042346341, 0.073425803, 0.039594593, 0.0044906995, -0.0029103024, 0.012821531, 0.022231701, 0.011988363, 0.001359684, -0.00069444154, 0.0030594085, 0.0053048155, 0.0028606021, 0.00032444088, 0.0018518441, -0.0081584225, -0.014146175, -0.0076282723, -0.00086517568, 0.0027777662, -0.012237634, -0.021219262, -0.011442409, -0.0012977635, -0.016666597, 0.073425803, 0.12731557, 0.068654451, 0.0077865811, -0.0050462752, 0.022231701, 0.038548326, 0.020787042, 0.0023576037, -0.00037447503, 0.0016497747, 0.0028606021, 0.0015425691, 0.00017495354, 0.00099860009, -0.0043993992, -0.0076282723, -0.0041135177, -0.00046654279, 0.0014979001, -0.0065990988, -0.011442409, -0.0061702765, -0.00069981418, -0.0089874008, 0.039594593, 0.068654451, 0.037021659, 0.0041988851, -0.0027211852, 0.011988363, 0.020787042, 0.011209336, 0.0012713291, -4.2471831e-05, 0.00018711248, 0.00032444088, 0.00017495354, 1.9842704e-05, 0.00011325821, -0.00049896661, -0.00086517568, -0.00046654279, -5.2913878e-05, 0.00016988732, -0.00074844991, -0.0012977635, -0.00069981418, -7.9370817e-05, -0.0010193239, 0.0044906995, 0.0077865811, 0.0041988851, 0.0004762249, -0.00030862864, 0.001359684, 0.0023576037, 0.0012713291, 0.00014419032,
+ -2.6025292e-05, 6.9400779e-05, 0.00010410117, -0.00062460701, -0.00018911712, 6.9400779e-05, -0.00018506874, -0.00027760311, 0.0016656187, 0.00050431232, 0.00010410117, -0.00027760311, -0.00041640467, 0.002498428, 0.00075646849, -0.00062460701, 0.0016656187, 0.002498428, -0.014990568, -0.0045388109, -0.00018911712, 0.00050431232, 0.00075646849, -0.0045388109, -0.0013742511, 0.00011465616, -0.00030574975, -0.00045862463, 0.0027517478, 0.00083316807, -0.00030574975, 0.00081533267, 0.001222999, -0.007337994, -0.0022217815, -0.00045862463, 0.001222999, 0.0018344985, -0.011006991, -0.0033326723, 0.0027517478, -0.007337994, -0.011006991, 0.066041946, 0.019996034, 0.00083316807, -0.0022217815, -0.0033326723, 0.019996034, 0.0060543547, 0.00019880633, -0.0005301502, -0.0007952253, 0.0047713518, 0.0014446593, -0.0005301502, 0.0014137339, 0.0021206008, -0.012723605, -0.0038524248, -0.0007952253, 0.0021206008, 0.0031809012, -0.019085407, -0.0057786372, 0.0047713518, -0.012723605, -0.019085407, 0.11451244, 0.034671823, 0.0014446593, -0.0038524248, -0.0057786372, 0.034671823, 0.010497858, 0.00010720558, -0.00028588154, -0.00042882231, 0.0025729338, 0.00077902719, -0.00028588154, 0.00076235077, 0.0011435261, -0.0068611569, -0.0020774058, -0.00042882231, 0.0011435261, 0.0017152892, -0.010291735, -0.0031161088, 0.0025729338, -0.0068611569, -0.010291735, 0.061750412, 0.018696653, 0.00077902719, -0.0020774058, -0.0031161088, 0.018696653, 0.0056609309, 1.2158934e-05, -3.2423823e-05, -4.8635734e-05, 0.00029181441, 8.8354918e-05, -3.2423823e-05, 8.6463528e-05, 0.00012969529, -0.00077817175, -0.00023561311, -4.8635734e-05, 0.00012969529, 0.00019454294, -0.0011672576, -0.00035341967, 0.00029181441, -0.00077817175, -0.0011672576, 0.0070035458, 0.002120518, 8.8354918e-05, -0.00023561311, -0.00035341967, 0.002120518, 0.00064204573,
+ 9.9402157e-06, -4.8869715e-05, 4.1206712e-05, 8.8196823e-05, -1.9880431e-06, -2.6507242e-05, 0.00013031924, -0.00010988457, -0.00023519153, 5.3014484e-06, -3.9760863e-05, 0.00019547886, -0.00016482685, -0.00035278729, 7.9521725e-06, 0.00023856518, -0.0011728732, 0.00098896109, 0.0021167237, -4.7713035e-05, 7.2232234e-05, -0.00035511993, 0.00029943544, 0.00064089691, -1.4446447e-05, -4.3792282e-05, 0.00021529878, -0.00018153892, -0.00038855698, 8.7584564e-06, 0.00011677942, -0.00057413009, 0.00048410377, 0.0010361519, -2.3355884e-05, 0.00017516913, -0.00086119513, 0.00072615566, 0.0015542279, -3.5033826e-05, -0.0010510148, 0.0051671708, -0.004356934, -0.0093253674, 0.00021020295, -0.00031822392, 0.0015645045, -0.0013191828, -0.002823514, 6.3644783e-05, -7.5932972e-05, 0.0003733141, -0.00031477668, -0.00067373255, 1.5186594e-05, 0.00020248792, -0.00099550427, 0.00083940449, 0.0017966201, -4.0497585e-05, 0.00030373189, -0.0014932564, 0.0012591067, 0.0026949302, -6.0746377e-05, -0.0018223913, 0.0089595384, -0.0075546404, -0.016169581, 0.00036447826, -0.00055177959, 0.0027127491, -0.0022873772, -0.0048957898, 0.00011035592, -4.0946574e-05, 0.00020130825, -0.00016974216, -0.00036330779, 8.1893149e-06, 0.00010919086, -0.000536822, 0.00045264577, 0.00096882076, -2.1838173e-05, 0.0001637863, -0.000805233, 0.00067896865, 0.0014532311, -3.2757259e-05, -0.00098271778, 0.004831398, -0.0040738119, -0.0087193869, 0.00019654356, -0.00029754511, 0.0014628399, -0.0012334597, -0.0026400366, 5.9509021e-05, -4.6440371e-06, 2.2831775e-05, -1.9251645e-05, -4.1205275e-05, 9.2880743e-07, 1.2384099e-05, -6.0884734e-05, 5.133772e-05, 0.00010988073, -2.4768198e-06, 1.8576149e-05, -9.1327101e-05, 7.700658e-05, 0.0001648211, -3.7152297e-06, -0.00011145689, 0.00054796261, -0.00046203948, -0.0009889266, 2.2291378e-05, -3.374667e-05, 0.0001659109, -0.00013989529, -0.000299425, 6.749334e-06,
+ -0.00011566796, 0.00018506874, 0.00027760311, -0.00048117873, -0.00011566796, 0.0003084479, -0.00049351665, -0.00074027497, 0.0012831433, 0.0003084479, 0.00046267186, -0.00074027497, -0.0011104125, 0.0019247149, 0.00046267186, -0.0027760311, 0.0044416498, 0.0066624747, -0.01154829, -0.0027760311, -0.00084052054, 0.0013448329, 0.0020172493, -0.0034965654, -0.00084052054, 0.00050958292, -0.00081533267, -0.001222999, 0.0021198649, 0.00050958292, -0.0013588878, 0.0021742205, 0.0032613307, -0.0056529732, -0.0013588878, -0.0020383317, 0.0032613307, 0.004891996, -0.0084794598, -0.0020383317, 0.01222999, -0.019567984, -0.029351976, 0.050876759, 0.01222999, 0.0037029692, -0.0059247507, -0.0088871261, 0.015404352, 0.0037029692, 0.00088358367, -0.0014137339, -0.0021206008, 0.0036757081, 0.00088358367, -0.0023562231, 0.003769957, 0.0056549355, -0.0098018882, -0.0023562231, -0.0035343347, 0.0056549355, 0.0084824032, -0.014702832, -0.0035343347, 0.021206008, -0.033929613, -0.050894419, 0.088216994, 0.021206008, 0.006420708, -0.010273133, -0.015409699, 0.026710145, 0.006420708, 0.00047646923, -0.00076235077, -0.0011435261, 0.001982112, 0.00047646923, -0.0012705846, 0.0020329354, 0.0030494031, -0.005285632, -0.0012705846, -0.0019058769, 0.0030494031, 0.0045741046, -0.007928448, -0.0019058769, 0.011435261, -0.018296418, -0.027444628, 0.047570688, 0.011435261, 0.0034623431, -0.0055397489, -0.0083096233, 0.014403347, 0.0034623431, 5.4039705e-05, -8.6463528e-05, -0.00012969529, 0.00022480517, 5.4039705e-05, -0.00014410588, 0.00023056941, 0.00034585411, -0.00059948046, -0.00014410588, -0.00021615882, 0.00034585411, 0.00051878117, -0.00089922069, -0.00021615882, 0.0012969529, -0.0020751247, -0.003112687, 0.0053953241, 0.0012969529, 0.00039268852, -0.00062830164, -0.00094245245, 0.0016335843, 0.00039268852,
+ 0.00036933424, 0.00049480185, -0.00053014484, 7.0685978e-05, 8.8357473e-06, -0.0018157814, -0.0024326258, 0.0026063848, -0.00034751797, -4.3439747e-05, 0.0015310583, 0.0020511786, -0.0021976913, 0.00029302551, 3.6628189e-05, 0.0032770019, 0.0043902418, -0.0047038305, 0.00062717741, 7.8397176e-05, -7.3866847e-05, -9.8960369e-05, 0.00010602897, -1.4137196e-05, -1.7671495e-06, -0.0016271266, -0.0021798825, 0.0023355884, -0.00031141178, -3.8926473e-05, 0.0079995459, 0.010717095, -0.011482602, 0.0015310136, 0.0001913767, -0.0067451792, -0.0090366038, 0.0096820755, -0.0012909434, -0.00016136792, -0.01443705, -0.019341503, 0.020723039, -0.0027630718, -0.00034538398, 0.00032542531, 0.0004359765, -0.00046711768, 6.2282357e-05, 7.7852946e-06, -0.0028213317, -0.0037797746, 0.0040497585, -0.0005399678, -6.7495975e-05, 0.013870693, 0.018582746, -0.019910085, 0.002654678, 0.00033183476, -0.011695703, -0.015668884, 0.01678809, -0.002238412, -0.0002798015, -0.025032907, -0.033536909, 0.035932403, -0.004790987, -0.00059887338, 0.00056426635, 0.00075595492, -0.0008099517, 0.00010799356, 1.3499195e-05, -0.0015213927, -0.0020382295, 0.0021838173, -0.00029117564, -3.6396955e-05, 0.0074797198, 0.010020677, -0.01073644, 0.0014315253, 0.00017894067, -0.0063068644, -0.0084493876, 0.0090529153, -0.0012070554, -0.00015088192, -0.013498903, -0.018084654, 0.019376415, -0.002583522, -0.00032294025, 0.00030427854, 0.0004076459, -0.00043676346, 5.8235128e-05, 7.279391e-06, -0.00017255178, -0.00023116985, 0.00024768198, -3.3024264e-05, -4.128033e-06, 0.0008483273, 0.001136515, -0.0012176947, 0.00016235929, 2.0294911e-05, -0.00071530556, -0.0009583041, 0.0010267544, -0.00013690059, -1.7112573e-05, -0.0015310049, -0.002051107, 0.0021976147, -0.00029301529, -3.6626911e-05, 3.4510356e-05, 4.623397e-05, -4.9536396e-05, 6.6048528e-06, 8.256066e-07,
+ -3.4721726e-05, 0.00015296887, 0.00026523809, 0.00014302866, 1.622188e-05, 0.00017070463, -0.00075205061, -0.0013040069, -0.0007031809, -7.975266e-05, -0.00014393734, 0.00063412552, 0.0010995324, 0.0005929188, 6.7247065e-05, -0.0003080764, 0.0013572511, 0.0023533852, 0.0012690543, 0.00014393231, 6.9443451e-06, -3.0593775e-05, -5.3047618e-05, -2.8605732e-05, -3.2443759e-06, 0.00015296887, -0.00067391456, -0.0011685241, -0.00063012228, -7.1466572e-05, -0.00075205061, 0.0033132091, 0.0057448892, 0.0030979103, 0.00035135565, 0.00063412552, -0.0027936822, -0.0048440634, -0.0026121433, -0.00029626142, 0.0013572511, -0.0059794601, -0.010367995, -0.0055909032, -0.0006341034, -3.0593775e-05, 0.00013478291, 0.00023370481, 0.00012602446, 1.4293314e-05, 0.00026523809, -0.0011685241, -0.0020261448, -0.0010925911, -0.00012391839, -0.0013040069, 0.0057448892, 0.0099612646, 0.0053715751, 0.00060922787, 0.0010995324, -0.0048440634, -0.0083992911, -0.0045292867, -0.00051369806, 0.0023533852, -0.010367995, -0.01797743, -0.0096942628, -0.0010994941, -5.3047618e-05, 0.00023370481, 0.00040522896, 0.00021851822, 2.4783678e-05, 0.00014302866, -0.00063012228, -0.0010925911, -0.00058917571, -6.6822534e-05, -0.0007031809, 0.0030979103, 0.0053715751, 0.002896602, 0.00032852388, 0.0005929188, -0.0026121433, -0.0045292867, -0.0024424011, -0.00027700978, 0.0012690543, -0.0055909032, -0.0096942628, -0.0052275954, -0.00059289812, -2.8605732e-05, 0.00012602446, 0.00021851822, 0.00011783514, 1.3364507e-05, 1.622188e-05, -7.1466572e-05, -0.00012391839, -6.6822534e-05, -7.5788106e-06, -7.975266e-05, 0.00035135565, 0.00060922787, 0.00032852388, 3.7260189e-05, 6.7247065e-05, -0.00029626142, -0.00051369806, -0.00027700978, -3.1417615e-05, 0.00014393231, -0.0006341034, -0.0010994941, -0.00059289812, -6.724472e-05, -3.2443759e-06, 1.4293314e-05, 2.4783678e-05, 1.3364507e-05, 1.5157621e-06,
+ 9.9402157e-06, -2.6507242e-05, -3.9760863e-05, 0.00023856518, 7.2232234e-05, -4.8869715e-05, 0.00013031924, 0.00019547886, -0.0011728732, -0.00035511993, 4.1206712e-05, -0.00010988457, -0.00016482685, 0.00098896109, 0.00029943544, 8.8196823e-05, -0.00023519153, -0.00035278729, 0.0021167237, 0.00064089691, -1.9880431e-06, 5.3014484e-06, 7.9521725e-06, -4.7713035e-05, -1.4446447e-05, -4.3792282e-05, 0.00011677942, 0.00017516913, -0.0010510148, -0.00031822392, 0.00021529878, -0.00057413009, -0.00086119513, 0.0051671708, 0.0015645045, -0.00018153892, 0.00048410377, 0.00072615566, -0.004356934, -0.0013191828, -0.00038855698, 0.0010361519, 0.0015542279, -0.0093253674, -0.002823514, 8.7584564e-06, -2.3355884e-05, -3.5033826e-05, 0.00021020295, 6.3644783e-05, -7.5932972e-05, 0.00020248792, 0.00030373189, -0.0018223913, -0.00055177959, 0.0003733141, -0.00099550427, -0.0014932564, 0.0089595384, 0.0027127491, -0.00031477668, 0.00083940449, 0.0012591067, -0.0075546404, -0.0022873772, -0.00067373255, 0.0017966201, 0.0026949302, -0.016169581, -0.0048957898, 1.5186594e-05, -4.0497585e-05, -6.0746377e-05, 0.00036447826, 0.00011035592, -4.0946574e-05, 0.00010919086, 0.0001637863, -0.00098271778, -0.00029754511, 0.00020130825, -0.000536822, -0.000805233, 0.004831398, 0.0014628399, -0.00016974216, 0.00045264577, 0.00067896865, -0.0040738119, -0.0012334597, -0.00036330779, 0.00096882076, 0.0014532311, -0.0087193869, -0.0026400366, 8.1893149e-06, -2.1838173e-05, -3.2757259e-05, 0.00019654356, 5.9509021e-05, -4.6440371e-06, 1.2384099e-05, 1.8576149e-05, -0.00011145689, -3.374667e-05, 2.2831775e-05, -6.0884734e-05, -9.1327101e-05, 0.00054796261, 0.0001659109, -1.9251645e-05, 5.133772e-05, 7.700658e-05, -0.00046203948, -0.00013989529, -4.1205275e-05, 0.00010988073, 0.0001648211, -0.0009889266, -0.000299425, 9.2880743e-07, -2.4768198e-06, -3.7152297e-06, 2.2291378e-05, 6.749334e-06,
+ -3.7966102e-06, 1.8665516e-05, -1.5738675e-05, -3.3686286e-05, 7.5932203e-07, 1.8665516e-05, -9.1766465e-05, 7.7377049e-05, 0.00016561403, -3.7331032e-06, -1.5738675e-05, 7.7377049e-05, -6.5243961e-05, -0.00013964497, 3.147735e-06, -3.3686286e-05, 0.00016561403, -0.00013964497, -0.00029888923, 6.7372573e-06, 7.5932203e-07, -3.7331032e-06, 3.147735e-06, 6.7372573e-06, -1.5186441e-07, 1.6726219e-05, -8.2232174e-05, 6.933778e-05, 0.00014840718, -3.3452438e-06, -8.2232174e-05, 0.00040428327, -0.00034088974, -0.00072962366, 1.6446435e-05, 6.933778e-05, -0.00034088974, 0.00028743662, 0.00061521521, -1.3867556e-05, 0.00014840718, -0.00072962366, 0.00061521521, 0.0013167764, -2.9681436e-05, -3.3452438e-06, 1.6446435e-05, -1.3867556e-05, -2.9681436e-05, 6.6904876e-07, 2.9002177e-05, -0.00014258525, 0.00012022721, 0.0002573284, -5.8004353e-06, -0.00014258525, 0.00070100092, -0.00059108066, -0.00126512, 2.8517049e-05, 0.00012022721, -0.00059108066, 0.00049839641, 0.0010667432, -2.4045441e-05, 0.0002573284, -0.00126512, 0.0010667432, 0.0022832047, -5.1465681e-05, -5.8004353e-06, 2.8517049e-05, -2.4045441e-05, -5.1465681e-05, 1.1600871e-06, 1.5639317e-05, -7.6888567e-05, 6.4832076e-05, 0.00013876339, -3.1278633e-06, -7.6888567e-05, 0.00037801216, -0.00031873806, -0.00068221129, 1.5377713e-05, 6.4832076e-05, -0.00031873806, 0.00026875842, 0.00057523733, -1.2966415e-05, 0.00013876339, -0.00068221129, 0.00057523733, 0.0012312097, -2.7752678e-05, -3.1278633e-06, 1.5377713e-05, -1.2966415e-05, -2.7752678e-05, 6.2557266e-07, 1.7737642e-06, -8.7204697e-06, 7.3530588e-06, 1.5738126e-05, -3.5475284e-07, -8.7204697e-06, 4.2873e-05, -3.6150311e-05, -7.737435e-05, 1.7440939e-06, 7.3530588e-06, -3.6150311e-05, 3.0481771e-05, 6.5241685e-05, -1.4706118e-06, 1.5738126e-05, -7.737435e-05, 6.5241685e-05, 0.0001396401, -3.1476252e-06, -3.5475284e-07, 1.7440939e-06, -1.4706118e-06, -3.1476252e-06, 7.0950567e-08,
+ 4.4178736e-05, -7.0685978e-05, -0.00010602897, 0.00018378354, 4.4178736e-05, -0.00021719873, 0.00034751797, 0.00052127696, -0.00090354673, -0.00021719873, 0.00018314094, -0.00029302551, -0.00043953826, 0.00076186632, 0.00018314094, 0.00039198588, -0.00062717741, -0.00094076611, 0.0016306613, 0.00039198588, -8.8357473e-06, 1.4137196e-05, 2.1205793e-05, -3.6756709e-05, -8.8357473e-06, -0.00019463237, 0.00031141178, 0.00046711768, -0.00080967064, -0.00019463237, 0.00095688348, -0.0015310136, -0.0022965204, 0.0039806353, 0.00095688348, -0.00080683962, 0.0012909434, 0.0019364151, -0.0033564528, -0.00080683962, -0.0017269199, 0.0027630718, 0.0041446077, -0.0071839868, -0.0017269199, 3.8926473e-05, -6.2282357e-05, -9.3423535e-05, 0.00016193413, 3.8926473e-05, -0.00033747987, 0.0005399678, 0.0008099517, -0.0014039163, -0.00033747987, 0.0016591738, -0.002654678, -0.0039820171, 0.0069021629, 0.0016591738, -0.0013990075, 0.002238412, 0.0033576179, -0.0058198711, -0.0013990075, -0.0029943669, 0.004790987, 0.0071864805, -0.012456566, -0.0029943669, 6.7495975e-05, -0.00010799356, -0.00016199034, 0.00028078325, 6.7495975e-05, -0.00018198477, 0.00029117564, 0.00043676346, -0.00075705666, -0.00018198477, 0.00089470333, -0.0014315253, -0.002147288, 0.0037219658, 0.00089470333, -0.00075440961, 0.0012070554, 0.0018105831, -0.003138344, -0.00075440961, -0.0016147013, 0.002583522, 0.0038752831, -0.0067171573, -0.0016147013, 3.6396955e-05, -5.8235128e-05, -8.7352692e-05, 0.00015141133, 3.6396955e-05, -2.0640165e-05, 3.3024264e-05, 4.9536396e-05, -8.5863087e-05, -2.0640165e-05, 0.00010147456, -0.00016235929, -0.00024353894, 0.00042213416, 0.00010147456, -8.5562866e-05, 0.00013690059, 0.00020535088, -0.00035594152, -8.5562866e-05, -0.00018313456, 0.00029301529, 0.00043952293, -0.00076183975, -0.00018313456, 4.128033e-06, -6.6048528e-06, -9.9072792e-06, 1.7172617e-05, 4.128033e-06,
+ -0.0042977075, -0.0057576942, 0.0061689581, -0.00082252775, -0.00010281597, 0.006876332, 0.0092123107, -0.0098703329, 0.0013160444, 0.00016450555, 0.010314498, 0.013818466, -0.014805499, 0.0019740666, 0.00024675832, -0.017878463, -0.023952008, 0.025662866, -0.0034217154, -0.00042771443, -0.0042977075, -0.0057576942, 0.0061689581, -0.00082252775, -0.00010281597, 0.018933836, 0.025365905, -0.027177756, 0.0036237008, 0.0004529626, -0.030294138, -0.040585449, 0.043484409, -0.0057979212, -0.00072474015, -0.045441208, -0.060878173, 0.065226614, -0.0086968818, -0.0010871102, 0.07876476, 0.10552217, -0.11305946, 0.015074595, 0.0018843244, 0.018933836, 0.025365905, -0.027177756, 0.0036237008, 0.0004529626, 0.032830042, 0.043982832, -0.047124462, 0.0062832616, 0.00078540771, -0.052528067, -0.07037253, 0.07539914, -0.010053219, -0.0012566523, -0.078792101, -0.1055588, 0.11309871, -0.015079828, -0.0018849785, 0.13657298, 0.18296858, -0.19603776, 0.026138368, 0.0032672961, 0.032830042, 0.043982832, -0.047124462, 0.0062832616, 0.00078540771, 0.017703479, 0.023717579, -0.025411692, 0.0033882256, 0.0004235282, -0.028325566, -0.037948127, 0.040658707, -0.005421161, -0.00067764512, -0.042488349, -0.05692219, 0.060988061, -0.0081317415, -0.0010164677, 0.073646472, 0.09866513, -0.10571264, 0.014095019, 0.0017618773, 0.017703479, 0.023717579, -0.025411692, 0.0033882256, 0.0004235282, 0.0020078753, 0.0026899764, -0.0028821176, 0.00038428235, 4.8035293e-05, -0.0032126004, -0.0043039623, 0.0046113882, -0.00061485175, -7.6856469e-05, -0.0048189006, -0.0064559434, 0.0069170822, -0.00092227763, -0.0001152847, 0.0083527611, 0.011190302, -0.011989609, 0.0015986146, 0.00019982682, 0.0020078753, 0.0026899764, -0.0028821176, 0.00038428235, 4.8035293e-05,
+ 0.00040403462, -0.0017800014, -0.0030864068, -0.0016643335, -0.00018876369, -0.0006464554, 0.0028480023, 0.004938251, 0.0026629336, 0.00030202191, -0.0009696831, 0.0042720035, 0.0074073764, 0.0039944004, 0.00045303286, 0.001680784, -0.007404806, -0.012839452, -0.0069236273, -0.00078525696, 0.00040403462, -0.0017800014, -0.0030864068, -0.0016643335, -0.00018876369, -0.0017800014, 0.0078419149, 0.013597371, 0.007332332, 0.00083161102, 0.0028480023, -0.012547064, -0.021755793, -0.011731731, -0.0013305776, 0.0042720035, -0.018820596, -0.03263369, -0.017597597, -0.0019958664, -0.007404806, 0.032622366, 0.056565063, 0.030502501, 0.0034595018, -0.0017800014, 0.0078419149, 0.013597371, 0.007332332, 0.00083161102, -0.0030864068, 0.013597371, 0.023576958, 0.012713787, 0.0014419595, 0.004938251, -0.021755793, -0.037723132, -0.02034206, -0.0023071351, 0.0074073764, -0.03263369, -0.056584698, -0.030513089, -0.0034607027, -0.012839452, 0.056565063, 0.098080144, 0.052889355, 0.0059985514, -0.0030864068, 0.013597371, 0.023576958, 0.012713787, 0.0014419595, -0.0016643335, 0.007332332, 0.012713787, 0.0068558628, 0.00077757131, 0.0026629336, -0.011731731, -0.02034206, -0.01096938, -0.0012441141, 0.0039944004, -0.017597597, -0.030513089, -0.016454071, -0.0018661711, -0.0069236273, 0.030502501, 0.052889355, 0.028520389, 0.0032346966, -0.0016643335, 0.007332332, 0.012713787, 0.0068558628, 0.00077757131, -0.00018876369, 0.00083161102, 0.0014419595, 0.00077757131, 8.8189796e-05, 0.00030202191, -0.0013305776, -0.0023071351, -0.0012441141, -0.00014110367, 0.00045303286, -0.0019958664, -0.0034607027, -0.0018661711, -0.00021165551, -0.00078525696, 0.0034595018, 0.0059985514, 0.0032346966, 0.00036686955, -0.00018876369, 0.00083161102, 0.0014419595, 0.00077757131, 8.8189796e-05,
+ -0.00011566796, 0.0003084479, 0.00046267186, -0.0027760311, -0.00084052054, 0.00018506874, -0.00049351665, -0.00074027497, 0.0044416498, 0.0013448329, 0.00027760311, -0.00074027497, -0.0011104125, 0.0066624747, 0.0020172493, -0.00048117873, 0.0012831433, 0.0019247149, -0.01154829, -0.0034965654, -0.00011566796, 0.0003084479, 0.00046267186, -0.0027760311, -0.00084052054, 0.00050958292, -0.0013588878, -0.0020383317, 0.01222999, 0.0037029692, -0.00081533267, 0.0021742205, 0.0032613307, -0.019567984, -0.0059247507, -0.001222999, 0.0032613307, 0.004891996, -0.029351976, -0.0088871261, 0.0021198649, -0.0056529732, -0.0084794598, 0.050876759, 0.015404352, 0.00050958292, -0.0013588878, -0.0020383317, 0.01222999, 0.0037029692, 0.00088358367, -0.0023562231, -0.0035343347, 0.021206008, 0.006420708, -0.0014137339, 0.003769957, 0.0056549355, -0.033929613, -0.010273133, -0.0021206008, 0.0056549355, 0.0084824032, -0.050894419, -0.015409699, 0.0036757081, -0.0098018882, -0.014702832, 0.088216994, 0.026710145, 0.00088358367, -0.0023562231, -0.0035343347, 0.021206008, 0.006420708, 0.00047646923, -0.0012705846, -0.0019058769, 0.011435261, 0.0034623431, -0.00076235077, 0.0020329354, 0.0030494031, -0.018296418, -0.0055397489, -0.0011435261, 0.0030494031, 0.0045741046, -0.027444628, -0.0083096233, 0.001982112, -0.005285632, -0.007928448, 0.047570688, 0.014403347, 0.00047646923, -0.0012705846, -0.0019058769, 0.011435261, 0.0034623431, 5.4039705e-05, -0.00014410588, -0.00021615882, 0.0012969529, 0.00039268852, -8.6463528e-05, 0.00023056941, 0.00034585411, -0.0020751247, -0.00062830164, -0.00012969529, 0.00034585411, 0.00051878117, -0.003112687, -0.00094245245, 0.00022480517, -0.00059948046, -0.00089922069, 0.0053953241, 0.0016335843, 5.4039705e-05, -0.00014410588, -0.00021615882, 0.0012969529, 0.00039268852,
+ 4.4178736e-05, -0.00021719873, 0.00018314094, 0.00039198588, -8.8357473e-06, -7.0685978e-05, 0.00034751797, -0.00029302551, -0.00062717741, 1.4137196e-05, -0.00010602897, 0.00052127696, -0.00043953826, -0.00094076611, 2.1205793e-05, 0.00018378354, -0.00090354673, 0.00076186632, 0.0016306613, -3.6756709e-05, 4.4178736e-05, -0.00021719873, 0.00018314094, 0.00039198588, -8.8357473e-06, -0.00019463237, 0.00095688348, -0.00080683962, -0.0017269199, 3.8926473e-05, 0.00031141178, -0.0015310136, 0.0012909434, 0.0027630718, -6.2282357e-05, 0.00046711768, -0.0022965204, 0.0019364151, 0.0041446077, -9.3423535e-05, -0.00080967064, 0.0039806353, -0.0033564528, -0.0071839868, 0.00016193413, -0.00019463237, 0.00095688348, -0.00080683962, -0.0017269199, 3.8926473e-05, -0.00033747987, 0.0016591738, -0.0013990075, -0.0029943669, 6.7495975e-05, 0.0005399678, -0.002654678, 0.002238412, 0.004790987, -0.00010799356, 0.0008099517, -0.0039820171, 0.0033576179, 0.0071864805, -0.00016199034, -0.0014039163, 0.0069021629, -0.0058198711, -0.012456566, 0.00028078325, -0.00033747987, 0.0016591738, -0.0013990075, -0.0029943669, 6.7495975e-05, -0.00018198477, 0.00089470333, -0.00075440961, -0.0016147013, 3.6396955e-05, 0.00029117564, -0.0014315253, 0.0012070554, 0.002583522, -5.8235128e-05, 0.00043676346, -0.002147288, 0.0018105831, 0.0038752831, -8.7352692e-05, -0.00075705666, 0.0037219658, -0.003138344, -0.0067171573, 0.00015141133, -0.00018198477, 0.00089470333, -0.00075440961, -0.0016147013, 3.6396955e-05, -2.0640165e-05, 0.00010147456, -8.5562866e-05, -0.00018313456, 4.128033e-06, 3.3024264e-05, -0.00016235929, 0.00013690059, 0.00029301529, -6.6048528e-06, 4.9536396e-05, -0.00024353894, 0.00020535088, 0.00043952293, -9.9072792e-06, -8.5863087e-05, 0.00042213416, -0.00035594152, -0.00076183975, 1.7172617e-05, -2.0640165e-05, 0.00010147456, -8.5562866e-05, -0.00018313456, 4.128033e-06,
+ -0.00051407984, 0.00082252775, 0.0012337916, -0.0021385721, -0.00051407984, 0.00082252775, -0.0013160444, -0.0019740666, 0.0034217154, 0.00082252775, 0.0012337916, -0.0019740666, -0.0029610999, 0.0051325731, 0.0012337916, -0.0021385721, 0.0034217154, 0.0051325731, -0.0088964601, -0.0021385721, -0.00051407984, 0.00082252775, 0.0012337916, -0.0021385721, -0.00051407984, 0.002264813, -0.0036237008, -0.0054355511, 0.009421622, 0.002264813, -0.0036237008, 0.0057979212, 0.0086968818, -0.015074595, -0.0036237008, -0.0054355511, 0.0086968818, 0.013045323, -0.022611893, -0.0054355511, 0.009421622, -0.015074595, -0.022611893, 0.039193947, 0.009421622, 0.002264813, -0.0036237008, -0.0054355511, 0.009421622, 0.002264813, 0.0039270385, -0.0062832616, -0.0094248925, 0.01633648, 0.0039270385, -0.0062832616, 0.010053219, 0.015079828, -0.026138368, -0.0062832616, -0.0094248925, 0.015079828, 0.022619742, -0.039207553, -0.0094248925, 0.01633648, -0.026138368, -0.039207553, 0.067959758, 0.01633648, 0.0039270385, -0.0062832616, -0.0094248925, 0.01633648, 0.0039270385, 0.002117641, -0.0033882256, -0.0050823384, 0.0088093866, 0.002117641, -0.0033882256, 0.005421161, 0.0081317415, -0.014095019, -0.0033882256, -0.0050823384, 0.0081317415, 0.012197612, -0.021142528, -0.0050823384, 0.0088093866, -0.014095019, -0.021142528, 0.036647048, 0.0088093866, 0.002117641, -0.0033882256, -0.0050823384, 0.0088093866, 0.002117641, 0.00024017647, -0.00038428235, -0.00057642352, 0.0009991341, 0.00024017647, -0.00038428235, 0.00061485175, 0.00092227763, -0.0015986146, -0.00038428235, -0.00057642352, 0.00092227763, 0.0013834164, -0.0023979218, -0.00057642352, 0.0009991341, -0.0015986146, -0.0023979218, 0.0041563979, 0.0009991341, 0.00024017647, -0.00038428235, -0.00057642352, 0.0009991341, 0.00024017647,
+ 0.01028579, 0.013780005, -0.014764291, 0.0019685722, 0.00024607152, 0.013780005, 0.018461251, -0.019779912, 0.0026373216, 0.0003296652, -0.014764291, -0.019779912, 0.021192763, -0.0028257017, -0.00035321271, 0.0019685722, 0.0026373216, -0.0028257017, 0.00037676022, 4.7095028e-05, 0.00024607152, 0.0003296652, -0.00035321271, 4.7095028e-05, 5.8868785e-06, -0.027428772, -0.03674668, 0.039371443, -0.0052495258, -0.00065619072, -0.03674668, -0.049230003, 0.052746431, -0.0070328575, -0.00087910719, 0.039371443, 0.052746431, -0.056514034, 0.0075352045, 0.00094190056, -0.0052495258, -0.0070328575, 0.0075352045, -0.0010046939, -0.00012558674, -0.00065619072, -0.00087910719, 0.00094190056, -0.00012558674, -1.5698343e-05, -0.041143158, -0.055120021, 0.059057165, -0.0078742887, -0.00098428608, -0.055120021, -0.073845004, 0.079119647, -0.010549286, -0.0013186608, 0.059057165, 0.079119647, -0.08477105, 0.011302807, 0.0014128508, -0.0078742887, -0.010549286, 0.011302807, -0.0015070409, -0.00018838011, -0.00098428608, -0.0013186608, 0.0014128508, -0.00018838011, -2.3547514e-05, 0.24685895, 0.33072012, -0.35434299, 0.047245732, 0.0059057165, 0.33072012, 0.44307002, -0.47471788, 0.063295718, 0.0079119647, -0.35434299, -0.47471788, 0.5086263, -0.06781684, -0.008477105, 0.047245732, 0.063295718, -0.06781684, 0.0090422454, 0.0011302807, 0.0059057165, 0.0079119647, -0.008477105, 0.0011302807, 0.00014128508, 0.074743404, 0.1001347, -0.10728718, 0.014304958, 0.0017881197, 0.1001347, 0.13415176, -0.14373403, 0.019164537, 0.0023955671, -0.10728718, -0.14373403, 0.15400074, -0.020533432, -0.002566679, 0.014304958, 0.019164537, -0.020533432, 0.002737791, 0.00034222387, 0.0017881197, 0.0023955671, -0.002566679, 0.00034222387, 4.2777984e-05,
+ -0.00096698418, 0.0042601132, 0.0073867595, 0.0039832827, 0.00045177193, -0.0012954812, 0.0057073287, 0.0098961371, 0.0053364554, 0.0006052447, 0.0013880156, -0.006114995, -0.010603004, -0.0057176307, -0.00064847646, -0.00018506874, 0.00081533267, 0.0014137339, 0.00076235077, 8.6463528e-05, -2.3133593e-05, 0.00010191658, 0.00017671673, 9.5293846e-05, 1.0807941e-05, 0.0025786245, -0.011360302, -0.019698025, -0.010622087, -0.0012047252, 0.0034546165, -0.015219543, -0.026389699, -0.014230548, -0.0016139859, -0.0037013749, 0.016306653, 0.028274677, 0.015247015, 0.0017292706, 0.00049351665, -0.0021742205, -0.003769957, -0.0020329354, -0.00023056941, 6.1689581e-05, -0.00027177756, -0.00047124462, -0.00025411692, -2.8821176e-05, 0.0038679367, -0.017040453, -0.029547038, -0.015933131, -0.0018070877, 0.0051819248, -0.022829315, -0.039584548, -0.021345821, -0.0024209788, -0.0055520623, 0.02445998, 0.042412016, 0.022870523, 0.0025939058, 0.00074027497, -0.0032613307, -0.0056549355, -0.0030494031, -0.00034585411, 9.2534371e-05, -0.00040766634, -0.00070686694, -0.00038117538, -4.3231764e-05, -0.02320762, 0.10224272, 0.17728223, 0.095598786, 0.010842526, -0.031091549, 0.13697589, 0.23750729, 0.12807493, 0.014525873, 0.033312374, -0.14675988, -0.2544721, -0.13722314, -0.015563435, -0.0044416498, 0.019567984, 0.033929613, 0.018296418, 0.0020751247, -0.00055520623, 0.002445998, 0.0042412016, 0.0022870523, 0.00025939058, -0.0070267517, 0.030956823, 0.053677119, 0.028945188, 0.003282876, -0.00941383, 0.041473255, 0.07191193, 0.038778242, 0.0043981115, 0.010086246, -0.044435631, -0.077048496, -0.041548117, -0.0047122623, -0.0013448329, 0.0059247507, 0.010273133, 0.0055397489, 0.00062830164, -0.00016810411, 0.00074059384, 0.0012841416, 0.00069246861, 7.8537705e-05,
+ 0.00027683046, -0.00073821456, -0.0011073218, 0.0066439311, 0.0020116347, 0.00037087335, -0.00098899559, -0.0014834934, 0.0089009603, 0.002695013, -0.0003973643, 0.0010596381, 0.0015894572, -0.0095367432, -0.0028875139, 5.2981906e-05, -0.00014128508, -0.00021192763, 0.0012715658, 0.00038500185, 6.6227383e-06, -1.7660635e-05, -2.6490953e-05, 0.00015894572, 4.8125232e-05, -0.00073821456, 0.0019685722, 0.0029528583, -0.01771715, -0.0053643592, -0.00098899559, 0.0026373216, 0.0039559823, -0.023735894, -0.0071867013, 0.0010596381, -0.0028257017, -0.0042385525, 0.025431315, 0.0077000371, -0.00014128508, 0.00037676022, 0.00056514034, -0.003390842, -0.0010266716, -1.7660635e-05, 4.7095028e-05, 7.0642542e-05, -0.00042385525, -0.00012833395, -0.0011073218, 0.0029528583, 0.0044292874, -0.026575724, -0.0080465387, -0.0014834934, 0.0039559823, 0.0059339735, -0.035603841, -0.010780052, 0.0015894572, -0.0042385525, -0.0063578288, 0.038146973, 0.011550056, -0.00021192763, 0.00056514034, 0.0008477105, -0.005086263, -0.0015400074, -2.6490953e-05, 7.0642542e-05, 0.00010596381, -0.00063578288, -0.00019250093, 0.0066439311, -0.01771715, -0.026575724, 0.15945435, 0.048279232, 0.0089009603, -0.023735894, -0.035603841, 0.21362305, 0.064680311, -0.0095367432, 0.025431315, 0.038146973, -0.22888184, -0.069300334, 0.0012715658, -0.003390842, -0.005086263, 0.030517578, 0.0092400445, 0.00015894572, -0.00042385525, -0.00063578288, 0.0038146973, 0.0011550056, 0.0020116347, -0.0053643592, -0.0080465387, 0.048279232, 0.014617879, 0.002695013, -0.0071867013, -0.010780052, 0.064680311, 0.019583761, -0.0028875139, 0.0077000371, 0.011550056, -0.069300334, -0.020982601, 0.00038500185, -0.0010266716, -0.0015400074, 0.0092400445, 0.0027976801, 4.8125232e-05, -0.00012833395, -0.00019250093, 0.0011550056, 0.00034971002,
+ -0.00010573386, 0.00051982609, -0.0004383149, -0.00093814767, 2.1146771e-05, -0.00014165301, 0.00069641773, -0.00058721613, -0.0012568486, 2.8330603e-05, 0.00015177109, -0.00074616185, 0.00062916014, 0.0013466235, -3.0354217e-05, -2.0236145e-05, 9.9488247e-05, -8.3888019e-05, -0.00017954979, 4.047229e-06, -2.5295181e-06, 1.2436031e-05, -1.0486002e-05, -2.2443724e-05, 5.0590362e-07, 0.00028195695, -0.0013862029, 0.0011688397, 0.0025017271, -5.639139e-05, 0.00037774137, -0.0018571139, 0.0015659097, 0.0033515962, -7.5548274e-05, -0.0004047229, 0.0019897649, -0.0016777604, -0.0035909959, 8.0944579e-05, 5.3963053e-05, -0.00026530199, 0.00022370138, 0.00047879945, -1.0792611e-05, 6.7453816e-06, -3.3162749e-05, 2.7962673e-05, 5.9849931e-05, -1.3490763e-06, 0.00042293543, -0.0020793044, 0.0017532596, 0.0037525907, -8.4587085e-05, 0.00056661206, -0.0027856709, 0.0023488645, 0.0050273942, -0.00011332241, -0.00060708434, 0.0029846474, -0.0025166406, -0.0053864938, 0.00012141687, 8.0944579e-05, -0.00039795299, 0.00033555207, 0.00071819918, -1.6188916e-05, 1.0118072e-05, -4.9744123e-05, 4.1944009e-05, 8.9774897e-05, -2.0236145e-06, -0.0025376126, 0.012475826, -0.010519558, -0.022515544, 0.00050752251, -0.0033996723, 0.016714025, -0.014093187, -0.030164365, 0.00067993447, 0.0036425061, -0.017907884, 0.015099843, 0.032318963, -0.00072850121, -0.00048566748, 0.0023877179, -0.0020133124, -0.0043091951, 9.7133495e-05, -6.0708434e-05, 0.00029846474, -0.00025166406, -0.00053864938, 1.2141687e-05, -0.00076833269, 0.0037774029, -0.0031850883, -0.0068172064, 0.00015366654, -0.0010293452, 0.0050606355, -0.0042671039, -0.0091330995, 0.00020586905, 0.0011028699, -0.0054221094, 0.004571897, 0.0097854638, -0.00022057398, -0.00014704932, 0.00072294793, -0.00060958627, -0.0013047285, 2.9409864e-05, -1.8381165e-05, 9.0368491e-05, -7.6198284e-05, -0.00016309106, 3.676233e-06,
+ 0.0012303576, -0.0019685722, -0.0029528583, 0.0051182876, 0.0012303576, 0.001648326, -0.0026373216, -0.0039559823, 0.0068570361, 0.001648326, -0.0017660635, 0.0028257017, 0.0042385525, -0.0073468244, -0.0017660635, 0.00023547514, -0.00037676022, -0.00056514034, 0.00097957658, 0.00023547514, 2.9434392e-05, -4.7095028e-05, -7.0642542e-05, 0.00012244707, 2.9434392e-05, -0.0032809536, 0.0052495258, 0.0078742887, -0.013648767, -0.0032809536, -0.0043955359, 0.0070328575, 0.010549286, -0.01828543, -0.0043955359, 0.0047095028, -0.0075352045, -0.011302807, 0.019591532, 0.0047095028, -0.00062793371, 0.0010046939, 0.0015070409, -0.0026122042, -0.00062793371, -7.8491713e-05, 0.00012558674, 0.00018838011, -0.00032652553, -7.8491713e-05, -0.0049214304, 0.0078742887, 0.011811433, -0.020473151, -0.0049214304, -0.0065933039, 0.010549286, 0.015823929, -0.027428144, -0.0065933039, 0.0070642542, -0.011302807, -0.01695421, 0.029387297, 0.0070642542, -0.00094190056, 0.0015070409, 0.0022605613, -0.0039183063, -0.00094190056, -0.00011773757, 0.00018838011, 0.00028257017, -0.00048978829, -0.00011773757, 0.029528583, -0.047245732, -0.070868598, 0.1228389, 0.029528583, 0.039559823, -0.063295718, -0.094943576, 0.16456887, 0.039559823, -0.042385525, 0.06781684, 0.10172526, -0.17632378, -0.042385525, 0.0056514034, -0.0090422454, -0.013563368, 0.023509838, 0.0056514034, 0.00070642542, -0.0011302807, -0.001695421, 0.0029387297, 0.00070642542, 0.0089405986, -0.014304958, -0.021457437, 0.03719289, 0.0089405986, 0.011977835, -0.019164537, -0.028746805, 0.049827795, 0.011977835, -0.012833395, 0.020533432, 0.030800148, -0.053386924, -0.012833395, 0.0017111193, -0.002737791, -0.0041066864, 0.0071182565, 0.0017111193, 0.00021388992, -0.00034222387, -0.0005133358, 0.00088978206, 0.00021388992,
+ -0.00096698418, -0.0012954812, 0.0013880156, -0.00018506874, -2.3133593e-05, 0.0042601132, 0.0057073287, -0.006114995, 0.00081533267, 0.00010191658, 0.0073867595, 0.0098961371, -0.010603004, 0.0014137339, 0.00017671673, 0.0039832827, 0.0053364554, -0.0057176307, 0.00076235077, 9.5293846e-05, 0.00045177193, 0.0006052447, -0.00064847646, 8.6463528e-05, 1.0807941e-05, 0.0025786245, 0.0034546165, -0.0037013749, 0.00049351665, 6.1689581e-05, -0.011360302, -0.015219543, 0.016306653, -0.0021742205, -0.00027177756, -0.019698025, -0.026389699, 0.028274677, -0.003769957, -0.00047124462, -0.010622087, -0.014230548, 0.015247015, -0.0020329354, -0.00025411692, -0.0012047252, -0.0016139859, 0.0017292706, -0.00023056941, -2.8821176e-05, 0.0038679367, 0.0051819248, -0.0055520623, 0.00074027497, 9.2534371e-05, -0.017040453, -0.022829315, 0.02445998, -0.0032613307, -0.00040766634, -0.029547038, -0.039584548, 0.042412016, -0.0056549355, -0.00070686694, -0.015933131, -0.021345821, 0.022870523, -0.0030494031, -0.00038117538, -0.0018070877, -0.0024209788, 0.0025939058, -0.00034585411, -4.3231764e-05, -0.02320762, -0.031091549, 0.033312374, -0.0044416498, -0.00055520623, 0.10224272, 0.13697589, -0.14675988, 0.019567984, 0.002445998, 0.17728223, 0.23750729, -0.2544721, 0.033929613, 0.0042412016, 0.095598786, 0.12807493, -0.13722314, 0.018296418, 0.0022870523, 0.010842526, 0.014525873, -0.015563435, 0.0020751247, 0.00025939058, -0.0070267517, -0.00941383, 0.010086246, -0.0013448329, -0.00016810411, 0.030956823, 0.041473255, -0.044435631, 0.0059247507, 0.00074059384, 0.053677119, 0.07191193, -0.077048496, 0.010273133, 0.0012841416, 0.028945188, 0.038778242, -0.041548117, 0.0055397489, 0.00069246861, 0.003282876, 0.0043981115, -0.0047122623, 0.00062830164, 7.8537705e-05,
+ 9.0907791e-05, -0.00040050033, -0.00069444154, -0.00037447503, -4.2471831e-05, -0.00040050033, 0.0017644309, 0.0030594085, 0.0016497747, 0.00018711248, -0.00069444154, 0.0030594085, 0.0053048155, 0.0028606021, 0.00032444088, -0.00037447503, 0.0016497747, 0.0028606021, 0.0015425691, 0.00017495354, -4.2471831e-05, 0.00018711248, 0.00032444088, 0.00017495354, 1.9842704e-05, -0.00024242077, 0.0010680009, 0.0018518441, 0.00099860009, 0.00011325821, 0.0010680009, -0.004705149, -0.0081584225, -0.0043993992, -0.00049896661, 0.0018518441, -0.0081584225, -0.014146175, -0.0076282723, -0.00086517568, 0.00099860009, -0.0043993992, -0.0076282723, -0.0041135177, -0.00046654279, 0.00011325821, -0.00049896661, -0.00086517568, -0.00046654279, -5.2913878e-05, -0.00036363116, 0.0016020013, 0.0027777662, 0.0014979001, 0.00016988732, 0.0016020013, -0.0070577234, -0.012237634, -0.0065990988, -0.00074844991, 0.0027777662, -0.012237634, -0.021219262, -0.011442409, -0.0012977635, 0.0014979001, -0.0065990988, -0.011442409, -0.0061702765, -0.00069981418, 0.00016988732, -0.00074844991, -0.0012977635, -0.00069981418, -7.9370817e-05, 0.002181787, -0.0096120078, -0.016666597, -0.0089874008, -0.0010193239, -0.0096120078, 0.042346341, 0.073425803, 0.039594593, 0.0044906995, -0.016666597, 0.073425803, 0.12731557, 0.068654451, 0.0077865811, -0.0089874008, 0.039594593, 0.068654451, 0.037021659, 0.0041988851, -0.0010193239, 0.0044906995, 0.0077865811, 0.0041988851, 0.0004762249, 0.00066059661, -0.0029103024, -0.0050462752, -0.0027211852, -0.00030862864, -0.0029103024, 0.012821531, 0.022231701, 0.011988363, 0.001359684, -0.0050462752, 0.022231701, 0.038548326, 0.020787042, 0.0023576037, -0.0027211852, 0.011988363, 0.020787042, 0.011209336, 0.0012713291, -0.00030862864, 0.001359684, 0.0023576037, 0.0012713291, 0.00014419032,
+ -2.6025292e-05, 6.9400779e-05, 0.00010410117, -0.00062460701, -0.00018911712, 0.00011465616, -0.00030574975, -0.00045862463, 0.0027517478, 0.00083316807, 0.00019880633, -0.0005301502, -0.0007952253, 0.0047713518, 0.0014446593, 0.00010720558, -0.00028588154, -0.00042882231, 0.0025729338, 0.00077902719, 1.2158934e-05, -3.2423823e-05, -4.8635734e-05, 0.00029181441, 8.8354918e-05, 6.9400779e-05, -0.00018506874, -0.00027760311, 0.0016656187, 0.00050431232, -0.00030574975, 0.00081533267, 0.001222999, -0.007337994, -0.0022217815, -0.0005301502, 0.0014137339, 0.0021206008, -0.012723605, -0.0038524248, -0.00028588154, 0.00076235077, 0.0011435261, -0.0068611569, -0.0020774058, -3.2423823e-05, 8.6463528e-05, 0.00012969529, -0.00077817175, -0.00023561311, 0.00010410117, -0.00027760311, -0.00041640467, 0.002498428, 0.00075646849, -0.00045862463, 0.001222999, 0.0018344985, -0.011006991, -0.0033326723, -0.0007952253, 0.0021206008, 0.0031809012, -0.019085407, -0.0057786372, -0.00042882231, 0.0011435261, 0.0017152892, -0.010291735, -0.0031161088, -4.8635734e-05, 0.00012969529, 0.00019454294, -0.0011672576, -0.00035341967, -0.00062460701, 0.0016656187, 0.002498428, -0.014990568, -0.0045388109, 0.0027517478, -0.007337994, -0.011006991, 0.066041946, 0.019996034, 0.0047713518, -0.012723605, -0.019085407, 0.11451244, 0.034671823, 0.0025729338, -0.0068611569, -0.010291735, 0.061750412, 0.018696653, 0.00029181441, -0.00077817175, -0.0011672576, 0.0070035458, 0.002120518, -0.00018911712, 0.00050431232, 0.00075646849, -0.0045388109, -0.0013742511, 0.00083316807, -0.0022217815, -0.0033326723, 0.019996034, 0.0060543547, 0.0014446593, -0.0038524248, -0.0057786372, 0.034671823, 0.010497858, 0.00077902719, -0.0020774058, -0.0031161088, 0.018696653, 0.0056609309, 8.8354918e-05, -0.00023561311, -0.00035341967, 0.002120518, 0.00064204573,
+ 9.9402157e-06, -4.8869715e-05, 4.1206712e-05, 8.8196823e-05, -1.9880431e-06, -4.3792282e-05, 0.00021529878, -0.00018153892, -0.00038855698, 8.7584564e-06, -7.5932972e-05, 0.0003733141, -0.00031477668, -0.00067373255, 1.5186594e-05, -4.0946574e-05, 0.00020130825, -0.00016974216, -0.00036330779, 8.1893149e-06, -4.6440371e-06, 2.2831775e-05, -1.9251645e-05, -4.1205275e-05, 9.2880743e-07, -2.6507242e-05, 0.00013031924, -0.00010988457, -0.00023519153, 5.3014484e-06, 0.00011677942, -0.00057413009, 0.00048410377, 0.0010361519, -2.3355884e-05, 0.00020248792, -0.00099550427, 0.00083940449, 0.0017966201, -4.0497585e-05, 0.00010919086, -0.000536822, 0.00045264577, 0.00096882076, -2.1838173e-05, 1.2384099e-05, -6.0884734e-05, 5.133772e-05, 0.00010988073, -2.4768198e-06, -3.9760863e-05, 0.00019547886, -0.00016482685, -0.00035278729, 7.9521725e-06, 0.00017516913, -0.00086119513, 0.00072615566, 0.0015542279, -3.5033826e-05, 0.00030373189, -0.0014932564, 0.0012591067, 0.0026949302, -6.0746377e-05, 0.0001637863, -0.000805233, 0.00067896865, 0.0014532311, -3.2757259e-05, 1.8576149e-05, -9.1327101e-05, 7.700658e-05, 0.0001648211, -3.7152297e-06, 0.00023856518, -0.0011728732, 0.00098896109, 0.0021167237, -4.7713035e-05, -0.0010510148, 0.0051671708, -0.004356934, -0.0093253674, 0.00021020295, -0.0018223913, 0.0089595384, -0.0075546404, -0.016169581, 0.00036447826, -0.00098271778, 0.004831398, -0.0040738119, -0.0087193869, 0.00019654356, -0.00011145689, 0.00054796261, -0.00046203948, -0.0009889266, 2.2291378e-05, 7.2232234e-05, -0.00035511993, 0.00029943544, 0.00064089691, -1.4446447e-05, -0.00031822392, 0.0015645045, -0.0013191828, -0.002823514, 6.3644783e-05, -0.00055177959, 0.0027127491, -0.0022873772, -0.0048957898, 0.00011035592, -0.00029754511, 0.0014628399, -0.0012334597, -0.0026400366, 5.9509021e-05, -3.374667e-05, 0.0001659109, -0.00013989529, -0.000299425, 6.749334e-06,
+ -0.00011566796, 0.00018506874, 0.00027760311, -0.00048117873, -0.00011566796, 0.00050958292, -0.00081533267, -0.001222999, 0.0021198649, 0.00050958292, 0.00088358367, -0.0014137339, -0.0021206008, 0.0036757081, 0.00088358367, 0.00047646923, -0.00076235077, -0.0011435261, 0.001982112, 0.00047646923, 5.4039705e-05, -8.6463528e-05, -0.00012969529, 0.00022480517, 5.4039705e-05, 0.0003084479, -0.00049351665, -0.00074027497, 0.0012831433, 0.0003084479, -0.0013588878, 0.0021742205, 0.0032613307, -0.0056529732, -0.0013588878, -0.0023562231, 0.003769957, 0.0056549355, -0.0098018882, -0.0023562231, -0.0012705846, 0.0020329354, 0.0030494031, -0.005285632, -0.0012705846, -0.00014410588, 0.00023056941, 0.00034585411, -0.00059948046, -0.00014410588, 0.00046267186, -0.00074027497, -0.0011104125, 0.0019247149, 0.00046267186, -0.0020383317, 0.0032613307, 0.004891996, -0.0084794598, -0.0020383317, -0.0035343347, 0.0056549355, 0.0084824032, -0.014702832, -0.0035343347, -0.0019058769, 0.0030494031, 0.0045741046, -0.007928448, -0.0019058769, -0.00021615882, 0.00034585411, 0.00051878117, -0.00089922069, -0.00021615882, -0.0027760311, 0.0044416498, 0.0066624747, -0.01154829, -0.0027760311, 0.01222999, -0.019567984, -0.029351976, 0.050876759, 0.01222999, 0.021206008, -0.033929613, -0.050894419, 0.088216994, 0.021206008, 0.011435261, -0.018296418, -0.027444628, 0.047570688, 0.011435261, 0.0012969529, -0.0020751247, -0.003112687, 0.0053953241, 0.0012969529, -0.00084052054, 0.0013448329, 0.0020172493, -0.0034965654, -0.00084052054, 0.0037029692, -0.0059247507, -0.0088871261, 0.015404352, 0.0037029692, 0.006420708, -0.010273133, -0.015409699, 0.026710145, 0.006420708, 0.0034623431, -0.0055397489, -0.0083096233, 0.014403347, 0.0034623431, 0.00039268852, -0.00062830164, -0.00094245245, 0.0016335843, 0.00039268852,
+ 0.00027683046, 0.00037087335, -0.0003973643, 5.2981906e-05, 6.6227383e-06, -0.00073821456, -0.00098899559, 0.0010596381, -0.00014128508, -1.7660635e-05, -0.0011073218, -0.0014834934, 0.0015894572, -0.00021192763, -2.6490953e-05, 0.0066439311, 0.0089009603, -0.0095367432, 0.0012715658, 0.00015894572, 0.0020116347, 0.002695013, -0.0028875139, 0.00038500185, 4.8125232e-05, -0.00073821456, -0.00098899559, 0.0010596381, -0.00014128508, -1.7660635e-05, 0.0019685722, 0.0026373216, -0.0028257017, 0.00037676022, 4.7095028e-05, 0.0029528583, 0.0039559823, -0.0042385525, 0.00056514034, 7.0642542e-05, -0.01771715, -0.023735894, 0.025431315, -0.003390842, -0.00042385525, -0.0053643592, -0.0071867013, 0.0077000371, -0.0010266716, -0.00012833395, -0.0011073218, -0.0014834934, 0.0015894572, -0.00021192763, -2.6490953e-05, 0.0029528583, 0.0039559823, -0.0042385525, 0.00056514034, 7.0642542e-05, 0.0044292874, 0.0059339735, -0.0063578288, 0.0008477105, 0.00010596381, -0.026575724, -0.035603841, 0.038146973, -0.005086263, -0.00063578288, -0.0080465387, -0.010780052, 0.011550056, -0.0015400074, -0.00019250093, 0.0066439311, 0.0089009603, -0.0095367432, 0.0012715658, 0.00015894572, -0.01771715, -0.023735894, 0.025431315, -0.003390842, -0.00042385525, -0.026575724, -0.035603841, 0.038146973, -0.005086263, -0.00063578288, 0.15945435, 0.21362305, -0.22888184, 0.030517578, 0.0038146973, 0.048279232, 0.064680311, -0.069300334, 0.0092400445, 0.0011550056, 0.0020116347, 0.002695013, -0.0028875139, 0.00038500185, 4.8125232e-05, -0.0053643592, -0.0071867013, 0.0077000371, -0.0010266716, -0.00012833395, -0.0080465387, -0.010780052, 0.011550056, -0.0015400074, -0.00019250093, 0.048279232, 0.064680311, -0.069300334, 0.0092400445, 0.0011550056, 0.014617879, 0.019583761, -0.020982601, 0.0027976801, 0.00034971002,
+ -2.6025292e-05, 0.00011465616, 0.00019880633, 0.00010720558, 1.2158934e-05, 6.9400779e-05, -0.00030574975, -0.0005301502, -0.00028588154, -3.2423823e-05, 0.00010410117, -0.00045862463, -0.0007952253, -0.00042882231, -4.8635734e-05, -0.00062460701, 0.0027517478, 0.0047713518, 0.0025729338, 0.00029181441, -0.00018911712, 0.00083316807, 0.0014446593, 0.00077902719, 8.8354918e-05, 6.9400779e-05, -0.00030574975, -0.0005301502, -0.00028588154, -3.2423823e-05, -0.00018506874, 0.00081533267, 0.0014137339, 0.00076235077, 8.6463528e-05, -0.00027760311, 0.001222999, 0.0021206008, 0.0011435261, 0.00012969529, 0.0016656187, -0.007337994, -0.012723605, -0.0068611569, -0.00077817175, 0.00050431232, -0.0022217815, -0.0038524248, -0.0020774058, -0.00023561311, 0.00010410117, -0.00045862463, -0.0007952253, -0.00042882231, -4.8635734e-05, -0.00027760311, 0.001222999, 0.0021206008, 0.0011435261, 0.00012969529, -0.00041640467, 0.0018344985, 0.0031809012, 0.0017152892, 0.00019454294, 0.002498428, -0.011006991, -0.019085407, -0.010291735, -0.0011672576, 0.00075646849, -0.0033326723, -0.0057786372, -0.0031161088, -0.00035341967, -0.00062460701, 0.0027517478, 0.0047713518, 0.0025729338, 0.00029181441, 0.0016656187, -0.007337994, -0.012723605, -0.0068611569, -0.00077817175, 0.002498428, -0.011006991, -0.019085407, -0.010291735, -0.0011672576, -0.014990568, 0.066041946, 0.11451244, 0.061750412, 0.0070035458, -0.0045388109, 0.019996034, 0.034671823, 0.018696653, 0.002120518, -0.00018911712, 0.00083316807, 0.0014446593, 0.00077902719, 8.8354918e-05, 0.00050431232, -0.0022217815, -0.0038524248, -0.0020774058, -0.00023561311, 0.00075646849, -0.0033326723, -0.0057786372, -0.0031161088, -0.00035341967, -0.0045388109, 0.019996034, 0.034671823, 0.018696653, 0.002120518, -0.0013742511, 0.0060543547, 0.010497858, 0.0056609309, 0.00064204573,
+ 7.4505806e-06, -1.9868215e-05, -2.9802322e-05, 0.00017881393, 5.4140886e-05, -1.9868215e-05, 5.2981906e-05, 7.947286e-05, -0.00047683716, -0.0001443757, -2.9802322e-05, 7.947286e-05, 0.00011920929, -0.00071525574, -0.00021656354, 0.00017881393, -0.00047683716, -0.00071525574, 0.0042915344, 0.0012993813, 5.4140886e-05, -0.0001443757, -0.00021656354, 0.0012993813, 0.00039342377, -1.9868215e-05, 5.2981906e-05, 7.947286e-05, -0.00047683716, -0.0001443757, 5.2981906e-05, -0.00014128508, -0.00021192763, 0.0012715658, 0.00038500185, 7.947286e-05, -0.00021192763, -0.00031789144, 0.0019073486, 0.00057750278, -0.00047683716, 0.0012715658, 0.0019073486, -0.011444092, -0.0034650167, -0.0001443757, 0.00038500185, 0.00057750278, -0.0034650167, -0.0010491301, -2.9802322e-05, 7.947286e-05, 0.00011920929, -0.00071525574, -0.00021656354, 7.947286e-05, -0.00021192763, -0.00031789144, 0.0019073486, 0.00057750278, 0.00011920929, -0.00031789144, -0.00047683716, 0.0028610229, 0.00086625417, -0.00071525574, 0.0019073486, 0.0028610229, -0.017166138, -0.005197525, -0.00021656354, 0.00057750278, 0.00086625417, -0.005197525, -0.0015736951, 0.00017881393, -0.00047683716, -0.00071525574, 0.0042915344, 0.0012993813, -0.00047683716, 0.0012715658, 0.0019073486, -0.011444092, -0.0034650167, -0.00071525574, 0.0019073486, 0.0028610229, -0.017166138, -0.005197525, 0.0042915344, -0.011444092, -0.017166138, 0.10299683, 0.03118515, 0.0012993813, -0.0034650167, -0.005197525, 0.03118515, 0.0094421705, 5.4140886e-05, -0.0001443757, -0.00021656354, 0.0012993813, 0.00039342377, -0.0001443757, 0.00038500185, 0.00057750278, -0.0034650167, -0.0010491301, -0.00021656354, 0.00057750278, 0.00086625417, -0.005197525, -0.0015736951, 0.0012993813, -0.0034650167, -0.005197525, 0.03118515, 0.0094421705, 0.00039342377, -0.0010491301, -0.0015736951, 0.0094421705, 0.0028588794,
+ -2.8457079e-06, 1.3990535e-05, -1.1796753e-05, -2.524919e-05, 5.6914157e-07, 7.5885543e-06, -3.7308092e-05, 3.1458007e-05, 6.7331173e-05, -1.5177109e-06, 1.1382831e-05, -5.5962139e-05, 4.718701e-05, 0.00010099676, -2.2765663e-06, -6.8296989e-05, 0.00033577283, -0.00028312206, -0.00060598056, 1.3659398e-05, -2.067881e-05, 0.00010166455, -8.5723069e-05, -0.00018347745, 4.1357621e-06, 7.5885543e-06, -3.7308092e-05, 3.1458007e-05, 6.7331173e-05, -1.5177109e-06, -2.0236145e-05, 9.9488247e-05, -8.3888019e-05, -0.00017954979, 4.047229e-06, -3.0354217e-05, 0.00014923237, -0.00012583203, -0.00026932469, 6.0708434e-06, 0.0001821253, -0.00089539422, 0.00075499217, 0.0016159481, -3.6425061e-05, 5.5143495e-05, -0.00027110547, 0.00022859485, 0.00048927319, -1.1028699e-05, 1.1382831e-05, -5.5962139e-05, 4.718701e-05, 0.00010099676, -2.2765663e-06, -3.0354217e-05, 0.00014923237, -0.00012583203, -0.00026932469, 6.0708434e-06, -4.5531326e-05, 0.00022384855, -0.00018874804, -0.00040398704, 9.1062652e-06, 0.00027318796, -0.0013430913, 0.0011324883, 0.0024239222, -5.4637591e-05, 8.2715242e-05, -0.00040665821, 0.00034289228, 0.00073390978, -1.6543048e-05, -6.8296989e-05, 0.00033577283, -0.00028312206, -0.00060598056, 1.3659398e-05, 0.0001821253, -0.00089539422, 0.00075499217, 0.0016159481, -3.6425061e-05, 0.00027318796, -0.0013430913, 0.0011324883, 0.0024239222, -5.4637591e-05, -0.0016391277, 0.008058548, -0.0067949295, -0.014543533, 0.00032782555, -0.00049629145, 0.0024399492, -0.0020573537, -0.0044034587, 9.925829e-05, -2.067881e-05, 0.00010166455, -8.5723069e-05, -0.00018347745, 4.1357621e-06, 5.5143495e-05, -0.00027110547, 0.00022859485, 0.00048927319, -1.1028699e-05, 8.2715242e-05, -0.00040665821, 0.00034289228, 0.00073390978, -1.6543048e-05, -0.00049629145, 0.0024399492, -0.0020573537, -0.0044034587, 9.925829e-05, -0.00015026602, 0.00073876241, -0.00062292097, -0.0013332694, 3.0053205e-05,
+ 3.3113692e-05, -5.2981906e-05, -7.947286e-05, 0.00013775296, 3.3113692e-05, -8.8303177e-05, 0.00014128508, 0.00021192763, -0.00036734122, -8.8303177e-05, -0.00013245477, 0.00021192763, 0.00031789144, -0.00055101183, -0.00013245477, 0.0007947286, -0.0012715658, -0.0019073486, 0.003306071, 0.0007947286, 0.00024062616, -0.00038500185, -0.00057750278, 0.0010010048, 0.00024062616, -8.8303177e-05, 0.00014128508, 0.00021192763, -0.00036734122, -8.8303177e-05, 0.00023547514, -0.00037676022, -0.00056514034, 0.00097957658, 0.00023547514, 0.00035321271, -0.00056514034, -0.0008477105, 0.0014693649, 0.00035321271, -0.0021192763, 0.003390842, 0.005086263, -0.0088161892, -0.0021192763, -0.00064166976, 0.0010266716, 0.0015400074, -0.0026693462, -0.00064166976, -0.00013245477, 0.00021192763, 0.00031789144, -0.00055101183, -0.00013245477, 0.00035321271, -0.00056514034, -0.0008477105, 0.0014693649, 0.00035321271, 0.00052981906, -0.0008477105, -0.0012715658, 0.0022040473, 0.00052981906, -0.0031789144, 0.005086263, 0.0076293945, -0.013224284, -0.0031789144, -0.00096250463, 0.0015400074, 0.0023100111, -0.0040040193, -0.00096250463, 0.0007947286, -0.0012715658, -0.0019073486, 0.003306071, 0.0007947286, -0.0021192763, 0.003390842, 0.005086263, -0.0088161892, -0.0021192763, -0.0031789144, 0.005086263, 0.0076293945, -0.013224284, -0.0031789144, 0.019073486, -0.030517578, -0.045776367, 0.079345703, 0.019073486, 0.0057750278, -0.0092400445, -0.013860067, 0.024024116, 0.0057750278, 0.00024062616, -0.00038500185, -0.00057750278, 0.0010010048, 0.00024062616, -0.00064166976, 0.0010266716, 0.0015400074, -0.0026693462, -0.00064166976, -0.00096250463, 0.0015400074, 0.0023100111, -0.0040040193, -0.00096250463, 0.0057750278, -0.0092400445, -0.013860067, 0.024024116, 0.0057750278, 0.0017485501, -0.0027976801, -0.0041965202, 0.0072739684, 0.0017485501,
+ -0.00010573386, -0.00014165301, 0.00015177109, -2.0236145e-05, -2.5295181e-06, 0.00051982609, 0.00069641773, -0.00074616185, 9.9488247e-05, 1.2436031e-05, -0.0004383149, -0.00058721613, 0.00062916014, -8.3888019e-05, -1.0486002e-05, -0.00093814767, -0.0012568486, 0.0013466235, -0.00017954979, -2.2443724e-05, 2.1146771e-05, 2.8330603e-05, -3.0354217e-05, 4.047229e-06, 5.0590362e-07, 0.00028195695, 0.00037774137, -0.0004047229, 5.3963053e-05, 6.7453816e-06, -0.0013862029, -0.0018571139, 0.0019897649, -0.00026530199, -3.3162749e-05, 0.0011688397, 0.0015659097, -0.0016777604, 0.00022370138, 2.7962673e-05, 0.0025017271, 0.0033515962, -0.0035909959, 0.00047879945, 5.9849931e-05, -5.639139e-05, -7.5548274e-05, 8.0944579e-05, -1.0792611e-05, -1.3490763e-06, 0.00042293543, 0.00056661206, -0.00060708434, 8.0944579e-05, 1.0118072e-05, -0.0020793044, -0.0027856709, 0.0029846474, -0.00039795299, -4.9744123e-05, 0.0017532596, 0.0023488645, -0.0025166406, 0.00033555207, 4.1944009e-05, 0.0037525907, 0.0050273942, -0.0053864938, 0.00071819918, 8.9774897e-05, -8.4587085e-05, -0.00011332241, 0.00012141687, -1.6188916e-05, -2.0236145e-06, -0.0025376126, -0.0033996723, 0.0036425061, -0.00048566748, -6.0708434e-05, 0.012475826, 0.016714025, -0.017907884, 0.0023877179, 0.00029846474, -0.010519558, -0.014093187, 0.015099843, -0.0020133124, -0.00025166406, -0.022515544, -0.030164365, 0.032318963, -0.0043091951, -0.00053864938, 0.00050752251, 0.00067993447, -0.00072850121, 9.7133495e-05, 1.2141687e-05, -0.00076833269, -0.0010293452, 0.0011028699, -0.00014704932, -1.8381165e-05, 0.0037774029, 0.0050606355, -0.0054221094, 0.00072294793, 9.0368491e-05, -0.0031850883, -0.0042671039, 0.004571897, -0.00060958627, -7.6198284e-05, -0.0068172064, -0.0091330995, 0.0097854638, -0.0013047285, -0.00016309106, 0.00015366654, 0.00020586905, -0.00022057398, 2.9409864e-05, 3.676233e-06,
+ 9.9402157e-06, -4.3792282e-05, -7.5932972e-05, -4.0946574e-05, -4.6440371e-06, -4.8869715e-05, 0.00021529878, 0.0003733141, 0.00020130825, 2.2831775e-05, 4.1206712e-05, -0.00018153892, -0.00031477668, -0.00016974216, -1.9251645e-05, 8.8196823e-05, -0.00038855698, -0.00067373255, -0.00036330779, -4.1205275e-05, -1.9880431e-06, 8.7584564e-06, 1.5186594e-05, 8.1893149e-06, 9.2880743e-07, -2.6507242e-05, 0.00011677942, 0.00020248792, 0.00010919086, 1.2384099e-05, 0.00013031924, -0.00057413009, -0.00099550427, -0.000536822, -6.0884734e-05, -0.00010988457, 0.00048410377, 0.00083940449, 0.00045264577, 5.133772e-05, -0.00023519153, 0.0010361519, 0.0017966201, 0.00096882076, 0.00010988073, 5.3014484e-06, -2.3355884e-05, -4.0497585e-05, -2.1838173e-05, -2.4768198e-06, -3.9760863e-05, 0.00017516913, 0.00030373189, 0.0001637863, 1.8576149e-05, 0.00019547886, -0.00086119513, -0.0014932564, -0.000805233, -9.1327101e-05, -0.00016482685, 0.00072615566, 0.0012591067, 0.00067896865, 7.700658e-05, -0.00035278729, 0.0015542279, 0.0026949302, 0.0014532311, 0.0001648211, 7.9521725e-06, -3.5033826e-05, -6.0746377e-05, -3.2757259e-05, -3.7152297e-06, 0.00023856518, -0.0010510148, -0.0018223913, -0.00098271778, -0.00011145689, -0.0011728732, 0.0051671708, 0.0089595384, 0.004831398, 0.00054796261, 0.00098896109, -0.004356934, -0.0075546404, -0.0040738119, -0.00046203948, 0.0021167237, -0.0093253674, -0.016169581, -0.0087193869, -0.0009889266, -4.7713035e-05, 0.00021020295, 0.00036447826, 0.00019654356, 2.2291378e-05, 7.2232234e-05, -0.00031822392, -0.00055177959, -0.00029754511, -3.374667e-05, -0.00035511993, 0.0015645045, 0.0027127491, 0.0014628399, 0.0001659109, 0.00029943544, -0.0013191828, -0.0022873772, -0.0012334597, -0.00013989529, 0.00064089691, -0.002823514, -0.0048957898, -0.0026400366, -0.000299425, -1.4446447e-05, 6.3644783e-05, 0.00011035592, 5.9509021e-05, 6.749334e-06,
+ -2.8457079e-06, 7.5885543e-06, 1.1382831e-05, -6.8296989e-05, -2.067881e-05, 1.3990535e-05, -3.7308092e-05, -5.5962139e-05, 0.00033577283, 0.00010166455, -1.1796753e-05, 3.1458007e-05, 4.718701e-05, -0.00028312206, -8.5723069e-05, -2.524919e-05, 6.7331173e-05, 0.00010099676, -0.00060598056, -0.00018347745, 5.6914157e-07, -1.5177109e-06, -2.2765663e-06, 1.3659398e-05, 4.1357621e-06, 7.5885543e-06, -2.0236145e-05, -3.0354217e-05, 0.0001821253, 5.5143495e-05, -3.7308092e-05, 9.9488247e-05, 0.00014923237, -0.00089539422, -0.00027110547, 3.1458007e-05, -8.3888019e-05, -0.00012583203, 0.00075499217, 0.00022859485, 6.7331173e-05, -0.00017954979, -0.00026932469, 0.0016159481, 0.00048927319, -1.5177109e-06, 4.047229e-06, 6.0708434e-06, -3.6425061e-05, -1.1028699e-05, 1.1382831e-05, -3.0354217e-05, -4.5531326e-05, 0.00027318796, 8.2715242e-05, -5.5962139e-05, 0.00014923237, 0.00022384855, -0.0013430913, -0.00040665821, 4.718701e-05, -0.00012583203, -0.00018874804, 0.0011324883, 0.00034289228, 0.00010099676, -0.00026932469, -0.00040398704, 0.0024239222, 0.00073390978, -2.2765663e-06, 6.0708434e-06, 9.1062652e-06, -5.4637591e-05, -1.6543048e-05, -6.8296989e-05, 0.0001821253, 0.00027318796, -0.0016391277, -0.00049629145, 0.00033577283, -0.00089539422, -0.0013430913, 0.008058548, 0.0024399492, -0.00028312206, 0.00075499217, 0.0011324883, -0.0067949295, -0.0020573537, -0.00060598056, 0.0016159481, 0.0024239222, -0.014543533, -0.0044034587, 1.3659398e-05, -3.6425061e-05, -5.4637591e-05, 0.00032782555, 9.925829e-05, -2.067881e-05, 5.5143495e-05, 8.2715242e-05, -0.00049629145, -0.00015026602, 0.00010166455, -0.00027110547, -0.00040665821, 0.0024399492, 0.00073876241, -8.5723069e-05, 0.00022859485, 0.00034289228, -0.0020573537, -0.00062292097, -0.00018347745, 0.00048927319, 0.00073390978, -0.0044034587, -0.0013332694, 4.1357621e-06, -1.1028699e-05, -1.6543048e-05, 9.925829e-05, 3.0053205e-05,
+ 1.0869023e-06, -5.343607e-06, 4.5057041e-06, 9.6437878e-06, -2.1738046e-07, -5.343607e-06, 2.6271115e-05, -2.215168e-05, -4.7412368e-05, 1.0687214e-06, 4.5057041e-06, -2.215168e-05, 1.8678192e-05, 3.9977884e-05, -9.0114082e-07, 9.6437878e-06, -4.7412368e-05, 3.9977884e-05, 8.5566699e-05, -1.9287576e-06, -2.1738046e-07, 1.0687214e-06, -9.0114082e-07, -1.9287576e-06, 4.3476092e-08, -2.8984062e-06, 1.4249619e-05, -1.2015211e-05, -2.5716767e-05, 5.7968123e-07, 1.4249619e-05, -7.0056307e-05, 5.9071146e-05, 0.00012643298, -2.8499237e-06, -1.2015211e-05, 5.9071146e-05, -4.9808511e-05, -0.00010660769, 2.4030422e-06, -2.5716767e-05, 0.00012643298, -0.00010660769, -0.00022817786, 5.1433535e-06, 5.7968123e-07, -2.8499237e-06, 2.4030422e-06, 5.1433535e-06, -1.1593625e-07, -4.3476092e-06, 2.1374428e-05, -1.8022816e-05, -3.8575151e-05, 8.6952185e-07, 2.1374428e-05, -0.00010508446, 8.860672e-05, 0.00018964947, -4.2748856e-06, -1.8022816e-05, 8.860672e-05, -7.4712767e-05, -0.00015991154, 3.6045633e-06, -3.8575151e-05, 0.00018964947, -0.00015991154, -0.0003422668, 7.7150302e-06, 8.6952185e-07, -4.2748856e-06, 3.6045633e-06, 7.7150302e-06, -1.7390437e-07, 2.6085655e-05, -0.00012824657, 0.0001081369, 0.00023145091, -5.2171311e-06, -0.00012824657, 0.00063050676, -0.00053164032, -0.0011378968, 2.5649314e-05, 0.0001081369, -0.00053164032, 0.0004482766, 0.00095946921, -2.162738e-05, 0.00023145091, -0.0011378968, 0.00095946921, 0.0020536008, -4.6290181e-05, -5.2171311e-06, 2.5649314e-05, -2.162738e-05, -4.6290181e-05, 1.0434262e-06, 7.8981568e-06, -3.8830211e-05, 3.274145e-05, 7.0078191e-05, -1.5796314e-06, -3.8830211e-05, 0.00019090344, -0.00016096887, -0.00034452987, 7.7660422e-06, 3.274145e-05, -0.00016096887, 0.00013572819, 0.00029050596, -6.54829e-06, 7.0078191e-05, -0.00034452987, 0.00029050596, 0.00062178468, -1.4015638e-05, -1.5796314e-06, 7.7660422e-06, -6.54829e-06, -1.4015638e-05, 3.1592627e-07,
+ -1.2647591e-05, 2.0236145e-05, 3.0354217e-05, -5.2613977e-05, -1.2647591e-05, 6.2180154e-05, -9.9488247e-05, -0.00014923237, 0.00025866944, 6.2180154e-05, -5.2430012e-05, 8.3888019e-05, 0.00012583203, -0.00021810885, -5.2430012e-05, -0.00011221862, 0.00017954979, 0.00026932469, -0.00046682946, -0.00011221862, 2.5295181e-06, -4.047229e-06, -6.0708434e-06, 1.0522795e-05, 2.5295181e-06, 3.3726908e-05, -5.3963053e-05, -8.0944579e-05, 0.00014030394, 3.3726908e-05, -0.00016581374, 0.00026530199, 0.00039795299, -0.00068978518, -0.00016581374, 0.00013981336, -0.00022370138, -0.00033555207, 0.0005816236, 0.00013981336, 0.00029924966, -0.00047879945, -0.00071819918, 0.0012448786, 0.00029924966, -6.7453816e-06, 1.0792611e-05, 1.6188916e-05, -2.8060787e-05, -6.7453816e-06, 5.0590362e-05, -8.0944579e-05, -0.00012141687, 0.00021045591, 5.0590362e-05, -0.00024872062, 0.00039795299, 0.00059692948, -0.0010346778, -0.00024872062, 0.00020972005, -0.00033555207, -0.00050332811, 0.00087243539, 0.00020972005, 0.00044887449, -0.00071819918, -0.0010772988, 0.0018673179, 0.00044887449, -1.0118072e-05, 1.6188916e-05, 2.4283374e-05, -4.2091181e-05, -1.0118072e-05, -0.00030354217, 0.00048566748, 0.00072850121, -0.0012627354, -0.00030354217, 0.0014923237, -0.0023877179, -0.0035815769, 0.0062080666, 0.0014923237, -0.0012583203, 0.0020133124, 0.0030199687, -0.0052346124, -0.0012583203, -0.0026932469, 0.0043091951, 0.0064637926, -0.011203907, -0.0026932469, 6.0708434e-05, -9.7133495e-05, -0.00014570024, 0.00025254709, 6.0708434e-05, -9.1905824e-05, 0.00014704932, 0.00022057398, -0.00038232823, -9.1905824e-05, 0.00045184245, -0.00072294793, -0.0010844219, 0.0018796646, 0.00045184245, -0.00038099142, 0.00060958627, 0.0009143794, -0.0015849243, -0.00038099142, -0.00081545532, 0.0013047285, 0.0019570928, -0.0033922941, -0.00081545532, 1.8381165e-05, -2.9409864e-05, -4.4114796e-05, 7.6465646e-05, 1.8381165e-05,
+ 0.0012303576, 0.001648326, -0.0017660635, 0.00023547514, 2.9434392e-05, -0.0019685722, -0.0026373216, 0.0028257017, -0.00037676022, -4.7095028e-05, -0.0029528583, -0.0039559823, 0.0042385525, -0.00056514034, -7.0642542e-05, 0.0051182876, 0.0068570361, -0.0073468244, 0.00097957658, 0.00012244707, 0.0012303576, 0.001648326, -0.0017660635, 0.00023547514, 2.9434392e-05, -0.0032809536, -0.0043955359, 0.0047095028, -0.00062793371, -7.8491713e-05, 0.0052495258, 0.0070328575, -0.0075352045, 0.0010046939, 0.00012558674, 0.0078742887, 0.010549286, -0.011302807, 0.0015070409, 0.00018838011, -0.013648767, -0.01828543, 0.019591532, -0.0026122042, -0.00032652553, -0.0032809536, -0.0043955359, 0.0047095028, -0.00062793371, -7.8491713e-05, -0.0049214304, -0.0065933039, 0.0070642542, -0.00094190056, -0.00011773757, 0.0078742887, 0.010549286, -0.011302807, 0.0015070409, 0.00018838011, 0.011811433, 0.015823929, -0.01695421, 0.0022605613, 0.00028257017, -0.020473151, -0.027428144, 0.029387297, -0.0039183063, -0.00048978829, -0.0049214304, -0.0065933039, 0.0070642542, -0.00094190056, -0.00011773757, 0.029528583, 0.039559823, -0.042385525, 0.0056514034, 0.00070642542, -0.047245732, -0.063295718, 0.06781684, -0.0090422454, -0.0011302807, -0.070868598, -0.094943576, 0.10172526, -0.013563368, -0.001695421, 0.1228389, 0.16456887, -0.17632378, 0.023509838, 0.0029387297, 0.029528583, 0.039559823, -0.042385525, 0.0056514034, 0.00070642542, 0.0089405986, 0.011977835, -0.012833395, 0.0017111193, 0.00021388992, -0.014304958, -0.019164537, 0.020533432, -0.002737791, -0.00034222387, -0.021457437, -0.028746805, 0.030800148, -0.0041066864, -0.0005133358, 0.03719289, 0.049827795, -0.053386924, 0.0071182565, 0.00088978206, 0.0089405986, 0.011977835, -0.012833395, 0.0017111193, 0.00021388992,
+ -0.00011566796, 0.00050958292, 0.00088358367, 0.00047646923, 5.4039705e-05, 0.00018506874, -0.00081533267, -0.0014137339, -0.00076235077, -8.6463528e-05, 0.00027760311, -0.001222999, -0.0021206008, -0.0011435261, -0.00012969529, -0.00048117873, 0.0021198649, 0.0036757081, 0.001982112, 0.00022480517, -0.00011566796, 0.00050958292, 0.00088358367, 0.00047646923, 5.4039705e-05, 0.0003084479, -0.0013588878, -0.0023562231, -0.0012705846, -0.00014410588, -0.00049351665, 0.0021742205, 0.003769957, 0.0020329354, 0.00023056941, -0.00074027497, 0.0032613307, 0.0056549355, 0.0030494031, 0.00034585411, 0.0012831433, -0.0056529732, -0.0098018882, -0.005285632, -0.00059948046, 0.0003084479, -0.0013588878, -0.0023562231, -0.0012705846, -0.00014410588, 0.00046267186, -0.0020383317, -0.0035343347, -0.0019058769, -0.00021615882, -0.00074027497, 0.0032613307, 0.0056549355, 0.0030494031, 0.00034585411, -0.0011104125, 0.004891996, 0.0084824032, 0.0045741046, 0.00051878117, 0.0019247149, -0.0084794598, -0.014702832, -0.007928448, -0.00089922069, 0.00046267186, -0.0020383317, -0.0035343347, -0.0019058769, -0.00021615882, -0.0027760311, 0.01222999, 0.021206008, 0.011435261, 0.0012969529, 0.0044416498, -0.019567984, -0.033929613, -0.018296418, -0.0020751247, 0.0066624747, -0.029351976, -0.050894419, -0.027444628, -0.003112687, -0.01154829, 0.050876759, 0.088216994, 0.047570688, 0.0053953241, -0.0027760311, 0.01222999, 0.021206008, 0.011435261, 0.0012969529, -0.00084052054, 0.0037029692, 0.006420708, 0.0034623431, 0.00039268852, 0.0013448329, -0.0059247507, -0.010273133, -0.0055397489, -0.00062830164, 0.0020172493, -0.0088871261, -0.015409699, -0.0083096233, -0.00094245245, -0.0034965654, 0.015404352, 0.026710145, 0.014403347, 0.0016335843, -0.00084052054, 0.0037029692, 0.006420708, 0.0034623431, 0.00039268852,
+ 3.3113692e-05, -8.8303177e-05, -0.00013245477, 0.0007947286, 0.00024062616, -5.2981906e-05, 0.00014128508, 0.00021192763, -0.0012715658, -0.00038500185, -7.947286e-05, 0.00021192763, 0.00031789144, -0.0019073486, -0.00057750278, 0.00013775296, -0.00036734122, -0.00055101183, 0.003306071, 0.0010010048, 3.3113692e-05, -8.8303177e-05, -0.00013245477, 0.0007947286, 0.00024062616, -8.8303177e-05, 0.00023547514, 0.00035321271, -0.0021192763, -0.00064166976, 0.00014128508, -0.00037676022, -0.00056514034, 0.003390842, 0.0010266716, 0.00021192763, -0.00056514034, -0.0008477105, 0.005086263, 0.0015400074, -0.00036734122, 0.00097957658, 0.0014693649, -0.0088161892, -0.0026693462, -8.8303177e-05, 0.00023547514, 0.00035321271, -0.0021192763, -0.00064166976, -0.00013245477, 0.00035321271, 0.00052981906, -0.0031789144, -0.00096250463, 0.00021192763, -0.00056514034, -0.0008477105, 0.005086263, 0.0015400074, 0.00031789144, -0.0008477105, -0.0012715658, 0.0076293945, 0.0023100111, -0.00055101183, 0.0014693649, 0.0022040473, -0.013224284, -0.0040040193, -0.00013245477, 0.00035321271, 0.00052981906, -0.0031789144, -0.00096250463, 0.0007947286, -0.0021192763, -0.0031789144, 0.019073486, 0.0057750278, -0.0012715658, 0.003390842, 0.005086263, -0.030517578, -0.0092400445, -0.0019073486, 0.005086263, 0.0076293945, -0.045776367, -0.013860067, 0.003306071, -0.0088161892, -0.013224284, 0.079345703, 0.024024116, 0.0007947286, -0.0021192763, -0.0031789144, 0.019073486, 0.0057750278, 0.00024062616, -0.00064166976, -0.00096250463, 0.0057750278, 0.0017485501, -0.00038500185, 0.0010266716, 0.0015400074, -0.0092400445, -0.0027976801, -0.00057750278, 0.0015400074, 0.0023100111, -0.013860067, -0.0041965202, 0.0010010048, -0.0026693462, -0.0040040193, 0.024024116, 0.0072739684, 0.00024062616, -0.00064166976, -0.00096250463, 0.0057750278, 0.0017485501,
+ -1.2647591e-05, 6.2180154e-05, -5.2430012e-05, -0.00011221862, 2.5295181e-06, 2.0236145e-05, -9.9488247e-05, 8.3888019e-05, 0.00017954979, -4.047229e-06, 3.0354217e-05, -0.00014923237, 0.00012583203, 0.00026932469, -6.0708434e-06, -5.2613977e-05, 0.00025866944, -0.00021810885, -0.00046682946, 1.0522795e-05, -1.2647591e-05, 6.2180154e-05, -5.2430012e-05, -0.00011221862, 2.5295181e-06, 3.3726908e-05, -0.00016581374, 0.00013981336, 0.00029924966, -6.7453816e-06, -5.3963053e-05, 0.00026530199, -0.00022370138, -0.00047879945, 1.0792611e-05, -8.0944579e-05, 0.00039795299, -0.00033555207, -0.00071819918, 1.6188916e-05, 0.00014030394, -0.00068978518, 0.0005816236, 0.0012448786, -2.8060787e-05, 3.3726908e-05, -0.00016581374, 0.00013981336, 0.00029924966, -6.7453816e-06, 5.0590362e-05, -0.00024872062, 0.00020972005, 0.00044887449, -1.0118072e-05, -8.0944579e-05, 0.00039795299, -0.00033555207, -0.00071819918, 1.6188916e-05, -0.00012141687, 0.00059692948, -0.00050332811, -0.0010772988, 2.4283374e-05, 0.00021045591, -0.0010346778, 0.00087243539, 0.0018673179, -4.2091181e-05, 5.0590362e-05, -0.00024872062, 0.00020972005, 0.00044887449, -1.0118072e-05, -0.00030354217, 0.0014923237, -0.0012583203, -0.0026932469, 6.0708434e-05, 0.00048566748, -0.0023877179, 0.0020133124, 0.0043091951, -9.7133495e-05, 0.00072850121, -0.0035815769, 0.0030199687, 0.0064637926, -0.00014570024, -0.0012627354, 0.0062080666, -0.0052346124, -0.011203907, 0.00025254709, -0.00030354217, 0.0014923237, -0.0012583203, -0.0026932469, 6.0708434e-05, -9.1905824e-05, 0.00045184245, -0.00038099142, -0.00081545532, 1.8381165e-05, 0.00014704932, -0.00072294793, 0.00060958627, 0.0013047285, -2.9409864e-05, 0.00022057398, -0.0010844219, 0.0009143794, 0.0019570928, -4.4114796e-05, -0.00038232823, 0.0018796646, -0.0015849243, -0.0033922941, 7.6465646e-05, -9.1905824e-05, 0.00045184245, -0.00038099142, -0.00081545532, 1.8381165e-05,
+ 0.00014717196, -0.00023547514, -0.00035321271, 0.00061223536, 0.00014717196, -0.00023547514, 0.00037676022, 0.00056514034, -0.00097957658, -0.00023547514, -0.00035321271, 0.00056514034, 0.0008477105, -0.0014693649, -0.00035321271, 0.00061223536, -0.00097957658, -0.0014693649, 0.0025468991, 0.00061223536, 0.00014717196, -0.00023547514, -0.00035321271, 0.00061223536, 0.00014717196, -0.00039245857, 0.00062793371, 0.00094190056, -0.0016326276, -0.00039245857, 0.00062793371, -0.0010046939, -0.0015070409, 0.0026122042, 0.00062793371, 0.00094190056, -0.0015070409, -0.0022605613, 0.0039183063, 0.00094190056, -0.0016326276, 0.0026122042, 0.0039183063, -0.006791731, -0.0016326276, -0.00039245857, 0.00062793371, 0.00094190056, -0.0016326276, -0.00039245857, -0.00058868785, 0.00094190056, 0.0014128508, -0.0024489415, -0.00058868785, 0.00094190056, -0.0015070409, -0.0022605613, 0.0039183063, 0.00094190056, 0.0014128508, -0.0022605613, -0.003390842, 0.0058774595, 0.0014128508, -0.0024489415, 0.0039183063, 0.0058774595, -0.010187596, -0.0024489415, -0.00058868785, 0.00094190056, 0.0014128508, -0.0024489415, -0.00058868785, 0.0035321271, -0.0056514034, -0.008477105, 0.014693649, 0.0035321271, -0.0056514034, 0.0090422454, 0.013563368, -0.023509838, -0.0056514034, -0.008477105, 0.013563368, 0.020345052, -0.035264757, -0.008477105, 0.014693649, -0.023509838, -0.035264757, 0.061125579, 0.014693649, 0.0035321271, -0.0056514034, -0.008477105, 0.014693649, 0.0035321271, 0.0010694496, -0.0017111193, -0.002566679, 0.0044489103, 0.0010694496, -0.0017111193, 0.002737791, 0.0041066864, -0.0071182565, -0.0017111193, -0.002566679, 0.0041066864, 0.0061600297, -0.010677385, -0.002566679, 0.0044489103, -0.0071182565, -0.010677385, 0.018507467, 0.0044489103, 0.0010694496, -0.0017111193, -0.002566679, 0.0044489103, 0.0010694496,
+ -0.0039286002, -0.0052631964, 0.005639139, -0.0007518852, -9.398565e-05, -0.0052631964, -0.0070511722, 0.0075548274, -0.0010073103, -0.00012591379, 0.005639139, 0.0075548274, -0.0080944579, 0.0010792611, 0.00013490763, -0.0007518852, -0.0010073103, 0.0010792611, -0.00014390147, -1.7987684e-05, -9.398565e-05, -0.00012591379, 0.00013490763, -1.7987684e-05, -2.2484605e-06, 0.019314427, 0.025875788, -0.027724058, 0.0036965411, 0.00046206763, 0.025875788, 0.034666127, -0.037142279, 0.0049523038, 0.00061903798, -0.027724058, -0.037142279, 0.039795299, -0.0053060398, -0.00066325498, 0.0036965411, 0.0049523038, -0.0053060398, 0.00070747198, 8.8433997e-05, 0.00046206763, 0.00061903798, -0.00066325498, 8.8433997e-05, 1.105425e-05, -0.016285834, -0.021818342, 0.023376795, -0.0031169059, -0.00038961324, -0.021818342, -0.029230314, 0.031318194, -0.0041757591, -0.00052196989, 0.023376795, 0.031318194, -0.033555207, 0.0044740277, 0.00055925346, -0.0031169059, -0.0041757591, 0.0044740277, -0.00059653702, -7.4567128e-05, -0.00038961324, -0.00052196989, 0.00055925346, -7.4567128e-05, -9.320891e-06, -0.034857398, -0.046698906, 0.050034543, -0.0066712724, -0.00083390904, -0.046698906, -0.062563128, 0.067031923, -0.0089375898, -0.0011171987, 0.050034543, 0.067031923, -0.071819918, 0.009575989, 0.0011969986, -0.0066712724, -0.0089375898, 0.009575989, -0.0012767985, -0.00015959982, -0.00083390904, -0.0011171987, 0.0011969986, -0.00015959982, -1.9949977e-05, 0.00078572004, 0.0010526393, -0.0011278278, 0.00015037704, 1.879713e-05, 0.0010526393, 0.0014102344, -0.0015109655, 0.00020146206, 2.5182758e-05, -0.0011278278, -0.0015109655, 0.0016188916, -0.00021585221, -2.6981526e-05, 0.00015037704, 0.00020146206, -0.00021585221, 2.8780295e-05, 3.5975369e-06, 1.879713e-05, 2.5182758e-05, -2.6981526e-05, 3.5975369e-06, 4.4969211e-07,
+ 0.00036933424, -0.0016271266, -0.0028213317, -0.0015213927, -0.00017255178, 0.00049480185, -0.0021798825, -0.0037797746, -0.0020382295, -0.00023116985, -0.00053014484, 0.0023355884, 0.0040497585, 0.0021838173, 0.00024768198, 7.0685978e-05, -0.00031141178, -0.0005399678, -0.00029117564, -3.3024264e-05, 8.8357473e-06, -3.8926473e-05, -6.7495975e-05, -3.6396955e-05, -4.128033e-06, -0.0018157814, 0.0079995459, 0.013870693, 0.0074797198, 0.0008483273, -0.0024326258, 0.010717095, 0.018582746, 0.010020677, 0.001136515, 0.0026063848, -0.011482602, -0.019910085, -0.01073644, -0.0012176947, -0.00034751797, 0.0015310136, 0.002654678, 0.0014315253, 0.00016235929, -4.3439747e-05, 0.0001913767, 0.00033183476, 0.00017894067, 2.0294911e-05, 0.0015310583, -0.0067451792, -0.011695703, -0.0063068644, -0.00071530556, 0.0020511786, -0.0090366038, -0.015668884, -0.0084493876, -0.0009583041, -0.0021976913, 0.0096820755, 0.01678809, 0.0090529153, 0.0010267544, 0.00029302551, -0.0012909434, -0.002238412, -0.0012070554, -0.00013690059, 3.6628189e-05, -0.00016136792, -0.0002798015, -0.00015088192, -1.7112573e-05, 0.0032770019, -0.01443705, -0.025032907, -0.013498903, -0.0015310049, 0.0043902418, -0.019341503, -0.033536909, -0.018084654, -0.002051107, -0.0047038305, 0.020723039, 0.035932403, 0.019376415, 0.0021976147, 0.00062717741, -0.0027630718, -0.004790987, -0.002583522, -0.00029301529, 7.8397176e-05, -0.00034538398, -0.00059887338, -0.00032294025, -3.6626911e-05, -7.3866847e-05, 0.00032542531, 0.00056426635, 0.00030427854, 3.4510356e-05, -9.8960369e-05, 0.0004359765, 0.00075595492, 0.0004076459, 4.623397e-05, 0.00010602897, -0.00046711768, -0.0008099517, -0.00043676346, -4.9536396e-05, -1.4137196e-05, 6.2282357e-05, 0.00010799356, 5.8235128e-05, 6.6048528e-06, -1.7671495e-06, 7.7852946e-06, 1.3499195e-05, 7.279391e-06, 8.256066e-07,
+ -0.00010573386, 0.00028195695, 0.00042293543, -0.0025376126, -0.00076833269, -0.00014165301, 0.00037774137, 0.00056661206, -0.0033996723, -0.0010293452, 0.00015177109, -0.0004047229, -0.00060708434, 0.0036425061, 0.0011028699, -2.0236145e-05, 5.3963053e-05, 8.0944579e-05, -0.00048566748, -0.00014704932, -2.5295181e-06, 6.7453816e-06, 1.0118072e-05, -6.0708434e-05, -1.8381165e-05, 0.00051982609, -0.0013862029, -0.0020793044, 0.012475826, 0.0037774029, 0.00069641773, -0.0018571139, -0.0027856709, 0.016714025, 0.0050606355, -0.00074616185, 0.0019897649, 0.0029846474, -0.017907884, -0.0054221094, 9.9488247e-05, -0.00026530199, -0.00039795299, 0.0023877179, 0.00072294793, 1.2436031e-05, -3.3162749e-05, -4.9744123e-05, 0.00029846474, 9.0368491e-05, -0.0004383149, 0.0011688397, 0.0017532596, -0.010519558, -0.0031850883, -0.00058721613, 0.0015659097, 0.0023488645, -0.014093187, -0.0042671039, 0.00062916014, -0.0016777604, -0.0025166406, 0.015099843, 0.004571897, -8.3888019e-05, 0.00022370138, 0.00033555207, -0.0020133124, -0.00060958627, -1.0486002e-05, 2.7962673e-05, 4.1944009e-05, -0.00025166406, -7.6198284e-05, -0.00093814767, 0.0025017271, 0.0037525907, -0.022515544, -0.0068172064, -0.0012568486, 0.0033515962, 0.0050273942, -0.030164365, -0.0091330995, 0.0013466235, -0.0035909959, -0.0053864938, 0.032318963, 0.0097854638, -0.00017954979, 0.00047879945, 0.00071819918, -0.0043091951, -0.0013047285, -2.2443724e-05, 5.9849931e-05, 8.9774897e-05, -0.00053864938, -0.00016309106, 2.1146771e-05, -5.639139e-05, -8.4587085e-05, 0.00050752251, 0.00015366654, 2.8330603e-05, -7.5548274e-05, -0.00011332241, 0.00067993447, 0.00020586905, -3.0354217e-05, 8.0944579e-05, 0.00012141687, -0.00072850121, -0.00022057398, 4.047229e-06, -1.0792611e-05, -1.6188916e-05, 9.7133495e-05, 2.9409864e-05, 5.0590362e-07, -1.3490763e-06, -2.0236145e-06, 1.2141687e-05, 3.676233e-06,
+ 4.0384459e-05, -0.00019854469, 0.00016741194, 0.00035832029, -8.0768918e-06, 5.4103582e-05, -0.00026599288, 0.00022428394, 0.00048004632, -1.0820716e-05, -5.7968123e-05, 0.00028499237, -0.00024030422, -0.00051433535, 1.1593625e-05, 7.7290831e-06, -3.7998983e-05, 3.2040563e-05, 6.8578046e-05, -1.5458166e-06, 9.6613539e-07, -4.7498729e-06, 4.0050703e-06, 8.5722558e-06, -1.9322708e-07, -0.00019854469, 0.00097611788, -0.00082305797, -0.0017616329, 3.9708937e-05, -0.00026599288, 0.0013077177, -0.0011026614, -0.0023600823, 5.3198576e-05, 0.00028499237, -0.0014011261, 0.0011814229, 0.0025286596, -5.6998475e-05, -3.7998983e-05, 0.00018681682, -0.00015752306, -0.00033715461, 7.5997966e-06, -4.7498729e-06, 2.3352102e-05, -1.9690382e-05, -4.2144327e-05, 9.4997458e-07, 0.00016741194, -0.00082305797, 0.00069399859, 0.0014854005, -3.3482388e-05, 0.00022428394, -0.0011026614, 0.00092975887, 0.0019900102, -4.4856788e-05, -0.00024030422, 0.0011814229, -0.00099617022, -0.0021321538, 4.8060844e-05, 3.2040563e-05, -0.00015752306, 0.0001328227, 0.00028428717, -6.4081125e-06, 4.0050703e-06, -1.9690382e-05, 1.6602837e-05, 3.5535897e-05, -8.0101407e-07, 0.00035832029, -0.0017616329, 0.0014854005, 0.0031792782, -7.1664058e-05, 0.00048004632, -0.0023600823, 0.0019900102, 0.0042593201, -9.6009265e-05, -0.00051433535, 0.0025286596, -0.0021321538, -0.0045635573, 0.00010286707, 6.8578046e-05, -0.00033715461, 0.00028428717, 0.0006084743, -1.3715609e-05, 8.5722558e-06, -4.2144327e-05, 3.5535897e-05, 7.6059288e-05, -1.7144512e-06, -8.0768918e-06, 3.9708937e-05, -3.3482388e-05, -7.1664058e-05, 1.6153784e-06, -1.0820716e-05, 5.3198576e-05, -4.4856788e-05, -9.6009265e-05, 2.1641433e-06, 1.1593625e-05, -5.6998475e-05, 4.8060844e-05, 0.00010286707, -2.3187249e-06, -1.5458166e-06, 7.5997966e-06, -6.4081125e-06, -1.3715609e-05, 3.0916332e-07, -1.9322708e-07, 9.4997458e-07, -8.0101407e-07, -1.7144512e-06, 3.8645415e-08,
+ -0.00046992825, 0.0007518852, 0.0011278278, -0.0019549015, -0.00046992825, -0.00062956895, 0.0010073103, 0.0015109655, -0.0026190068, -0.00062956895, 0.00067453816, -0.0010792611, -0.0016188916, 0.0028060787, 0.00067453816, -8.9938421e-05, 0.00014390147, 0.00021585221, -0.00037414383, -8.9938421e-05, -1.1242303e-05, 1.7987684e-05, 2.6981526e-05, -4.6767979e-05, -1.1242303e-05, 0.0023103382, -0.0036965411, -0.0055448116, 0.0096110068, 0.0023103382, 0.0030951899, -0.0049523038, -0.0074284557, 0.01287599, 0.0030951899, -0.0033162749, 0.0053060398, 0.0079590597, -0.013795704, -0.0033162749, 0.00044216998, -0.00070747198, -0.001061208, 0.0018394271, 0.00044216998, 5.5271248e-05, -8.8433997e-05, -0.000132651, 0.00022992839, 5.5271248e-05, -0.0019480662, 0.0031169059, 0.0046753589, -0.0081039554, -0.0019480662, -0.0026098495, 0.0041757591, 0.0062636387, -0.010856974, -0.0026098495, 0.0027962673, -0.0044740277, -0.0067110415, 0.011632472, 0.0027962673, -0.00037283564, 0.00059653702, 0.00089480553, -0.0015509963, -0.00037283564, -4.6604455e-05, 7.4567128e-05, 0.00011185069, -0.00019387453, -4.6604455e-05, -0.0041695452, 0.0066712724, 0.010006909, -0.017345308, -0.0041695452, -0.0055859936, 0.0089375898, 0.013406385, -0.023237733, -0.0055859936, 0.0059849931, -0.009575989, -0.014363984, 0.024897571, 0.0059849931, -0.00079799909, 0.0012767985, 0.0019151978, -0.0033196762, -0.00079799909, -9.9749886e-05, 0.00015959982, 0.00023939973, -0.00041495952, -9.9749886e-05, 9.398565e-05, -0.00015037704, -0.00022556556, 0.00039098031, 9.398565e-05, 0.00012591379, -0.00020146206, -0.0003021931, 0.00052380137, 0.00012591379, -0.00013490763, 0.00021585221, 0.00032377832, -0.00056121575, -0.00013490763, 1.7987684e-05, -2.8780295e-05, -4.3170442e-05, 7.4828767e-05, 1.7987684e-05, 2.2484605e-06, -3.5975369e-06, -5.3963053e-06, 9.3535958e-06, 2.2484605e-06,
+ 0.00036933424, 0.00049480185, -0.00053014484, 7.0685978e-05, 8.8357473e-06, -0.0016271266, -0.0021798825, 0.0023355884, -0.00031141178, -3.8926473e-05, -0.0028213317, -0.0037797746, 0.0040497585, -0.0005399678, -6.7495975e-05, -0.0015213927, -0.0020382295, 0.0021838173, -0.00029117564, -3.6396955e-05, -0.00017255178, -0.00023116985, 0.00024768198, -3.3024264e-05, -4.128033e-06, -0.0018157814, -0.0024326258, 0.0026063848, -0.00034751797, -4.3439747e-05, 0.0079995459, 0.010717095, -0.011482602, 0.0015310136, 0.0001913767, 0.013870693, 0.018582746, -0.019910085, 0.002654678, 0.00033183476, 0.0074797198, 0.010020677, -0.01073644, 0.0014315253, 0.00017894067, 0.0008483273, 0.001136515, -0.0012176947, 0.00016235929, 2.0294911e-05, 0.0015310583, 0.0020511786, -0.0021976913, 0.00029302551, 3.6628189e-05, -0.0067451792, -0.0090366038, 0.0096820755, -0.0012909434, -0.00016136792, -0.011695703, -0.015668884, 0.01678809, -0.002238412, -0.0002798015, -0.0063068644, -0.0084493876, 0.0090529153, -0.0012070554, -0.00015088192, -0.00071530556, -0.0009583041, 0.0010267544, -0.00013690059, -1.7112573e-05, 0.0032770019, 0.0043902418, -0.0047038305, 0.00062717741, 7.8397176e-05, -0.01443705, -0.019341503, 0.020723039, -0.0027630718, -0.00034538398, -0.025032907, -0.033536909, 0.035932403, -0.004790987, -0.00059887338, -0.013498903, -0.018084654, 0.019376415, -0.002583522, -0.00032294025, -0.0015310049, -0.002051107, 0.0021976147, -0.00029301529, -3.6626911e-05, -7.3866847e-05, -9.8960369e-05, 0.00010602897, -1.4137196e-05, -1.7671495e-06, 0.00032542531, 0.0004359765, -0.00046711768, 6.2282357e-05, 7.7852946e-06, 0.00056426635, 0.00075595492, -0.0008099517, 0.00010799356, 1.3499195e-05, 0.00030427854, 0.0004076459, -0.00043676346, 5.8235128e-05, 7.279391e-06, 3.4510356e-05, 4.623397e-05, -4.9536396e-05, 6.6048528e-06, 8.256066e-07,
+ -3.4721726e-05, 0.00015296887, 0.00026523809, 0.00014302866, 1.622188e-05, 0.00015296887, -0.00067391456, -0.0011685241, -0.00063012228, -7.1466572e-05, 0.00026523809, -0.0011685241, -0.0020261448, -0.0010925911, -0.00012391839, 0.00014302866, -0.00063012228, -0.0010925911, -0.00058917571, -6.6822534e-05, 1.622188e-05, -7.1466572e-05, -0.00012391839, -6.6822534e-05, -7.5788106e-06, 0.00017070463, -0.00075205061, -0.0013040069, -0.0007031809, -7.975266e-05, -0.00075205061, 0.0033132091, 0.0057448892, 0.0030979103, 0.00035135565, -0.0013040069, 0.0057448892, 0.0099612646, 0.0053715751, 0.00060922787, -0.0007031809, 0.0030979103, 0.0053715751, 0.002896602, 0.00032852388, -7.975266e-05, 0.00035135565, 0.00060922787, 0.00032852388, 3.7260189e-05, -0.00014393734, 0.00063412552, 0.0010995324, 0.0005929188, 6.7247065e-05, 0.00063412552, -0.0027936822, -0.0048440634, -0.0026121433, -0.00029626142, 0.0010995324, -0.0048440634, -0.0083992911, -0.0045292867, -0.00051369806, 0.0005929188, -0.0026121433, -0.0045292867, -0.0024424011, -0.00027700978, 6.7247065e-05, -0.00029626142, -0.00051369806, -0.00027700978, -3.1417615e-05, -0.0003080764, 0.0013572511, 0.0023533852, 0.0012690543, 0.00014393231, 0.0013572511, -0.0059794601, -0.010367995, -0.0055909032, -0.0006341034, 0.0023533852, -0.010367995, -0.01797743, -0.0096942628, -0.0010994941, 0.0012690543, -0.0055909032, -0.0096942628, -0.0052275954, -0.00059289812, 0.00014393231, -0.0006341034, -0.0010994941, -0.00059289812, -6.724472e-05, 6.9443451e-06, -3.0593775e-05, -5.3047618e-05, -2.8605732e-05, -3.2443759e-06, -3.0593775e-05, 0.00013478291, 0.00023370481, 0.00012602446, 1.4293314e-05, -5.3047618e-05, 0.00023370481, 0.00040522896, 0.00021851822, 2.4783678e-05, -2.8605732e-05, 0.00012602446, 0.00021851822, 0.00011783514, 1.3364507e-05, -3.2443759e-06, 1.4293314e-05, 2.4783678e-05, 1.3364507e-05, 1.5157621e-06,
+ 9.9402157e-06, -2.6507242e-05, -3.9760863e-05, 0.00023856518, 7.2232234e-05, -4.3792282e-05, 0.00011677942, 0.00017516913, -0.0010510148, -0.00031822392, -7.5932972e-05, 0.00020248792, 0.00030373189, -0.0018223913, -0.00055177959, -4.0946574e-05, 0.00010919086, 0.0001637863, -0.00098271778, -0.00029754511, -4.6440371e-06, 1.2384099e-05, 1.8576149e-05, -0.00011145689, -3.374667e-05, -4.8869715e-05, 0.00013031924, 0.00019547886, -0.0011728732, -0.00035511993, 0.00021529878, -0.00057413009, -0.00086119513, 0.0051671708, 0.0015645045, 0.0003733141, -0.00099550427, -0.0014932564, 0.0089595384, 0.0027127491, 0.00020130825, -0.000536822, -0.000805233, 0.004831398, 0.0014628399, 2.2831775e-05, -6.0884734e-05, -9.1327101e-05, 0.00054796261, 0.0001659109, 4.1206712e-05, -0.00010988457, -0.00016482685, 0.00098896109, 0.00029943544, -0.00018153892, 0.00048410377, 0.00072615566, -0.004356934, -0.0013191828, -0.00031477668, 0.00083940449, 0.0012591067, -0.0075546404, -0.0022873772, -0.00016974216, 0.00045264577, 0.00067896865, -0.0040738119, -0.0012334597, -1.9251645e-05, 5.133772e-05, 7.700658e-05, -0.00046203948, -0.00013989529, 8.8196823e-05, -0.00023519153, -0.00035278729, 0.0021167237, 0.00064089691, -0.00038855698, 0.0010361519, 0.0015542279, -0.0093253674, -0.002823514, -0.00067373255, 0.0017966201, 0.0026949302, -0.016169581, -0.0048957898, -0.00036330779, 0.00096882076, 0.0014532311, -0.0087193869, -0.0026400366, -4.1205275e-05, 0.00010988073, 0.0001648211, -0.0009889266, -0.000299425, -1.9880431e-06, 5.3014484e-06, 7.9521725e-06, -4.7713035e-05, -1.4446447e-05, 8.7584564e-06, -2.3355884e-05, -3.5033826e-05, 0.00021020295, 6.3644783e-05, 1.5186594e-05, -4.0497585e-05, -6.0746377e-05, 0.00036447826, 0.00011035592, 8.1893149e-06, -2.1838173e-05, -3.2757259e-05, 0.00019654356, 5.9509021e-05, 9.2880743e-07, -2.4768198e-06, -3.7152297e-06, 2.2291378e-05, 6.749334e-06,
+ -3.7966102e-06, 1.8665516e-05, -1.5738675e-05, -3.3686286e-05, 7.5932203e-07, 1.6726219e-05, -8.2232174e-05, 6.933778e-05, 0.00014840718, -3.3452438e-06, 2.9002177e-05, -0.00014258525, 0.00012022721, 0.0002573284, -5.8004353e-06, 1.5639317e-05, -7.6888567e-05, 6.4832076e-05, 0.00013876339, -3.1278633e-06, 1.7737642e-06, -8.7204697e-06, 7.3530588e-06, 1.5738126e-05, -3.5475284e-07, 1.8665516e-05, -9.1766465e-05, 7.7377049e-05, 0.00016561403, -3.7331032e-06, -8.2232174e-05, 0.00040428327, -0.00034088974, -0.00072962366, 1.6446435e-05, -0.00014258525, 0.00070100092, -0.00059108066, -0.00126512, 2.8517049e-05, -7.6888567e-05, 0.00037801216, -0.00031873806, -0.00068221129, 1.5377713e-05, -8.7204697e-06, 4.2873e-05, -3.6150311e-05, -7.737435e-05, 1.7440939e-06, -1.5738675e-05, 7.7377049e-05, -6.5243961e-05, -0.00013964497, 3.147735e-06, 6.933778e-05, -0.00034088974, 0.00028743662, 0.00061521521, -1.3867556e-05, 0.00012022721, -0.00059108066, 0.00049839641, 0.0010667432, -2.4045441e-05, 6.4832076e-05, -0.00031873806, 0.00026875842, 0.00057523733, -1.2966415e-05, 7.3530588e-06, -3.6150311e-05, 3.0481771e-05, 6.5241685e-05, -1.4706118e-06, -3.3686286e-05, 0.00016561403, -0.00013964497, -0.00029888923, 6.7372573e-06, 0.00014840718, -0.00072962366, 0.00061521521, 0.0013167764, -2.9681436e-05, 0.0002573284, -0.00126512, 0.0010667432, 0.0022832047, -5.1465681e-05, 0.00013876339, -0.00068221129, 0.00057523733, 0.0012312097, -2.7752678e-05, 1.5738126e-05, -7.737435e-05, 6.5241685e-05, 0.0001396401, -3.1476252e-06, 7.5932203e-07, -3.7331032e-06, 3.147735e-06, 6.7372573e-06, -1.5186441e-07, -3.3452438e-06, 1.6446435e-05, -1.3867556e-05, -2.9681436e-05, 6.6904876e-07, -5.8004353e-06, 2.8517049e-05, -2.4045441e-05, -5.1465681e-05, 1.1600871e-06, -3.1278633e-06, 1.5377713e-05, -1.2966415e-05, -2.7752678e-05, 6.2557266e-07, -3.5475284e-07, 1.7440939e-06, -1.4706118e-06, -3.1476252e-06, 7.0950567e-08,
+ 4.4178736e-05, -7.0685978e-05, -0.00010602897, 0.00018378354, 4.4178736e-05, -0.00019463237, 0.00031141178, 0.00046711768, -0.00080967064, -0.00019463237, -0.00033747987, 0.0005399678, 0.0008099517, -0.0014039163, -0.00033747987, -0.00018198477, 0.00029117564, 0.00043676346, -0.00075705666, -0.00018198477, -2.0640165e-05, 3.3024264e-05, 4.9536396e-05, -8.5863087e-05, -2.0640165e-05, -0.00021719873, 0.00034751797, 0.00052127696, -0.00090354673, -0.00021719873, 0.00095688348, -0.0015310136, -0.0022965204, 0.0039806353, 0.00095688348, 0.0016591738, -0.002654678, -0.0039820171, 0.0069021629, 0.0016591738, 0.00089470333, -0.0014315253, -0.002147288, 0.0037219658, 0.00089470333, 0.00010147456, -0.00016235929, -0.00024353894, 0.00042213416, 0.00010147456, 0.00018314094, -0.00029302551, -0.00043953826, 0.00076186632, 0.00018314094, -0.00080683962, 0.0012909434, 0.0019364151, -0.0033564528, -0.00080683962, -0.0013990075, 0.002238412, 0.0033576179, -0.0058198711, -0.0013990075, -0.00075440961, 0.0012070554, 0.0018105831, -0.003138344, -0.00075440961, -8.5562866e-05, 0.00013690059, 0.00020535088, -0.00035594152, -8.5562866e-05, 0.00039198588, -0.00062717741, -0.00094076611, 0.0016306613, 0.00039198588, -0.0017269199, 0.0027630718, 0.0041446077, -0.0071839868, -0.0017269199, -0.0029943669, 0.004790987, 0.0071864805, -0.012456566, -0.0029943669, -0.0016147013, 0.002583522, 0.0038752831, -0.0067171573, -0.0016147013, -0.00018313456, 0.00029301529, 0.00043952293, -0.00076183975, -0.00018313456, -8.8357473e-06, 1.4137196e-05, 2.1205793e-05, -3.6756709e-05, -8.8357473e-06, 3.8926473e-05, -6.2282357e-05, -9.3423535e-05, 0.00016193413, 3.8926473e-05, 6.7495975e-05, -0.00010799356, -0.00016199034, 0.00028078325, 6.7495975e-05, 3.6396955e-05, -5.8235128e-05, -8.7352692e-05, 0.00015141133, 3.6396955e-05, 4.128033e-06, -6.6048528e-06, -9.9072792e-06, 1.7172617e-05, 4.128033e-06,
+ -0.00010573386, -0.00014165301, 0.00015177109, -2.0236145e-05, -2.5295181e-06, 0.00028195695, 0.00037774137, -0.0004047229, 5.3963053e-05, 6.7453816e-06, 0.00042293543, 0.00056661206, -0.00060708434, 8.0944579e-05, 1.0118072e-05, -0.0025376126, -0.0033996723, 0.0036425061, -0.00048566748, -6.0708434e-05, -0.00076833269, -0.0010293452, 0.0011028699, -0.00014704932, -1.8381165e-05, 0.00051982609, 0.00069641773, -0.00074616185, 9.9488247e-05, 1.2436031e-05, -0.0013862029, -0.0018571139, 0.0019897649, -0.00026530199, -3.3162749e-05, -0.0020793044, -0.0027856709, 0.0029846474, -0.00039795299, -4.9744123e-05, 0.012475826, 0.016714025, -0.017907884, 0.0023877179, 0.00029846474, 0.0037774029, 0.0050606355, -0.0054221094, 0.00072294793, 9.0368491e-05, -0.0004383149, -0.00058721613, 0.00062916014, -8.3888019e-05, -1.0486002e-05, 0.0011688397, 0.0015659097, -0.0016777604, 0.00022370138, 2.7962673e-05, 0.0017532596, 0.0023488645, -0.0025166406, 0.00033555207, 4.1944009e-05, -0.010519558, -0.014093187, 0.015099843, -0.0020133124, -0.00025166406, -0.0031850883, -0.0042671039, 0.004571897, -0.00060958627, -7.6198284e-05, -0.00093814767, -0.0012568486, 0.0013466235, -0.00017954979, -2.2443724e-05, 0.0025017271, 0.0033515962, -0.0035909959, 0.00047879945, 5.9849931e-05, 0.0037525907, 0.0050273942, -0.0053864938, 0.00071819918, 8.9774897e-05, -0.022515544, -0.030164365, 0.032318963, -0.0043091951, -0.00053864938, -0.0068172064, -0.0091330995, 0.0097854638, -0.0013047285, -0.00016309106, 2.1146771e-05, 2.8330603e-05, -3.0354217e-05, 4.047229e-06, 5.0590362e-07, -5.639139e-05, -7.5548274e-05, 8.0944579e-05, -1.0792611e-05, -1.3490763e-06, -8.4587085e-05, -0.00011332241, 0.00012141687, -1.6188916e-05, -2.0236145e-06, 0.00050752251, 0.00067993447, -0.00072850121, 9.7133495e-05, 1.2141687e-05, 0.00015366654, 0.00020586905, -0.00022057398, 2.9409864e-05, 3.676233e-06,
+ 9.9402157e-06, -4.3792282e-05, -7.5932972e-05, -4.0946574e-05, -4.6440371e-06, -2.6507242e-05, 0.00011677942, 0.00020248792, 0.00010919086, 1.2384099e-05, -3.9760863e-05, 0.00017516913, 0.00030373189, 0.0001637863, 1.8576149e-05, 0.00023856518, -0.0010510148, -0.0018223913, -0.00098271778, -0.00011145689, 7.2232234e-05, -0.00031822392, -0.00055177959, -0.00029754511, -3.374667e-05, -4.8869715e-05, 0.00021529878, 0.0003733141, 0.00020130825, 2.2831775e-05, 0.00013031924, -0.00057413009, -0.00099550427, -0.000536822, -6.0884734e-05, 0.00019547886, -0.00086119513, -0.0014932564, -0.000805233, -9.1327101e-05, -0.0011728732, 0.0051671708, 0.0089595384, 0.004831398, 0.00054796261, -0.00035511993, 0.0015645045, 0.0027127491, 0.0014628399, 0.0001659109, 4.1206712e-05, -0.00018153892, -0.00031477668, -0.00016974216, -1.9251645e-05, -0.00010988457, 0.00048410377, 0.00083940449, 0.00045264577, 5.133772e-05, -0.00016482685, 0.00072615566, 0.0012591067, 0.00067896865, 7.700658e-05, 0.00098896109, -0.004356934, -0.0075546404, -0.0040738119, -0.00046203948, 0.00029943544, -0.0013191828, -0.0022873772, -0.0012334597, -0.00013989529, 8.8196823e-05, -0.00038855698, -0.00067373255, -0.00036330779, -4.1205275e-05, -0.00023519153, 0.0010361519, 0.0017966201, 0.00096882076, 0.00010988073, -0.00035278729, 0.0015542279, 0.0026949302, 0.0014532311, 0.0001648211, 0.0021167237, -0.0093253674, -0.016169581, -0.0087193869, -0.0009889266, 0.00064089691, -0.002823514, -0.0048957898, -0.0026400366, -0.000299425, -1.9880431e-06, 8.7584564e-06, 1.5186594e-05, 8.1893149e-06, 9.2880743e-07, 5.3014484e-06, -2.3355884e-05, -4.0497585e-05, -2.1838173e-05, -2.4768198e-06, 7.9521725e-06, -3.5033826e-05, -6.0746377e-05, -3.2757259e-05, -3.7152297e-06, -4.7713035e-05, 0.00021020295, 0.00036447826, 0.00019654356, 2.2291378e-05, -1.4446447e-05, 6.3644783e-05, 0.00011035592, 5.9509021e-05, 6.749334e-06,
+ -2.8457079e-06, 7.5885543e-06, 1.1382831e-05, -6.8296989e-05, -2.067881e-05, 7.5885543e-06, -2.0236145e-05, -3.0354217e-05, 0.0001821253, 5.5143495e-05, 1.1382831e-05, -3.0354217e-05, -4.5531326e-05, 0.00027318796, 8.2715242e-05, -6.8296989e-05, 0.0001821253, 0.00027318796, -0.0016391277, -0.00049629145, -2.067881e-05, 5.5143495e-05, 8.2715242e-05, -0.00049629145, -0.00015026602, 1.3990535e-05, -3.7308092e-05, -5.5962139e-05, 0.00033577283, 0.00010166455, -3.7308092e-05, 9.9488247e-05, 0.00014923237, -0.00089539422, -0.00027110547, -5.5962139e-05, 0.00014923237, 0.00022384855, -0.0013430913, -0.00040665821, 0.00033577283, -0.00089539422, -0.0013430913, 0.008058548, 0.0024399492, 0.00010166455, -0.00027110547, -0.00040665821, 0.0024399492, 0.00073876241, -1.1796753e-05, 3.1458007e-05, 4.718701e-05, -0.00028312206, -8.5723069e-05, 3.1458007e-05, -8.3888019e-05, -0.00012583203, 0.00075499217, 0.00022859485, 4.718701e-05, -0.00012583203, -0.00018874804, 0.0011324883, 0.00034289228, -0.00028312206, 0.00075499217, 0.0011324883, -0.0067949295, -0.0020573537, -8.5723069e-05, 0.00022859485, 0.00034289228, -0.0020573537, -0.00062292097, -2.524919e-05, 6.7331173e-05, 0.00010099676, -0.00060598056, -0.00018347745, 6.7331173e-05, -0.00017954979, -0.00026932469, 0.0016159481, 0.00048927319, 0.00010099676, -0.00026932469, -0.00040398704, 0.0024239222, 0.00073390978, -0.00060598056, 0.0016159481, 0.0024239222, -0.014543533, -0.0044034587, -0.00018347745, 0.00048927319, 0.00073390978, -0.0044034587, -0.0013332694, 5.6914157e-07, -1.5177109e-06, -2.2765663e-06, 1.3659398e-05, 4.1357621e-06, -1.5177109e-06, 4.047229e-06, 6.0708434e-06, -3.6425061e-05, -1.1028699e-05, -2.2765663e-06, 6.0708434e-06, 9.1062652e-06, -5.4637591e-05, -1.6543048e-05, 1.3659398e-05, -3.6425061e-05, -5.4637591e-05, 0.00032782555, 9.925829e-05, 4.1357621e-06, -1.1028699e-05, -1.6543048e-05, 9.925829e-05, 3.0053205e-05,
+ 1.0869023e-06, -5.343607e-06, 4.5057041e-06, 9.6437878e-06, -2.1738046e-07, -2.8984062e-06, 1.4249619e-05, -1.2015211e-05, -2.5716767e-05, 5.7968123e-07, -4.3476092e-06, 2.1374428e-05, -1.8022816e-05, -3.8575151e-05, 8.6952185e-07, 2.6085655e-05, -0.00012824657, 0.0001081369, 0.00023145091, -5.2171311e-06, 7.8981568e-06, -3.8830211e-05, 3.274145e-05, 7.0078191e-05, -1.5796314e-06, -5.343607e-06, 2.6271115e-05, -2.215168e-05, -4.7412368e-05, 1.0687214e-06, 1.4249619e-05, -7.0056307e-05, 5.9071146e-05, 0.00012643298, -2.8499237e-06, 2.1374428e-05, -0.00010508446, 8.860672e-05, 0.00018964947, -4.2748856e-06, -0.00012824657, 0.00063050676, -0.00053164032, -0.0011378968, 2.5649314e-05, -3.8830211e-05, 0.00019090344, -0.00016096887, -0.00034452987, 7.7660422e-06, 4.5057041e-06, -2.215168e-05, 1.8678192e-05, 3.9977884e-05, -9.0114082e-07, -1.2015211e-05, 5.9071146e-05, -4.9808511e-05, -0.00010660769, 2.4030422e-06, -1.8022816e-05, 8.860672e-05, -7.4712767e-05, -0.00015991154, 3.6045633e-06, 0.0001081369, -0.00053164032, 0.0004482766, 0.00095946921, -2.162738e-05, 3.274145e-05, -0.00016096887, 0.00013572819, 0.00029050596, -6.54829e-06, 9.6437878e-06, -4.7412368e-05, 3.9977884e-05, 8.5566699e-05, -1.9287576e-06, -2.5716767e-05, 0.00012643298, -0.00010660769, -0.00022817786, 5.1433535e-06, -3.8575151e-05, 0.00018964947, -0.00015991154, -0.0003422668, 7.7150302e-06, 0.00023145091, -0.0011378968, 0.00095946921, 0.0020536008, -4.6290181e-05, 7.0078191e-05, -0.00034452987, 0.00029050596, 0.00062178468, -1.4015638e-05, -2.1738046e-07, 1.0687214e-06, -9.0114082e-07, -1.9287576e-06, 4.3476092e-08, 5.7968123e-07, -2.8499237e-06, 2.4030422e-06, 5.1433535e-06, -1.1593625e-07, 8.6952185e-07, -4.2748856e-06, 3.6045633e-06, 7.7150302e-06, -1.7390437e-07, -5.2171311e-06, 2.5649314e-05, -2.162738e-05, -4.6290181e-05, 1.0434262e-06, -1.5796314e-06, 7.7660422e-06, -6.54829e-06, -1.4015638e-05, 3.1592627e-07,
+ -1.2647591e-05, 2.0236145e-05, 3.0354217e-05, -5.2613977e-05, -1.2647591e-05, 3.3726908e-05, -5.3963053e-05, -8.0944579e-05, 0.00014030394, 3.3726908e-05, 5.0590362e-05, -8.0944579e-05, -0.00012141687, 0.00021045591, 5.0590362e-05, -0.00030354217, 0.00048566748, 0.00072850121, -0.0012627354, -0.00030354217, -9.1905824e-05, 0.00014704932, 0.00022057398, -0.00038232823, -9.1905824e-05, 6.2180154e-05, -9.9488247e-05, -0.00014923237, 0.00025866944, 6.2180154e-05, -0.00016581374, 0.00026530199, 0.00039795299, -0.00068978518, -0.00016581374, -0.00024872062, 0.00039795299, 0.00059692948, -0.0010346778, -0.00024872062, 0.0014923237, -0.0023877179, -0.0035815769, 0.0062080666, 0.0014923237, 0.00045184245, -0.00072294793, -0.0010844219, 0.0018796646, 0.00045184245, -5.2430012e-05, 8.3888019e-05, 0.00012583203, -0.00021810885, -5.2430012e-05, 0.00013981336, -0.00022370138, -0.00033555207, 0.0005816236, 0.00013981336, 0.00020972005, -0.00033555207, -0.00050332811, 0.00087243539, 0.00020972005, -0.0012583203, 0.0020133124, 0.0030199687, -0.0052346124, -0.0012583203, -0.00038099142, 0.00060958627, 0.0009143794, -0.0015849243, -0.00038099142, -0.00011221862, 0.00017954979, 0.00026932469, -0.00046682946, -0.00011221862, 0.00029924966, -0.00047879945, -0.00071819918, 0.0012448786, 0.00029924966, 0.00044887449, -0.00071819918, -0.0010772988, 0.0018673179, 0.00044887449, -0.0026932469, 0.0043091951, 0.0064637926, -0.011203907, -0.0026932469, -0.00081545532, 0.0013047285, 0.0019570928, -0.0033922941, -0.00081545532, 2.5295181e-06, -4.047229e-06, -6.0708434e-06, 1.0522795e-05, 2.5295181e-06, -6.7453816e-06, 1.0792611e-05, 1.6188916e-05, -2.8060787e-05, -6.7453816e-06, -1.0118072e-05, 1.6188916e-05, 2.4283374e-05, -4.2091181e-05, -1.0118072e-05, 6.0708434e-05, -9.7133495e-05, -0.00014570024, 0.00025254709, 6.0708434e-05, 1.8381165e-05, -2.9409864e-05, -4.4114796e-05, 7.6465646e-05, 1.8381165e-05,
+ 4.0384459e-05, 5.4103582e-05, -5.7968123e-05, 7.7290831e-06, 9.6613539e-07, -0.00019854469, -0.00026599288, 0.00028499237, -3.7998983e-05, -4.7498729e-06, 0.00016741194, 0.00022428394, -0.00024030422, 3.2040563e-05, 4.0050703e-06, 0.00035832029, 0.00048004632, -0.00051433535, 6.8578046e-05, 8.5722558e-06, -8.0768918e-06, -1.0820716e-05, 1.1593625e-05, -1.5458166e-06, -1.9322708e-07, -0.00019854469, -0.00026599288, 0.00028499237, -3.7998983e-05, -4.7498729e-06, 0.00097611788, 0.0013077177, -0.0014011261, 0.00018681682, 2.3352102e-05, -0.00082305797, -0.0011026614, 0.0011814229, -0.00015752306, -1.9690382e-05, -0.0017616329, -0.0023600823, 0.0025286596, -0.00033715461, -4.2144327e-05, 3.9708937e-05, 5.3198576e-05, -5.6998475e-05, 7.5997966e-06, 9.4997458e-07, 0.00016741194, 0.00022428394, -0.00024030422, 3.2040563e-05, 4.0050703e-06, -0.00082305797, -0.0011026614, 0.0011814229, -0.00015752306, -1.9690382e-05, 0.00069399859, 0.00092975887, -0.00099617022, 0.0001328227, 1.6602837e-05, 0.0014854005, 0.0019900102, -0.0021321538, 0.00028428717, 3.5535897e-05, -3.3482388e-05, -4.4856788e-05, 4.8060844e-05, -6.4081125e-06, -8.0101407e-07, 0.00035832029, 0.00048004632, -0.00051433535, 6.8578046e-05, 8.5722558e-06, -0.0017616329, -0.0023600823, 0.0025286596, -0.00033715461, -4.2144327e-05, 0.0014854005, 0.0019900102, -0.0021321538, 0.00028428717, 3.5535897e-05, 0.0031792782, 0.0042593201, -0.0045635573, 0.0006084743, 7.6059288e-05, -7.1664058e-05, -9.6009265e-05, 0.00010286707, -1.3715609e-05, -1.7144512e-06, -8.0768918e-06, -1.0820716e-05, 1.1593625e-05, -1.5458166e-06, -1.9322708e-07, 3.9708937e-05, 5.3198576e-05, -5.6998475e-05, 7.5997966e-06, 9.4997458e-07, -3.3482388e-05, -4.4856788e-05, 4.8060844e-05, -6.4081125e-06, -8.0101407e-07, -7.1664058e-05, -9.6009265e-05, 0.00010286707, -1.3715609e-05, -1.7144512e-06, 1.6153784e-06, 2.1641433e-06, -2.3187249e-06, 3.0916332e-07, 3.8645415e-08,
+ -3.7966102e-06, 1.6726219e-05, 2.9002177e-05, 1.5639317e-05, 1.7737642e-06, 1.8665516e-05, -8.2232174e-05, -0.00014258525, -7.6888567e-05, -8.7204697e-06, -1.5738675e-05, 6.933778e-05, 0.00012022721, 6.4832076e-05, 7.3530588e-06, -3.3686286e-05, 0.00014840718, 0.0002573284, 0.00013876339, 1.5738126e-05, 7.5932203e-07, -3.3452438e-06, -5.8004353e-06, -3.1278633e-06, -3.5475284e-07, 1.8665516e-05, -8.2232174e-05, -0.00014258525, -7.6888567e-05, -8.7204697e-06, -9.1766465e-05, 0.00040428327, 0.00070100092, 0.00037801216, 4.2873e-05, 7.7377049e-05, -0.00034088974, -0.00059108066, -0.00031873806, -3.6150311e-05, 0.00016561403, -0.00072962366, -0.00126512, -0.00068221129, -7.737435e-05, -3.7331032e-06, 1.6446435e-05, 2.8517049e-05, 1.5377713e-05, 1.7440939e-06, -1.5738675e-05, 6.933778e-05, 0.00012022721, 6.4832076e-05, 7.3530588e-06, 7.7377049e-05, -0.00034088974, -0.00059108066, -0.00031873806, -3.6150311e-05, -6.5243961e-05, 0.00028743662, 0.00049839641, 0.00026875842, 3.0481771e-05, -0.00013964497, 0.00061521521, 0.0010667432, 0.00057523733, 6.5241685e-05, 3.147735e-06, -1.3867556e-05, -2.4045441e-05, -1.2966415e-05, -1.4706118e-06, -3.3686286e-05, 0.00014840718, 0.0002573284, 0.00013876339, 1.5738126e-05, 0.00016561403, -0.00072962366, -0.00126512, -0.00068221129, -7.737435e-05, -0.00013964497, 0.00061521521, 0.0010667432, 0.00057523733, 6.5241685e-05, -0.00029888923, 0.0013167764, 0.0022832047, 0.0012312097, 0.0001396401, 6.7372573e-06, -2.9681436e-05, -5.1465681e-05, -2.7752678e-05, -3.1476252e-06, 7.5932203e-07, -3.3452438e-06, -5.8004353e-06, -3.1278633e-06, -3.5475284e-07, -3.7331032e-06, 1.6446435e-05, 2.8517049e-05, 1.5377713e-05, 1.7440939e-06, 3.147735e-06, -1.3867556e-05, -2.4045441e-05, -1.2966415e-05, -1.4706118e-06, 6.7372573e-06, -2.9681436e-05, -5.1465681e-05, -2.7752678e-05, -3.1476252e-06, -1.5186441e-07, 6.6904876e-07, 1.1600871e-06, 6.2557266e-07, 7.0950567e-08,
+ 1.0869023e-06, -2.8984062e-06, -4.3476092e-06, 2.6085655e-05, 7.8981568e-06, -5.343607e-06, 1.4249619e-05, 2.1374428e-05, -0.00012824657, -3.8830211e-05, 4.5057041e-06, -1.2015211e-05, -1.8022816e-05, 0.0001081369, 3.274145e-05, 9.6437878e-06, -2.5716767e-05, -3.8575151e-05, 0.00023145091, 7.0078191e-05, -2.1738046e-07, 5.7968123e-07, 8.6952185e-07, -5.2171311e-06, -1.5796314e-06, -5.343607e-06, 1.4249619e-05, 2.1374428e-05, -0.00012824657, -3.8830211e-05, 2.6271115e-05, -7.0056307e-05, -0.00010508446, 0.00063050676, 0.00019090344, -2.215168e-05, 5.9071146e-05, 8.860672e-05, -0.00053164032, -0.00016096887, -4.7412368e-05, 0.00012643298, 0.00018964947, -0.0011378968, -0.00034452987, 1.0687214e-06, -2.8499237e-06, -4.2748856e-06, 2.5649314e-05, 7.7660422e-06, 4.5057041e-06, -1.2015211e-05, -1.8022816e-05, 0.0001081369, 3.274145e-05, -2.215168e-05, 5.9071146e-05, 8.860672e-05, -0.00053164032, -0.00016096887, 1.8678192e-05, -4.9808511e-05, -7.4712767e-05, 0.0004482766, 0.00013572819, 3.9977884e-05, -0.00010660769, -0.00015991154, 0.00095946921, 0.00029050596, -9.0114082e-07, 2.4030422e-06, 3.6045633e-06, -2.162738e-05, -6.54829e-06, 9.6437878e-06, -2.5716767e-05, -3.8575151e-05, 0.00023145091, 7.0078191e-05, -4.7412368e-05, 0.00012643298, 0.00018964947, -0.0011378968, -0.00034452987, 3.9977884e-05, -0.00010660769, -0.00015991154, 0.00095946921, 0.00029050596, 8.5566699e-05, -0.00022817786, -0.0003422668, 0.0020536008, 0.00062178468, -1.9287576e-06, 5.1433535e-06, 7.7150302e-06, -4.6290181e-05, -1.4015638e-05, -2.1738046e-07, 5.7968123e-07, 8.6952185e-07, -5.2171311e-06, -1.5796314e-06, 1.0687214e-06, -2.8499237e-06, -4.2748856e-06, 2.5649314e-05, 7.7660422e-06, -9.0114082e-07, 2.4030422e-06, 3.6045633e-06, -2.162738e-05, -6.54829e-06, -1.9287576e-06, 5.1433535e-06, 7.7150302e-06, -4.6290181e-05, -1.4015638e-05, 4.3476092e-08, -1.1593625e-07, -1.7390437e-07, 1.0434262e-06, 3.1592627e-07,
+ -4.151363e-07, 2.040961e-06, -1.7209287e-06, -3.6833912e-06, 8.302726e-08, 2.040961e-06, -1.0034106e-05, 8.4607111e-06, 1.810889e-05, -4.081922e-07, -1.7209287e-06, 8.4607111e-06, -7.1340315e-06, -1.5269331e-05, 3.4418573e-07, -3.6833912e-06, 1.810889e-05, -1.5269331e-05, -3.2681725e-05, 7.3667823e-07, 8.302726e-08, -4.081922e-07, 3.4418573e-07, 7.3667823e-07, -1.6605452e-08, 2.040961e-06, -1.0034106e-05, 8.4607111e-06, 1.810889e-05, -4.081922e-07, -1.0034106e-05, 4.9331316e-05, -4.1595932e-05, -8.902989e-05, 2.0068213e-06, 8.4607111e-06, -4.1595932e-05, 3.5073493e-05, 7.5069582e-05, -1.6921422e-06, 1.810889e-05, -8.902989e-05, 7.5069582e-05, 0.00016067525, -3.6217781e-06, -4.081922e-07, 2.0068213e-06, -1.6921422e-06, -3.6217781e-06, 8.163844e-08, -1.7209287e-06, 8.4607111e-06, -7.1340315e-06, -1.5269331e-05, 3.4418573e-07, 8.4607111e-06, -4.1595932e-05, 3.5073493e-05, 7.5069582e-05, -1.6921422e-06, -7.1340315e-06, 3.5073493e-05, -2.9573803e-05, -6.3298316e-05, 1.4268063e-06, -1.5269331e-05, 7.5069582e-05, -6.3298316e-05, -0.00013548061, 3.0538661e-06, 3.4418573e-07, -1.6921422e-06, 1.4268063e-06, 3.0538661e-06, -6.8837146e-08, -3.6833912e-06, 1.810889e-05, -1.5269331e-05, -3.2681725e-05, 7.3667823e-07, 1.810889e-05, -8.902989e-05, 7.5069582e-05, 0.00016067525, -3.6217781e-06, -1.5269331e-05, 7.5069582e-05, -6.3298316e-05, -0.00013548061, 3.0538661e-06, -3.2681725e-05, 0.00016067525, -0.00013548061, -0.00028997603, 6.536345e-06, 7.3667823e-07, -3.6217781e-06, 3.0538661e-06, 6.536345e-06, -1.4733565e-07, 8.302726e-08, -4.081922e-07, 3.4418573e-07, 7.3667823e-07, -1.6605452e-08, -4.081922e-07, 2.0068213e-06, -1.6921422e-06, -3.6217781e-06, 8.163844e-08, 3.4418573e-07, -1.6921422e-06, 1.4268063e-06, 3.0538661e-06, -6.8837146e-08, 7.3667823e-07, -3.6217781e-06, 3.0538661e-06, 6.536345e-06, -1.4733565e-07, -1.6605452e-08, 8.163844e-08, -6.8837146e-08, -1.4733565e-07, 3.3210904e-09,
+ 4.8306769e-06, -7.7290831e-06, -1.1593625e-05, 2.0095616e-05, 4.8306769e-06, -2.3749364e-05, 3.7998983e-05, 5.6998475e-05, -9.8797356e-05, -2.3749364e-05, 2.0025352e-05, -3.2040563e-05, -4.8060844e-05, 8.3305463e-05, 2.0025352e-05, 4.2861279e-05, -6.8578046e-05, -0.00010286707, 0.00017830292, 4.2861279e-05, -9.6613539e-07, 1.5458166e-06, 2.3187249e-06, -4.0191232e-06, -9.6613539e-07, -2.3749364e-05, 3.7998983e-05, 5.6998475e-05, -9.8797356e-05, -2.3749364e-05, 0.00011676051, -0.00018681682, -0.00028022523, 0.00048572373, 0.00011676051, -9.8451911e-05, 0.00015752306, 0.00023628459, -0.00040955995, -9.8451911e-05, -0.00021072163, 0.00033715461, 0.00050573192, -0.00087660199, -0.00021072163, 4.7498729e-06, -7.5997966e-06, -1.1399695e-05, 1.9759471e-05, 4.7498729e-06, 2.0025352e-05, -3.2040563e-05, -4.8060844e-05, 8.3305463e-05, 2.0025352e-05, -9.8451911e-05, 0.00015752306, 0.00023628459, -0.00040955995, -9.8451911e-05, 8.3014185e-05, -0.0001328227, -0.00019923404, 0.00034533901, 8.3014185e-05, 0.00017767948, -0.00028428717, -0.00042643076, 0.00073914665, 0.00017767948, -4.0050703e-06, 6.4081125e-06, 9.6121688e-06, -1.6661093e-05, -4.0050703e-06, 4.2861279e-05, -6.8578046e-05, -0.00010286707, 0.00017830292, 4.2861279e-05, -0.00021072163, 0.00033715461, 0.00050573192, -0.00087660199, -0.00021072163, 0.00017767948, -0.00028428717, -0.00042643076, 0.00073914665, 0.00017767948, 0.00038029644, -0.0006084743, -0.00091271145, 0.0015820332, 0.00038029644, -8.5722558e-06, 1.3715609e-05, 2.0573414e-05, -3.5660584e-05, -8.5722558e-06, -9.6613539e-07, 1.5458166e-06, 2.3187249e-06, -4.0191232e-06, -9.6613539e-07, 4.7498729e-06, -7.5997966e-06, -1.1399695e-05, 1.9759471e-05, 4.7498729e-06, -4.0050703e-06, 6.4081125e-06, 9.6121688e-06, -1.6661093e-05, -4.0050703e-06, -8.5722558e-06, 1.3715609e-05, 2.0573414e-05, -3.5660584e-05, -8.5722558e-06, 1.9322708e-07, -3.0916332e-07, -4.6374499e-07, 8.0382464e-07, 1.9322708e-07,
+ -0.00046992825, -0.00062956895, 0.00067453816, -8.9938421e-05, -1.1242303e-05, 0.0007518852, 0.0010073103, -0.0010792611, 0.00014390147, 1.7987684e-05, 0.0011278278, 0.0015109655, -0.0016188916, 0.00021585221, 2.6981526e-05, -0.0019549015, -0.0026190068, 0.0028060787, -0.00037414383, -4.6767979e-05, -0.00046992825, -0.00062956895, 0.00067453816, -8.9938421e-05, -1.1242303e-05, 0.0023103382, 0.0030951899, -0.0033162749, 0.00044216998, 5.5271248e-05, -0.0036965411, -0.0049523038, 0.0053060398, -0.00070747198, -8.8433997e-05, -0.0055448116, -0.0074284557, 0.0079590597, -0.001061208, -0.000132651, 0.0096110068, 0.01287599, -0.013795704, 0.0018394271, 0.00022992839, 0.0023103382, 0.0030951899, -0.0033162749, 0.00044216998, 5.5271248e-05, -0.0019480662, -0.0026098495, 0.0027962673, -0.00037283564, -4.6604455e-05, 0.0031169059, 0.0041757591, -0.0044740277, 0.00059653702, 7.4567128e-05, 0.0046753589, 0.0062636387, -0.0067110415, 0.00089480553, 0.00011185069, -0.0081039554, -0.010856974, 0.011632472, -0.0015509963, -0.00019387453, -0.0019480662, -0.0026098495, 0.0027962673, -0.00037283564, -4.6604455e-05, -0.0041695452, -0.0055859936, 0.0059849931, -0.00079799909, -9.9749886e-05, 0.0066712724, 0.0089375898, -0.009575989, 0.0012767985, 0.00015959982, 0.010006909, 0.013406385, -0.014363984, 0.0019151978, 0.00023939973, -0.017345308, -0.023237733, 0.024897571, -0.0033196762, -0.00041495952, -0.0041695452, -0.0055859936, 0.0059849931, -0.00079799909, -9.9749886e-05, 9.398565e-05, 0.00012591379, -0.00013490763, 1.7987684e-05, 2.2484605e-06, -0.00015037704, -0.00020146206, 0.00021585221, -2.8780295e-05, -3.5975369e-06, -0.00022556556, -0.0003021931, 0.00032377832, -4.3170442e-05, -5.3963053e-06, 0.00039098031, 0.00052380137, -0.00056121575, 7.4828767e-05, 9.3535958e-06, 9.398565e-05, 0.00012591379, -0.00013490763, 1.7987684e-05, 2.2484605e-06,
+ 4.4178736e-05, -0.00019463237, -0.00033747987, -0.00018198477, -2.0640165e-05, -7.0685978e-05, 0.00031141178, 0.0005399678, 0.00029117564, 3.3024264e-05, -0.00010602897, 0.00046711768, 0.0008099517, 0.00043676346, 4.9536396e-05, 0.00018378354, -0.00080967064, -0.0014039163, -0.00075705666, -8.5863087e-05, 4.4178736e-05, -0.00019463237, -0.00033747987, -0.00018198477, -2.0640165e-05, -0.00021719873, 0.00095688348, 0.0016591738, 0.00089470333, 0.00010147456, 0.00034751797, -0.0015310136, -0.002654678, -0.0014315253, -0.00016235929, 0.00052127696, -0.0022965204, -0.0039820171, -0.002147288, -0.00024353894, -0.00090354673, 0.0039806353, 0.0069021629, 0.0037219658, 0.00042213416, -0.00021719873, 0.00095688348, 0.0016591738, 0.00089470333, 0.00010147456, 0.00018314094, -0.00080683962, -0.0013990075, -0.00075440961, -8.5562866e-05, -0.00029302551, 0.0012909434, 0.002238412, 0.0012070554, 0.00013690059, -0.00043953826, 0.0019364151, 0.0033576179, 0.0018105831, 0.00020535088, 0.00076186632, -0.0033564528, -0.0058198711, -0.003138344, -0.00035594152, 0.00018314094, -0.00080683962, -0.0013990075, -0.00075440961, -8.5562866e-05, 0.00039198588, -0.0017269199, -0.0029943669, -0.0016147013, -0.00018313456, -0.00062717741, 0.0027630718, 0.004790987, 0.002583522, 0.00029301529, -0.00094076611, 0.0041446077, 0.0071864805, 0.0038752831, 0.00043952293, 0.0016306613, -0.0071839868, -0.012456566, -0.0067171573, -0.00076183975, 0.00039198588, -0.0017269199, -0.0029943669, -0.0016147013, -0.00018313456, -8.8357473e-06, 3.8926473e-05, 6.7495975e-05, 3.6396955e-05, 4.128033e-06, 1.4137196e-05, -6.2282357e-05, -0.00010799356, -5.8235128e-05, -6.6048528e-06, 2.1205793e-05, -9.3423535e-05, -0.00016199034, -8.7352692e-05, -9.9072792e-06, -3.6756709e-05, 0.00016193413, 0.00028078325, 0.00015141133, 1.7172617e-05, -8.8357473e-06, 3.8926473e-05, 6.7495975e-05, 3.6396955e-05, 4.128033e-06,
+ -1.2647591e-05, 3.3726908e-05, 5.0590362e-05, -0.00030354217, -9.1905824e-05, 2.0236145e-05, -5.3963053e-05, -8.0944579e-05, 0.00048566748, 0.00014704932, 3.0354217e-05, -8.0944579e-05, -0.00012141687, 0.00072850121, 0.00022057398, -5.2613977e-05, 0.00014030394, 0.00021045591, -0.0012627354, -0.00038232823, -1.2647591e-05, 3.3726908e-05, 5.0590362e-05, -0.00030354217, -9.1905824e-05, 6.2180154e-05, -0.00016581374, -0.00024872062, 0.0014923237, 0.00045184245, -9.9488247e-05, 0.00026530199, 0.00039795299, -0.0023877179, -0.00072294793, -0.00014923237, 0.00039795299, 0.00059692948, -0.0035815769, -0.0010844219, 0.00025866944, -0.00068978518, -0.0010346778, 0.0062080666, 0.0018796646, 6.2180154e-05, -0.00016581374, -0.00024872062, 0.0014923237, 0.00045184245, -5.2430012e-05, 0.00013981336, 0.00020972005, -0.0012583203, -0.00038099142, 8.3888019e-05, -0.00022370138, -0.00033555207, 0.0020133124, 0.00060958627, 0.00012583203, -0.00033555207, -0.00050332811, 0.0030199687, 0.0009143794, -0.00021810885, 0.0005816236, 0.00087243539, -0.0052346124, -0.0015849243, -5.2430012e-05, 0.00013981336, 0.00020972005, -0.0012583203, -0.00038099142, -0.00011221862, 0.00029924966, 0.00044887449, -0.0026932469, -0.00081545532, 0.00017954979, -0.00047879945, -0.00071819918, 0.0043091951, 0.0013047285, 0.00026932469, -0.00071819918, -0.0010772988, 0.0064637926, 0.0019570928, -0.00046682946, 0.0012448786, 0.0018673179, -0.011203907, -0.0033922941, -0.00011221862, 0.00029924966, 0.00044887449, -0.0026932469, -0.00081545532, 2.5295181e-06, -6.7453816e-06, -1.0118072e-05, 6.0708434e-05, 1.8381165e-05, -4.047229e-06, 1.0792611e-05, 1.6188916e-05, -9.7133495e-05, -2.9409864e-05, -6.0708434e-06, 1.6188916e-05, 2.4283374e-05, -0.00014570024, -4.4114796e-05, 1.0522795e-05, -2.8060787e-05, -4.2091181e-05, 0.00025254709, 7.6465646e-05, 2.5295181e-06, -6.7453816e-06, -1.0118072e-05, 6.0708434e-05, 1.8381165e-05,
+ 4.8306769e-06, -2.3749364e-05, 2.0025352e-05, 4.2861279e-05, -9.6613539e-07, -7.7290831e-06, 3.7998983e-05, -3.2040563e-05, -6.8578046e-05, 1.5458166e-06, -1.1593625e-05, 5.6998475e-05, -4.8060844e-05, -0.00010286707, 2.3187249e-06, 2.0095616e-05, -9.8797356e-05, 8.3305463e-05, 0.00017830292, -4.0191232e-06, 4.8306769e-06, -2.3749364e-05, 2.0025352e-05, 4.2861279e-05, -9.6613539e-07, -2.3749364e-05, 0.00011676051, -9.8451911e-05, -0.00021072163, 4.7498729e-06, 3.7998983e-05, -0.00018681682, 0.00015752306, 0.00033715461, -7.5997966e-06, 5.6998475e-05, -0.00028022523, 0.00023628459, 0.00050573192, -1.1399695e-05, -9.8797356e-05, 0.00048572373, -0.00040955995, -0.00087660199, 1.9759471e-05, -2.3749364e-05, 0.00011676051, -9.8451911e-05, -0.00021072163, 4.7498729e-06, 2.0025352e-05, -9.8451911e-05, 8.3014185e-05, 0.00017767948, -4.0050703e-06, -3.2040563e-05, 0.00015752306, -0.0001328227, -0.00028428717, 6.4081125e-06, -4.8060844e-05, 0.00023628459, -0.00019923404, -0.00042643076, 9.6121688e-06, 8.3305463e-05, -0.00040955995, 0.00034533901, 0.00073914665, -1.6661093e-05, 2.0025352e-05, -9.8451911e-05, 8.3014185e-05, 0.00017767948, -4.0050703e-06, 4.2861279e-05, -0.00021072163, 0.00017767948, 0.00038029644, -8.5722558e-06, -6.8578046e-05, 0.00033715461, -0.00028428717, -0.0006084743, 1.3715609e-05, -0.00010286707, 0.00050573192, -0.00042643076, -0.00091271145, 2.0573414e-05, 0.00017830292, -0.00087660199, 0.00073914665, 0.0015820332, -3.5660584e-05, 4.2861279e-05, -0.00021072163, 0.00017767948, 0.00038029644, -8.5722558e-06, -9.6613539e-07, 4.7498729e-06, -4.0050703e-06, -8.5722558e-06, 1.9322708e-07, 1.5458166e-06, -7.5997966e-06, 6.4081125e-06, 1.3715609e-05, -3.0916332e-07, 2.3187249e-06, -1.1399695e-05, 9.6121688e-06, 2.0573414e-05, -4.6374499e-07, -4.0191232e-06, 1.9759471e-05, -1.6661093e-05, -3.5660584e-05, 8.0382464e-07, -9.6613539e-07, 4.7498729e-06, -4.0050703e-06, -8.5722558e-06, 1.9322708e-07,
+ -5.6211513e-05, 8.9938421e-05, 0.00013490763, -0.0002338399, -5.6211513e-05, 8.9938421e-05, -0.00014390147, -0.00021585221, 0.00037414383, 8.9938421e-05, 0.00013490763, -0.00021585221, -0.00032377832, 0.00056121575, 0.00013490763, -0.0002338399, 0.00037414383, 0.00056121575, -0.00097277397, -0.0002338399, -5.6211513e-05, 8.9938421e-05, 0.00013490763, -0.0002338399, -5.6211513e-05, 0.00027635624, -0.00044216998, -0.00066325498, 0.001149642, 0.00027635624, -0.00044216998, 0.00070747198, 0.001061208, -0.0018394271, -0.00044216998, -0.00066325498, 0.001061208, 0.0015918119, -0.0027591407, -0.00066325498, 0.001149642, -0.0018394271, -0.0027591407, 0.0047825106, 0.001149642, 0.00027635624, -0.00044216998, -0.00066325498, 0.001149642, 0.00027635624, -0.00023302227, 0.00037283564, 0.00055925346, -0.00096937266, -0.00023302227, 0.00037283564, -0.00059653702, -0.00089480553, 0.0015509963, 0.00037283564, 0.00055925346, -0.00089480553, -0.0013422083, 0.0023264944, 0.00055925346, -0.00096937266, 0.0015509963, 0.0023264944, -0.0040325903, -0.00096937266, -0.00023302227, 0.00037283564, 0.00055925346, -0.00096937266, -0.00023302227, -0.00049874943, 0.00079799909, 0.0011969986, -0.0020747976, -0.00049874943, 0.00079799909, -0.0012767985, -0.0019151978, 0.0033196762, 0.00079799909, 0.0011969986, -0.0019151978, -0.0028727967, 0.0049795143, 0.0011969986, -0.0020747976, 0.0033196762, 0.0049795143, -0.0086311581, -0.0020747976, -0.00049874943, 0.00079799909, 0.0011969986, -0.0020747976, -0.00049874943, 1.1242303e-05, -1.7987684e-05, -2.6981526e-05, 4.6767979e-05, 1.1242303e-05, -1.7987684e-05, 2.8780295e-05, 4.3170442e-05, -7.4828767e-05, -1.7987684e-05, -2.6981526e-05, 4.3170442e-05, 6.4755663e-05, -0.00011224315, -2.6981526e-05, 4.6767979e-05, -7.4828767e-05, -0.00011224315, 0.00019455479, 4.6767979e-05, 1.1242303e-05, -1.7987684e-05, -2.6981526e-05, 4.6767979e-05, 1.1242303e-05,
+ 0.04571462, 0.061244467, -0.065619072, 0.0087492096, 0.0010936512, 0.061244467, 0.082050004, -0.087910719, 0.011721429, 0.0014651786, -0.065619072, -0.087910719, 0.094190056, -0.012558674, -0.0015698343, 0.0087492096, 0.011721429, -0.012558674, 0.0016744899, 0.00020931124, 0.0010936512, 0.0014651786, -0.0015698343, 0.00020931124, 2.6163904e-05, -0.073143393, -0.097991148, 0.10499052, -0.013998735, -0.0017498419, -0.097991148, -0.13128001, 0.14065715, -0.018754287, -0.0023442858, 0.10499052, 0.14065715, -0.15070409, 0.020093879, 0.0025117348, -0.013998735, -0.018754287, 0.020093879, -0.0026791838, -0.00033489798, -0.0017498419, -0.0023442858, 0.0025117348, -0.00033489798, -4.1862247e-05, -0.10971509, -0.14698672, 0.15748577, -0.020998103, -0.0026247629, -0.14698672, -0.19692001, 0.21098573, -0.02813143, -0.0035164288, 0.15748577, 0.21098573, -0.22605613, 0.030140818, 0.0037676022, -0.020998103, -0.02813143, 0.030140818, -0.0040187757, -0.00050234697, -0.0026247629, -0.0035164288, 0.0037676022, -0.00050234697, -6.2793371e-05, 0.19017282, 0.25477698, -0.27297534, 0.036396712, 0.004549589, 0.25477698, 0.34132802, -0.36570859, 0.048761145, 0.0060951432, -0.27297534, -0.36570859, 0.39183063, -0.052244084, -0.0065305105, 0.036396712, 0.048761145, -0.052244084, 0.0069658779, 0.00087073474, 0.004549589, 0.0060951432, -0.0065305105, 0.00087073474, 0.00010884184, 0.04571462, 0.061244467, -0.065619072, 0.0087492096, 0.0010936512, 0.061244467, 0.082050004, -0.087910719, 0.011721429, 0.0014651786, -0.065619072, -0.087910719, 0.094190056, -0.012558674, -0.0015698343, 0.0087492096, 0.011721429, -0.012558674, 0.0016744899, 0.00020931124, 0.0010936512, 0.0014651786, -0.0015698343, 0.00020931124, 2.6163904e-05,
+ -0.0042977075, 0.018933836, 0.032830042, 0.017703479, 0.0020078753, -0.0057576942, 0.025365905, 0.043982832, 0.023717579, 0.0026899764, 0.0061689581, -0.027177756, -0.047124462, -0.025411692, -0.0028821176, -0.00082252775, 0.0036237008, 0.0062832616, 0.0033882256, 0.00038428235, -0.00010281597, 0.0004529626, 0.00078540771, 0.0004235282, 4.8035293e-05, 0.006876332, -0.030294138, -0.052528067, -0.028325566, -0.0032126004, 0.0092123107, -0.040585449, -0.07037253, -0.037948127, -0.0043039623, -0.0098703329, 0.043484409, 0.07539914, 0.040658707, 0.0046113882, 0.0013160444, -0.0057979212, -0.010053219, -0.005421161, -0.00061485175, 0.00016450555, -0.00072474015, -0.0012566523, -0.00067764512, -7.6856469e-05, 0.010314498, -0.045441208, -0.078792101, -0.042488349, -0.0048189006, 0.013818466, -0.060878173, -0.1055588, -0.05692219, -0.0064559434, -0.014805499, 0.065226614, 0.11309871, 0.060988061, 0.0069170822, 0.0019740666, -0.0086968818, -0.015079828, -0.0081317415, -0.00092227763, 0.00024675832, -0.0010871102, -0.0018849785, -0.0010164677, -0.0001152847, -0.017878463, 0.07876476, 0.13657298, 0.073646472, 0.0083527611, -0.023952008, 0.10552217, 0.18296858, 0.09866513, 0.011190302, 0.025662866, -0.11305946, -0.19603776, -0.10571264, -0.011989609, -0.0034217154, 0.015074595, 0.026138368, 0.014095019, 0.0015986146, -0.00042771443, 0.0018843244, 0.0032672961, 0.0017618773, 0.00019982682, -0.0042977075, 0.018933836, 0.032830042, 0.017703479, 0.0020078753, -0.0057576942, 0.025365905, 0.043982832, 0.023717579, 0.0026899764, 0.0061689581, -0.027177756, -0.047124462, -0.025411692, -0.0028821176, -0.00082252775, 0.0036237008, 0.0062832616, 0.0033882256, 0.00038428235, -0.00010281597, 0.0004529626, 0.00078540771, 0.0004235282, 4.8035293e-05,
+ 0.0012303576, -0.0032809536, -0.0049214304, 0.029528583, 0.0089405986, 0.001648326, -0.0043955359, -0.0065933039, 0.039559823, 0.011977835, -0.0017660635, 0.0047095028, 0.0070642542, -0.042385525, -0.012833395, 0.00023547514, -0.00062793371, -0.00094190056, 0.0056514034, 0.0017111193, 2.9434392e-05, -7.8491713e-05, -0.00011773757, 0.00070642542, 0.00021388992, -0.0019685722, 0.0052495258, 0.0078742887, -0.047245732, -0.014304958, -0.0026373216, 0.0070328575, 0.010549286, -0.063295718, -0.019164537, 0.0028257017, -0.0075352045, -0.011302807, 0.06781684, 0.020533432, -0.00037676022, 0.0010046939, 0.0015070409, -0.0090422454, -0.002737791, -4.7095028e-05, 0.00012558674, 0.00018838011, -0.0011302807, -0.00034222387, -0.0029528583, 0.0078742887, 0.011811433, -0.070868598, -0.021457437, -0.0039559823, 0.010549286, 0.015823929, -0.094943576, -0.028746805, 0.0042385525, -0.011302807, -0.01695421, 0.10172526, 0.030800148, -0.00056514034, 0.0015070409, 0.0022605613, -0.013563368, -0.0041066864, -7.0642542e-05, 0.00018838011, 0.00028257017, -0.001695421, -0.0005133358, 0.0051182876, -0.013648767, -0.020473151, 0.1228389, 0.03719289, 0.0068570361, -0.01828543, -0.027428144, 0.16456887, 0.049827795, -0.0073468244, 0.019591532, 0.029387297, -0.17632378, -0.053386924, 0.00097957658, -0.0026122042, -0.0039183063, 0.023509838, 0.0071182565, 0.00012244707, -0.00032652553, -0.00048978829, 0.0029387297, 0.00088978206, 0.0012303576, -0.0032809536, -0.0049214304, 0.029528583, 0.0089405986, 0.001648326, -0.0043955359, -0.0065933039, 0.039559823, 0.011977835, -0.0017660635, 0.0047095028, 0.0070642542, -0.042385525, -0.012833395, 0.00023547514, -0.00062793371, -0.00094190056, 0.0056514034, 0.0017111193, 2.9434392e-05, -7.8491713e-05, -0.00011773757, 0.00070642542, 0.00021388992,
+ -0.00046992825, 0.0023103382, -0.0019480662, -0.0041695452, 9.398565e-05, -0.00062956895, 0.0030951899, -0.0026098495, -0.0055859936, 0.00012591379, 0.00067453816, -0.0033162749, 0.0027962673, 0.0059849931, -0.00013490763, -8.9938421e-05, 0.00044216998, -0.00037283564, -0.00079799909, 1.7987684e-05, -1.1242303e-05, 5.5271248e-05, -4.6604455e-05, -9.9749886e-05, 2.2484605e-06, 0.0007518852, -0.0036965411, 0.0031169059, 0.0066712724, -0.00015037704, 0.0010073103, -0.0049523038, 0.0041757591, 0.0089375898, -0.00020146206, -0.0010792611, 0.0053060398, -0.0044740277, -0.009575989, 0.00021585221, 0.00014390147, -0.00070747198, 0.00059653702, 0.0012767985, -2.8780295e-05, 1.7987684e-05, -8.8433997e-05, 7.4567128e-05, 0.00015959982, -3.5975369e-06, 0.0011278278, -0.0055448116, 0.0046753589, 0.010006909, -0.00022556556, 0.0015109655, -0.0074284557, 0.0062636387, 0.013406385, -0.0003021931, -0.0016188916, 0.0079590597, -0.0067110415, -0.014363984, 0.00032377832, 0.00021585221, -0.001061208, 0.00089480553, 0.0019151978, -4.3170442e-05, 2.6981526e-05, -0.000132651, 0.00011185069, 0.00023939973, -5.3963053e-06, -0.0019549015, 0.0096110068, -0.0081039554, -0.017345308, 0.00039098031, -0.0026190068, 0.01287599, -0.010856974, -0.023237733, 0.00052380137, 0.0028060787, -0.013795704, 0.011632472, 0.024897571, -0.00056121575, -0.00037414383, 0.0018394271, -0.0015509963, -0.0033196762, 7.4828767e-05, -4.6767979e-05, 0.00022992839, -0.00019387453, -0.00041495952, 9.3535958e-06, -0.00046992825, 0.0023103382, -0.0019480662, -0.0041695452, 9.398565e-05, -0.00062956895, 0.0030951899, -0.0026098495, -0.0055859936, 0.00012591379, 0.00067453816, -0.0033162749, 0.0027962673, 0.0059849931, -0.00013490763, -8.9938421e-05, 0.00044216998, -0.00037283564, -0.00079799909, 1.7987684e-05, -1.1242303e-05, 5.5271248e-05, -4.6604455e-05, -9.9749886e-05, 2.2484605e-06,
+ 0.005468256, -0.0087492096, -0.013123814, 0.022747945, 0.005468256, 0.0073258932, -0.011721429, -0.017582144, 0.030475716, 0.0073258932, -0.0078491713, 0.012558674, 0.018838011, -0.032652553, -0.0078491713, 0.0010465562, -0.0016744899, -0.0025117348, 0.0043536737, 0.0010465562, 0.00013081952, -0.00020931124, -0.00031396685, 0.00054420921, 0.00013081952, -0.0087492096, 0.013998735, 0.020998103, -0.036396712, -0.0087492096, -0.011721429, 0.018754287, 0.02813143, -0.048761145, -0.011721429, 0.012558674, -0.020093879, -0.030140818, 0.052244084, 0.012558674, -0.0016744899, 0.0026791838, 0.0040187757, -0.0069658779, -0.0016744899, -0.00020931124, 0.00033489798, 0.00050234697, -0.00087073474, -0.00020931124, -0.013123814, 0.020998103, 0.031497155, -0.054595068, -0.013123814, -0.017582144, 0.02813143, 0.042197145, -0.073141718, -0.017582144, 0.018838011, -0.030140818, -0.045211227, 0.078366127, 0.018838011, -0.0025117348, 0.0040187757, 0.0060281636, -0.010448817, -0.0025117348, -0.00031396685, 0.00050234697, 0.00075352045, -0.0013061021, -0.00031396685, 0.022747945, -0.036396712, -0.054595068, 0.094631451, 0.022747945, 0.030475716, -0.048761145, -0.073141718, 0.12677898, 0.030475716, -0.032652553, 0.052244084, 0.078366127, -0.13583462, -0.032652553, 0.0043536737, -0.0069658779, -0.010448817, 0.018111283, 0.0043536737, 0.00054420921, -0.00087073474, -0.0013061021, 0.0022639103, 0.00054420921, 0.005468256, -0.0087492096, -0.013123814, 0.022747945, 0.005468256, 0.0073258932, -0.011721429, -0.017582144, 0.030475716, 0.0073258932, -0.0078491713, 0.012558674, 0.018838011, -0.032652553, -0.0078491713, 0.0010465562, -0.0016744899, -0.0025117348, 0.0043536737, 0.0010465562, 0.00013081952, -0.00020931124, -0.00031396685, 0.00054420921, 0.00013081952,
+ -0.0042977075, -0.0057576942, 0.0061689581, -0.00082252775, -0.00010281597, 0.018933836, 0.025365905, -0.027177756, 0.0036237008, 0.0004529626, 0.032830042, 0.043982832, -0.047124462, 0.0062832616, 0.00078540771, 0.017703479, 0.023717579, -0.025411692, 0.0033882256, 0.0004235282, 0.0020078753, 0.0026899764, -0.0028821176, 0.00038428235, 4.8035293e-05, 0.006876332, 0.0092123107, -0.0098703329, 0.0013160444, 0.00016450555, -0.030294138, -0.040585449, 0.043484409, -0.0057979212, -0.00072474015, -0.052528067, -0.07037253, 0.07539914, -0.010053219, -0.0012566523, -0.028325566, -0.037948127, 0.040658707, -0.005421161, -0.00067764512, -0.0032126004, -0.0043039623, 0.0046113882, -0.00061485175, -7.6856469e-05, 0.010314498, 0.013818466, -0.014805499, 0.0019740666, 0.00024675832, -0.045441208, -0.060878173, 0.065226614, -0.0086968818, -0.0010871102, -0.078792101, -0.1055588, 0.11309871, -0.015079828, -0.0018849785, -0.042488349, -0.05692219, 0.060988061, -0.0081317415, -0.0010164677, -0.0048189006, -0.0064559434, 0.0069170822, -0.00092227763, -0.0001152847, -0.017878463, -0.023952008, 0.025662866, -0.0034217154, -0.00042771443, 0.07876476, 0.10552217, -0.11305946, 0.015074595, 0.0018843244, 0.13657298, 0.18296858, -0.19603776, 0.026138368, 0.0032672961, 0.073646472, 0.09866513, -0.10571264, 0.014095019, 0.0017618773, 0.0083527611, 0.011190302, -0.011989609, 0.0015986146, 0.00019982682, -0.0042977075, -0.0057576942, 0.0061689581, -0.00082252775, -0.00010281597, 0.018933836, 0.025365905, -0.027177756, 0.0036237008, 0.0004529626, 0.032830042, 0.043982832, -0.047124462, 0.0062832616, 0.00078540771, 0.017703479, 0.023717579, -0.025411692, 0.0033882256, 0.0004235282, 0.0020078753, 0.0026899764, -0.0028821176, 0.00038428235, 4.8035293e-05,
+ 0.00040403462, -0.0017800014, -0.0030864068, -0.0016643335, -0.00018876369, -0.0017800014, 0.0078419149, 0.013597371, 0.007332332, 0.00083161102, -0.0030864068, 0.013597371, 0.023576958, 0.012713787, 0.0014419595, -0.0016643335, 0.007332332, 0.012713787, 0.0068558628, 0.00077757131, -0.00018876369, 0.00083161102, 0.0014419595, 0.00077757131, 8.8189796e-05, -0.0006464554, 0.0028480023, 0.004938251, 0.0026629336, 0.00030202191, 0.0028480023, -0.012547064, -0.021755793, -0.011731731, -0.0013305776, 0.004938251, -0.021755793, -0.037723132, -0.02034206, -0.0023071351, 0.0026629336, -0.011731731, -0.02034206, -0.01096938, -0.0012441141, 0.00030202191, -0.0013305776, -0.0023071351, -0.0012441141, -0.00014110367, -0.0009696831, 0.0042720035, 0.0074073764, 0.0039944004, 0.00045303286, 0.0042720035, -0.018820596, -0.03263369, -0.017597597, -0.0019958664, 0.0074073764, -0.03263369, -0.056584698, -0.030513089, -0.0034607027, 0.0039944004, -0.017597597, -0.030513089, -0.016454071, -0.0018661711, 0.00045303286, -0.0019958664, -0.0034607027, -0.0018661711, -0.00021165551, 0.001680784, -0.007404806, -0.012839452, -0.0069236273, -0.00078525696, -0.007404806, 0.032622366, 0.056565063, 0.030502501, 0.0034595018, -0.012839452, 0.056565063, 0.098080144, 0.052889355, 0.0059985514, -0.0069236273, 0.030502501, 0.052889355, 0.028520389, 0.0032346966, -0.00078525696, 0.0034595018, 0.0059985514, 0.0032346966, 0.00036686955, 0.00040403462, -0.0017800014, -0.0030864068, -0.0016643335, -0.00018876369, -0.0017800014, 0.0078419149, 0.013597371, 0.007332332, 0.00083161102, -0.0030864068, 0.013597371, 0.023576958, 0.012713787, 0.0014419595, -0.0016643335, 0.007332332, 0.012713787, 0.0068558628, 0.00077757131, -0.00018876369, 0.00083161102, 0.0014419595, 0.00077757131, 8.8189796e-05,
+ -0.00011566796, 0.0003084479, 0.00046267186, -0.0027760311, -0.00084052054, 0.00050958292, -0.0013588878, -0.0020383317, 0.01222999, 0.0037029692, 0.00088358367, -0.0023562231, -0.0035343347, 0.021206008, 0.006420708, 0.00047646923, -0.0012705846, -0.0019058769, 0.011435261, 0.0034623431, 5.4039705e-05, -0.00014410588, -0.00021615882, 0.0012969529, 0.00039268852, 0.00018506874, -0.00049351665, -0.00074027497, 0.0044416498, 0.0013448329, -0.00081533267, 0.0021742205, 0.0032613307, -0.019567984, -0.0059247507, -0.0014137339, 0.003769957, 0.0056549355, -0.033929613, -0.010273133, -0.00076235077, 0.0020329354, 0.0030494031, -0.018296418, -0.0055397489, -8.6463528e-05, 0.00023056941, 0.00034585411, -0.0020751247, -0.00062830164, 0.00027760311, -0.00074027497, -0.0011104125, 0.0066624747, 0.0020172493, -0.001222999, 0.0032613307, 0.004891996, -0.029351976, -0.0088871261, -0.0021206008, 0.0056549355, 0.0084824032, -0.050894419, -0.015409699, -0.0011435261, 0.0030494031, 0.0045741046, -0.027444628, -0.0083096233, -0.00012969529, 0.00034585411, 0.00051878117, -0.003112687, -0.00094245245, -0.00048117873, 0.0012831433, 0.0019247149, -0.01154829, -0.0034965654, 0.0021198649, -0.0056529732, -0.0084794598, 0.050876759, 0.015404352, 0.0036757081, -0.0098018882, -0.014702832, 0.088216994, 0.026710145, 0.001982112, -0.005285632, -0.007928448, 0.047570688, 0.014403347, 0.00022480517, -0.00059948046, -0.00089922069, 0.0053953241, 0.0016335843, -0.00011566796, 0.0003084479, 0.00046267186, -0.0027760311, -0.00084052054, 0.00050958292, -0.0013588878, -0.0020383317, 0.01222999, 0.0037029692, 0.00088358367, -0.0023562231, -0.0035343347, 0.021206008, 0.006420708, 0.00047646923, -0.0012705846, -0.0019058769, 0.011435261, 0.0034623431, 5.4039705e-05, -0.00014410588, -0.00021615882, 0.0012969529, 0.00039268852,
+ 4.4178736e-05, -0.00021719873, 0.00018314094, 0.00039198588, -8.8357473e-06, -0.00019463237, 0.00095688348, -0.00080683962, -0.0017269199, 3.8926473e-05, -0.00033747987, 0.0016591738, -0.0013990075, -0.0029943669, 6.7495975e-05, -0.00018198477, 0.00089470333, -0.00075440961, -0.0016147013, 3.6396955e-05, -2.0640165e-05, 0.00010147456, -8.5562866e-05, -0.00018313456, 4.128033e-06, -7.0685978e-05, 0.00034751797, -0.00029302551, -0.00062717741, 1.4137196e-05, 0.00031141178, -0.0015310136, 0.0012909434, 0.0027630718, -6.2282357e-05, 0.0005399678, -0.002654678, 0.002238412, 0.004790987, -0.00010799356, 0.00029117564, -0.0014315253, 0.0012070554, 0.002583522, -5.8235128e-05, 3.3024264e-05, -0.00016235929, 0.00013690059, 0.00029301529, -6.6048528e-06, -0.00010602897, 0.00052127696, -0.00043953826, -0.00094076611, 2.1205793e-05, 0.00046711768, -0.0022965204, 0.0019364151, 0.0041446077, -9.3423535e-05, 0.0008099517, -0.0039820171, 0.0033576179, 0.0071864805, -0.00016199034, 0.00043676346, -0.002147288, 0.0018105831, 0.0038752831, -8.7352692e-05, 4.9536396e-05, -0.00024353894, 0.00020535088, 0.00043952293, -9.9072792e-06, 0.00018378354, -0.00090354673, 0.00076186632, 0.0016306613, -3.6756709e-05, -0.00080967064, 0.0039806353, -0.0033564528, -0.0071839868, 0.00016193413, -0.0014039163, 0.0069021629, -0.0058198711, -0.012456566, 0.00028078325, -0.00075705666, 0.0037219658, -0.003138344, -0.0067171573, 0.00015141133, -8.5863087e-05, 0.00042213416, -0.00035594152, -0.00076183975, 1.7172617e-05, 4.4178736e-05, -0.00021719873, 0.00018314094, 0.00039198588, -8.8357473e-06, -0.00019463237, 0.00095688348, -0.00080683962, -0.0017269199, 3.8926473e-05, -0.00033747987, 0.0016591738, -0.0013990075, -0.0029943669, 6.7495975e-05, -0.00018198477, 0.00089470333, -0.00075440961, -0.0016147013, 3.6396955e-05, -2.0640165e-05, 0.00010147456, -8.5562866e-05, -0.00018313456, 4.128033e-06,
+ -0.00051407984, 0.00082252775, 0.0012337916, -0.0021385721, -0.00051407984, 0.002264813, -0.0036237008, -0.0054355511, 0.009421622, 0.002264813, 0.0039270385, -0.0062832616, -0.0094248925, 0.01633648, 0.0039270385, 0.002117641, -0.0033882256, -0.0050823384, 0.0088093866, 0.002117641, 0.00024017647, -0.00038428235, -0.00057642352, 0.0009991341, 0.00024017647, 0.00082252775, -0.0013160444, -0.0019740666, 0.0034217154, 0.00082252775, -0.0036237008, 0.0057979212, 0.0086968818, -0.015074595, -0.0036237008, -0.0062832616, 0.010053219, 0.015079828, -0.026138368, -0.0062832616, -0.0033882256, 0.005421161, 0.0081317415, -0.014095019, -0.0033882256, -0.00038428235, 0.00061485175, 0.00092227763, -0.0015986146, -0.00038428235, 0.0012337916, -0.0019740666, -0.0029610999, 0.0051325731, 0.0012337916, -0.0054355511, 0.0086968818, 0.013045323, -0.022611893, -0.0054355511, -0.0094248925, 0.015079828, 0.022619742, -0.039207553, -0.0094248925, -0.0050823384, 0.0081317415, 0.012197612, -0.021142528, -0.0050823384, -0.00057642352, 0.00092227763, 0.0013834164, -0.0023979218, -0.00057642352, -0.0021385721, 0.0034217154, 0.0051325731, -0.0088964601, -0.0021385721, 0.009421622, -0.015074595, -0.022611893, 0.039193947, 0.009421622, 0.01633648, -0.026138368, -0.039207553, 0.067959758, 0.01633648, 0.0088093866, -0.014095019, -0.021142528, 0.036647048, 0.0088093866, 0.0009991341, -0.0015986146, -0.0023979218, 0.0041563979, 0.0009991341, -0.00051407984, 0.00082252775, 0.0012337916, -0.0021385721, -0.00051407984, 0.002264813, -0.0036237008, -0.0054355511, 0.009421622, 0.002264813, 0.0039270385, -0.0062832616, -0.0094248925, 0.01633648, 0.0039270385, 0.002117641, -0.0033882256, -0.0050823384, 0.0088093866, 0.002117641, 0.00024017647, -0.00038428235, -0.00057642352, 0.0009991341, 0.00024017647,
+ 0.0012303576, 0.001648326, -0.0017660635, 0.00023547514, 2.9434392e-05, -0.0032809536, -0.0043955359, 0.0047095028, -0.00062793371, -7.8491713e-05, -0.0049214304, -0.0065933039, 0.0070642542, -0.00094190056, -0.00011773757, 0.029528583, 0.039559823, -0.042385525, 0.0056514034, 0.00070642542, 0.0089405986, 0.011977835, -0.012833395, 0.0017111193, 0.00021388992, -0.0019685722, -0.0026373216, 0.0028257017, -0.00037676022, -4.7095028e-05, 0.0052495258, 0.0070328575, -0.0075352045, 0.0010046939, 0.00012558674, 0.0078742887, 0.010549286, -0.011302807, 0.0015070409, 0.00018838011, -0.047245732, -0.063295718, 0.06781684, -0.0090422454, -0.0011302807, -0.014304958, -0.019164537, 0.020533432, -0.002737791, -0.00034222387, -0.0029528583, -0.0039559823, 0.0042385525, -0.00056514034, -7.0642542e-05, 0.0078742887, 0.010549286, -0.011302807, 0.0015070409, 0.00018838011, 0.011811433, 0.015823929, -0.01695421, 0.0022605613, 0.00028257017, -0.070868598, -0.094943576, 0.10172526, -0.013563368, -0.001695421, -0.021457437, -0.028746805, 0.030800148, -0.0041066864, -0.0005133358, 0.0051182876, 0.0068570361, -0.0073468244, 0.00097957658, 0.00012244707, -0.013648767, -0.01828543, 0.019591532, -0.0026122042, -0.00032652553, -0.020473151, -0.027428144, 0.029387297, -0.0039183063, -0.00048978829, 0.1228389, 0.16456887, -0.17632378, 0.023509838, 0.0029387297, 0.03719289, 0.049827795, -0.053386924, 0.0071182565, 0.00088978206, 0.0012303576, 0.001648326, -0.0017660635, 0.00023547514, 2.9434392e-05, -0.0032809536, -0.0043955359, 0.0047095028, -0.00062793371, -7.8491713e-05, -0.0049214304, -0.0065933039, 0.0070642542, -0.00094190056, -0.00011773757, 0.029528583, 0.039559823, -0.042385525, 0.0056514034, 0.00070642542, 0.0089405986, 0.011977835, -0.012833395, 0.0017111193, 0.00021388992,
+ -0.00011566796, 0.00050958292, 0.00088358367, 0.00047646923, 5.4039705e-05, 0.0003084479, -0.0013588878, -0.0023562231, -0.0012705846, -0.00014410588, 0.00046267186, -0.0020383317, -0.0035343347, -0.0019058769, -0.00021615882, -0.0027760311, 0.01222999, 0.021206008, 0.011435261, 0.0012969529, -0.00084052054, 0.0037029692, 0.006420708, 0.0034623431, 0.00039268852, 0.00018506874, -0.00081533267, -0.0014137339, -0.00076235077, -8.6463528e-05, -0.00049351665, 0.0021742205, 0.003769957, 0.0020329354, 0.00023056941, -0.00074027497, 0.0032613307, 0.0056549355, 0.0030494031, 0.00034585411, 0.0044416498, -0.019567984, -0.033929613, -0.018296418, -0.0020751247, 0.0013448329, -0.0059247507, -0.010273133, -0.0055397489, -0.00062830164, 0.00027760311, -0.001222999, -0.0021206008, -0.0011435261, -0.00012969529, -0.00074027497, 0.0032613307, 0.0056549355, 0.0030494031, 0.00034585411, -0.0011104125, 0.004891996, 0.0084824032, 0.0045741046, 0.00051878117, 0.0066624747, -0.029351976, -0.050894419, -0.027444628, -0.003112687, 0.0020172493, -0.0088871261, -0.015409699, -0.0083096233, -0.00094245245, -0.00048117873, 0.0021198649, 0.0036757081, 0.001982112, 0.00022480517, 0.0012831433, -0.0056529732, -0.0098018882, -0.005285632, -0.00059948046, 0.0019247149, -0.0084794598, -0.014702832, -0.007928448, -0.00089922069, -0.01154829, 0.050876759, 0.088216994, 0.047570688, 0.0053953241, -0.0034965654, 0.015404352, 0.026710145, 0.014403347, 0.0016335843, -0.00011566796, 0.00050958292, 0.00088358367, 0.00047646923, 5.4039705e-05, 0.0003084479, -0.0013588878, -0.0023562231, -0.0012705846, -0.00014410588, 0.00046267186, -0.0020383317, -0.0035343347, -0.0019058769, -0.00021615882, -0.0027760311, 0.01222999, 0.021206008, 0.011435261, 0.0012969529, -0.00084052054, 0.0037029692, 0.006420708, 0.0034623431, 0.00039268852,
+ 3.3113692e-05, -8.8303177e-05, -0.00013245477, 0.0007947286, 0.00024062616, -8.8303177e-05, 0.00023547514, 0.00035321271, -0.0021192763, -0.00064166976, -0.00013245477, 0.00035321271, 0.00052981906, -0.0031789144, -0.00096250463, 0.0007947286, -0.0021192763, -0.0031789144, 0.019073486, 0.0057750278, 0.00024062616, -0.00064166976, -0.00096250463, 0.0057750278, 0.0017485501, -5.2981906e-05, 0.00014128508, 0.00021192763, -0.0012715658, -0.00038500185, 0.00014128508, -0.00037676022, -0.00056514034, 0.003390842, 0.0010266716, 0.00021192763, -0.00056514034, -0.0008477105, 0.005086263, 0.0015400074, -0.0012715658, 0.003390842, 0.005086263, -0.030517578, -0.0092400445, -0.00038500185, 0.0010266716, 0.0015400074, -0.0092400445, -0.0027976801, -7.947286e-05, 0.00021192763, 0.00031789144, -0.0019073486, -0.00057750278, 0.00021192763, -0.00056514034, -0.0008477105, 0.005086263, 0.0015400074, 0.00031789144, -0.0008477105, -0.0012715658, 0.0076293945, 0.0023100111, -0.0019073486, 0.005086263, 0.0076293945, -0.045776367, -0.013860067, -0.00057750278, 0.0015400074, 0.0023100111, -0.013860067, -0.0041965202, 0.00013775296, -0.00036734122, -0.00055101183, 0.003306071, 0.0010010048, -0.00036734122, 0.00097957658, 0.0014693649, -0.0088161892, -0.0026693462, -0.00055101183, 0.0014693649, 0.0022040473, -0.013224284, -0.0040040193, 0.003306071, -0.0088161892, -0.013224284, 0.079345703, 0.024024116, 0.0010010048, -0.0026693462, -0.0040040193, 0.024024116, 0.0072739684, 3.3113692e-05, -8.8303177e-05, -0.00013245477, 0.0007947286, 0.00024062616, -8.8303177e-05, 0.00023547514, 0.00035321271, -0.0021192763, -0.00064166976, -0.00013245477, 0.00035321271, 0.00052981906, -0.0031789144, -0.00096250463, 0.0007947286, -0.0021192763, -0.0031789144, 0.019073486, 0.0057750278, 0.00024062616, -0.00064166976, -0.00096250463, 0.0057750278, 0.0017485501,
+ -1.2647591e-05, 6.2180154e-05, -5.2430012e-05, -0.00011221862, 2.5295181e-06, 3.3726908e-05, -0.00016581374, 0.00013981336, 0.00029924966, -6.7453816e-06, 5.0590362e-05, -0.00024872062, 0.00020972005, 0.00044887449, -1.0118072e-05, -0.00030354217, 0.0014923237, -0.0012583203, -0.0026932469, 6.0708434e-05, -9.1905824e-05, 0.00045184245, -0.00038099142, -0.00081545532, 1.8381165e-05, 2.0236145e-05, -9.9488247e-05, 8.3888019e-05, 0.00017954979, -4.047229e-06, -5.3963053e-05, 0.00026530199, -0.00022370138, -0.00047879945, 1.0792611e-05, -8.0944579e-05, 0.00039795299, -0.00033555207, -0.00071819918, 1.6188916e-05, 0.00048566748, -0.0023877179, 0.0020133124, 0.0043091951, -9.7133495e-05, 0.00014704932, -0.00072294793, 0.00060958627, 0.0013047285, -2.9409864e-05, 3.0354217e-05, -0.00014923237, 0.00012583203, 0.00026932469, -6.0708434e-06, -8.0944579e-05, 0.00039795299, -0.00033555207, -0.00071819918, 1.6188916e-05, -0.00012141687, 0.00059692948, -0.00050332811, -0.0010772988, 2.4283374e-05, 0.00072850121, -0.0035815769, 0.0030199687, 0.0064637926, -0.00014570024, 0.00022057398, -0.0010844219, 0.0009143794, 0.0019570928, -4.4114796e-05, -5.2613977e-05, 0.00025866944, -0.00021810885, -0.00046682946, 1.0522795e-05, 0.00014030394, -0.00068978518, 0.0005816236, 0.0012448786, -2.8060787e-05, 0.00021045591, -0.0010346778, 0.00087243539, 0.0018673179, -4.2091181e-05, -0.0012627354, 0.0062080666, -0.0052346124, -0.011203907, 0.00025254709, -0.00038232823, 0.0018796646, -0.0015849243, -0.0033922941, 7.6465646e-05, -1.2647591e-05, 6.2180154e-05, -5.2430012e-05, -0.00011221862, 2.5295181e-06, 3.3726908e-05, -0.00016581374, 0.00013981336, 0.00029924966, -6.7453816e-06, 5.0590362e-05, -0.00024872062, 0.00020972005, 0.00044887449, -1.0118072e-05, -0.00030354217, 0.0014923237, -0.0012583203, -0.0026932469, 6.0708434e-05, -9.1905824e-05, 0.00045184245, -0.00038099142, -0.00081545532, 1.8381165e-05,
+ 0.00014717196, -0.00023547514, -0.00035321271, 0.00061223536, 0.00014717196, -0.00039245857, 0.00062793371, 0.00094190056, -0.0016326276, -0.00039245857, -0.00058868785, 0.00094190056, 0.0014128508, -0.0024489415, -0.00058868785, 0.0035321271, -0.0056514034, -0.008477105, 0.014693649, 0.0035321271, 0.0010694496, -0.0017111193, -0.002566679, 0.0044489103, 0.0010694496, -0.00023547514, 0.00037676022, 0.00056514034, -0.00097957658, -0.00023547514, 0.00062793371, -0.0010046939, -0.0015070409, 0.0026122042, 0.00062793371, 0.00094190056, -0.0015070409, -0.0022605613, 0.0039183063, 0.00094190056, -0.0056514034, 0.0090422454, 0.013563368, -0.023509838, -0.0056514034, -0.0017111193, 0.002737791, 0.0041066864, -0.0071182565, -0.0017111193, -0.00035321271, 0.00056514034, 0.0008477105, -0.0014693649, -0.00035321271, 0.00094190056, -0.0015070409, -0.0022605613, 0.0039183063, 0.00094190056, 0.0014128508, -0.0022605613, -0.003390842, 0.0058774595, 0.0014128508, -0.008477105, 0.013563368, 0.020345052, -0.035264757, -0.008477105, -0.002566679, 0.0041066864, 0.0061600297, -0.010677385, -0.002566679, 0.00061223536, -0.00097957658, -0.0014693649, 0.0025468991, 0.00061223536, -0.0016326276, 0.0026122042, 0.0039183063, -0.006791731, -0.0016326276, -0.0024489415, 0.0039183063, 0.0058774595, -0.010187596, -0.0024489415, 0.014693649, -0.023509838, -0.035264757, 0.061125579, 0.014693649, 0.0044489103, -0.0071182565, -0.010677385, 0.018507467, 0.0044489103, 0.00014717196, -0.00023547514, -0.00035321271, 0.00061223536, 0.00014717196, -0.00039245857, 0.00062793371, 0.00094190056, -0.0016326276, -0.00039245857, -0.00058868785, 0.00094190056, 0.0014128508, -0.0024489415, -0.00058868785, 0.0035321271, -0.0056514034, -0.008477105, 0.014693649, 0.0035321271, 0.0010694496, -0.0017111193, -0.002566679, 0.0044489103, 0.0010694496,
+ -0.00046992825, -0.00062956895, 0.00067453816, -8.9938421e-05, -1.1242303e-05, 0.0023103382, 0.0030951899, -0.0033162749, 0.00044216998, 5.5271248e-05, -0.0019480662, -0.0026098495, 0.0027962673, -0.00037283564, -4.6604455e-05, -0.0041695452, -0.0055859936, 0.0059849931, -0.00079799909, -9.9749886e-05, 9.398565e-05, 0.00012591379, -0.00013490763, 1.7987684e-05, 2.2484605e-06, 0.0007518852, 0.0010073103, -0.0010792611, 0.00014390147, 1.7987684e-05, -0.0036965411, -0.0049523038, 0.0053060398, -0.00070747198, -8.8433997e-05, 0.0031169059, 0.0041757591, -0.0044740277, 0.00059653702, 7.4567128e-05, 0.0066712724, 0.0089375898, -0.009575989, 0.0012767985, 0.00015959982, -0.00015037704, -0.00020146206, 0.00021585221, -2.8780295e-05, -3.5975369e-06, 0.0011278278, 0.0015109655, -0.0016188916, 0.00021585221, 2.6981526e-05, -0.0055448116, -0.0074284557, 0.0079590597, -0.001061208, -0.000132651, 0.0046753589, 0.0062636387, -0.0067110415, 0.00089480553, 0.00011185069, 0.010006909, 0.013406385, -0.014363984, 0.0019151978, 0.00023939973, -0.00022556556, -0.0003021931, 0.00032377832, -4.3170442e-05, -5.3963053e-06, -0.0019549015, -0.0026190068, 0.0028060787, -0.00037414383, -4.6767979e-05, 0.0096110068, 0.01287599, -0.013795704, 0.0018394271, 0.00022992839, -0.0081039554, -0.010856974, 0.011632472, -0.0015509963, -0.00019387453, -0.017345308, -0.023237733, 0.024897571, -0.0033196762, -0.00041495952, 0.00039098031, 0.00052380137, -0.00056121575, 7.4828767e-05, 9.3535958e-06, -0.00046992825, -0.00062956895, 0.00067453816, -8.9938421e-05, -1.1242303e-05, 0.0023103382, 0.0030951899, -0.0033162749, 0.00044216998, 5.5271248e-05, -0.0019480662, -0.0026098495, 0.0027962673, -0.00037283564, -4.6604455e-05, -0.0041695452, -0.0055859936, 0.0059849931, -0.00079799909, -9.9749886e-05, 9.398565e-05, 0.00012591379, -0.00013490763, 1.7987684e-05, 2.2484605e-06,
+ 4.4178736e-05, -0.00019463237, -0.00033747987, -0.00018198477, -2.0640165e-05, -0.00021719873, 0.00095688348, 0.0016591738, 0.00089470333, 0.00010147456, 0.00018314094, -0.00080683962, -0.0013990075, -0.00075440961, -8.5562866e-05, 0.00039198588, -0.0017269199, -0.0029943669, -0.0016147013, -0.00018313456, -8.8357473e-06, 3.8926473e-05, 6.7495975e-05, 3.6396955e-05, 4.128033e-06, -7.0685978e-05, 0.00031141178, 0.0005399678, 0.00029117564, 3.3024264e-05, 0.00034751797, -0.0015310136, -0.002654678, -0.0014315253, -0.00016235929, -0.00029302551, 0.0012909434, 0.002238412, 0.0012070554, 0.00013690059, -0.00062717741, 0.0027630718, 0.004790987, 0.002583522, 0.00029301529, 1.4137196e-05, -6.2282357e-05, -0.00010799356, -5.8235128e-05, -6.6048528e-06, -0.00010602897, 0.00046711768, 0.0008099517, 0.00043676346, 4.9536396e-05, 0.00052127696, -0.0022965204, -0.0039820171, -0.002147288, -0.00024353894, -0.00043953826, 0.0019364151, 0.0033576179, 0.0018105831, 0.00020535088, -0.00094076611, 0.0041446077, 0.0071864805, 0.0038752831, 0.00043952293, 2.1205793e-05, -9.3423535e-05, -0.00016199034, -8.7352692e-05, -9.9072792e-06, 0.00018378354, -0.00080967064, -0.0014039163, -0.00075705666, -8.5863087e-05, -0.00090354673, 0.0039806353, 0.0069021629, 0.0037219658, 0.00042213416, 0.00076186632, -0.0033564528, -0.0058198711, -0.003138344, -0.00035594152, 0.0016306613, -0.0071839868, -0.012456566, -0.0067171573, -0.00076183975, -3.6756709e-05, 0.00016193413, 0.00028078325, 0.00015141133, 1.7172617e-05, 4.4178736e-05, -0.00019463237, -0.00033747987, -0.00018198477, -2.0640165e-05, -0.00021719873, 0.00095688348, 0.0016591738, 0.00089470333, 0.00010147456, 0.00018314094, -0.00080683962, -0.0013990075, -0.00075440961, -8.5562866e-05, 0.00039198588, -0.0017269199, -0.0029943669, -0.0016147013, -0.00018313456, -8.8357473e-06, 3.8926473e-05, 6.7495975e-05, 3.6396955e-05, 4.128033e-06,
+ -1.2647591e-05, 3.3726908e-05, 5.0590362e-05, -0.00030354217, -9.1905824e-05, 6.2180154e-05, -0.00016581374, -0.00024872062, 0.0014923237, 0.00045184245, -5.2430012e-05, 0.00013981336, 0.00020972005, -0.0012583203, -0.00038099142, -0.00011221862, 0.00029924966, 0.00044887449, -0.0026932469, -0.00081545532, 2.5295181e-06, -6.7453816e-06, -1.0118072e-05, 6.0708434e-05, 1.8381165e-05, 2.0236145e-05, -5.3963053e-05, -8.0944579e-05, 0.00048566748, 0.00014704932, -9.9488247e-05, 0.00026530199, 0.00039795299, -0.0023877179, -0.00072294793, 8.3888019e-05, -0.00022370138, -0.00033555207, 0.0020133124, 0.00060958627, 0.00017954979, -0.00047879945, -0.00071819918, 0.0043091951, 0.0013047285, -4.047229e-06, 1.0792611e-05, 1.6188916e-05, -9.7133495e-05, -2.9409864e-05, 3.0354217e-05, -8.0944579e-05, -0.00012141687, 0.00072850121, 0.00022057398, -0.00014923237, 0.00039795299, 0.00059692948, -0.0035815769, -0.0010844219, 0.00012583203, -0.00033555207, -0.00050332811, 0.0030199687, 0.0009143794, 0.00026932469, -0.00071819918, -0.0010772988, 0.0064637926, 0.0019570928, -6.0708434e-06, 1.6188916e-05, 2.4283374e-05, -0.00014570024, -4.4114796e-05, -5.2613977e-05, 0.00014030394, 0.00021045591, -0.0012627354, -0.00038232823, 0.00025866944, -0.00068978518, -0.0010346778, 0.0062080666, 0.0018796646, -0.00021810885, 0.0005816236, 0.00087243539, -0.0052346124, -0.0015849243, -0.00046682946, 0.0012448786, 0.0018673179, -0.011203907, -0.0033922941, 1.0522795e-05, -2.8060787e-05, -4.2091181e-05, 0.00025254709, 7.6465646e-05, -1.2647591e-05, 3.3726908e-05, 5.0590362e-05, -0.00030354217, -9.1905824e-05, 6.2180154e-05, -0.00016581374, -0.00024872062, 0.0014923237, 0.00045184245, -5.2430012e-05, 0.00013981336, 0.00020972005, -0.0012583203, -0.00038099142, -0.00011221862, 0.00029924966, 0.00044887449, -0.0026932469, -0.00081545532, 2.5295181e-06, -6.7453816e-06, -1.0118072e-05, 6.0708434e-05, 1.8381165e-05,
+ 4.8306769e-06, -2.3749364e-05, 2.0025352e-05, 4.2861279e-05, -9.6613539e-07, -2.3749364e-05, 0.00011676051, -9.8451911e-05, -0.00021072163, 4.7498729e-06, 2.0025352e-05, -9.8451911e-05, 8.3014185e-05, 0.00017767948, -4.0050703e-06, 4.2861279e-05, -0.00021072163, 0.00017767948, 0.00038029644, -8.5722558e-06, -9.6613539e-07, 4.7498729e-06, -4.0050703e-06, -8.5722558e-06, 1.9322708e-07, -7.7290831e-06, 3.7998983e-05, -3.2040563e-05, -6.8578046e-05, 1.5458166e-06, 3.7998983e-05, -0.00018681682, 0.00015752306, 0.00033715461, -7.5997966e-06, -3.2040563e-05, 0.00015752306, -0.0001328227, -0.00028428717, 6.4081125e-06, -6.8578046e-05, 0.00033715461, -0.00028428717, -0.0006084743, 1.3715609e-05, 1.5458166e-06, -7.5997966e-06, 6.4081125e-06, 1.3715609e-05, -3.0916332e-07, -1.1593625e-05, 5.6998475e-05, -4.8060844e-05, -0.00010286707, 2.3187249e-06, 5.6998475e-05, -0.00028022523, 0.00023628459, 0.00050573192, -1.1399695e-05, -4.8060844e-05, 0.00023628459, -0.00019923404, -0.00042643076, 9.6121688e-06, -0.00010286707, 0.00050573192, -0.00042643076, -0.00091271145, 2.0573414e-05, 2.3187249e-06, -1.1399695e-05, 9.6121688e-06, 2.0573414e-05, -4.6374499e-07, 2.0095616e-05, -9.8797356e-05, 8.3305463e-05, 0.00017830292, -4.0191232e-06, -9.8797356e-05, 0.00048572373, -0.00040955995, -0.00087660199, 1.9759471e-05, 8.3305463e-05, -0.00040955995, 0.00034533901, 0.00073914665, -1.6661093e-05, 0.00017830292, -0.00087660199, 0.00073914665, 0.0015820332, -3.5660584e-05, -4.0191232e-06, 1.9759471e-05, -1.6661093e-05, -3.5660584e-05, 8.0382464e-07, 4.8306769e-06, -2.3749364e-05, 2.0025352e-05, 4.2861279e-05, -9.6613539e-07, -2.3749364e-05, 0.00011676051, -9.8451911e-05, -0.00021072163, 4.7498729e-06, 2.0025352e-05, -9.8451911e-05, 8.3014185e-05, 0.00017767948, -4.0050703e-06, 4.2861279e-05, -0.00021072163, 0.00017767948, 0.00038029644, -8.5722558e-06, -9.6613539e-07, 4.7498729e-06, -4.0050703e-06, -8.5722558e-06, 1.9322708e-07,
+ -5.6211513e-05, 8.9938421e-05, 0.00013490763, -0.0002338399, -5.6211513e-05, 0.00027635624, -0.00044216998, -0.00066325498, 0.001149642, 0.00027635624, -0.00023302227, 0.00037283564, 0.00055925346, -0.00096937266, -0.00023302227, -0.00049874943, 0.00079799909, 0.0011969986, -0.0020747976, -0.00049874943, 1.1242303e-05, -1.7987684e-05, -2.6981526e-05, 4.6767979e-05, 1.1242303e-05, 8.9938421e-05, -0.00014390147, -0.00021585221, 0.00037414383, 8.9938421e-05, -0.00044216998, 0.00070747198, 0.001061208, -0.0018394271, -0.00044216998, 0.00037283564, -0.00059653702, -0.00089480553, 0.0015509963, 0.00037283564, 0.00079799909, -0.0012767985, -0.0019151978, 0.0033196762, 0.00079799909, -1.7987684e-05, 2.8780295e-05, 4.3170442e-05, -7.4828767e-05, -1.7987684e-05, 0.00013490763, -0.00021585221, -0.00032377832, 0.00056121575, 0.00013490763, -0.00066325498, 0.001061208, 0.0015918119, -0.0027591407, -0.00066325498, 0.00055925346, -0.00089480553, -0.0013422083, 0.0023264944, 0.00055925346, 0.0011969986, -0.0019151978, -0.0028727967, 0.0049795143, 0.0011969986, -2.6981526e-05, 4.3170442e-05, 6.4755663e-05, -0.00011224315, -2.6981526e-05, -0.0002338399, 0.00037414383, 0.00056121575, -0.00097277397, -0.0002338399, 0.001149642, -0.0018394271, -0.0027591407, 0.0047825106, 0.001149642, -0.00096937266, 0.0015509963, 0.0023264944, -0.0040325903, -0.00096937266, -0.0020747976, 0.0033196762, 0.0049795143, -0.0086311581, -0.0020747976, 4.6767979e-05, -7.4828767e-05, -0.00011224315, 0.00019455479, 4.6767979e-05, -5.6211513e-05, 8.9938421e-05, 0.00013490763, -0.0002338399, -5.6211513e-05, 0.00027635624, -0.00044216998, -0.00066325498, 0.001149642, 0.00027635624, -0.00023302227, 0.00037283564, 0.00055925346, -0.00096937266, -0.00023302227, -0.00049874943, 0.00079799909, 0.0011969986, -0.0020747976, -0.00049874943, 1.1242303e-05, -1.7987684e-05, -2.6981526e-05, 4.6767979e-05, 1.1242303e-05,
+ 0.005468256, 0.0073258932, -0.0078491713, 0.0010465562, 0.00013081952, -0.0087492096, -0.011721429, 0.012558674, -0.0016744899, -0.00020931124, -0.013123814, -0.017582144, 0.018838011, -0.0025117348, -0.00031396685, 0.022747945, 0.030475716, -0.032652553, 0.0043536737, 0.00054420921, 0.005468256, 0.0073258932, -0.0078491713, 0.0010465562, 0.00013081952, -0.0087492096, -0.011721429, 0.012558674, -0.0016744899, -0.00020931124, 0.013998735, 0.018754287, -0.020093879, 0.0026791838, 0.00033489798, 0.020998103, 0.02813143, -0.030140818, 0.0040187757, 0.00050234697, -0.036396712, -0.048761145, 0.052244084, -0.0069658779, -0.00087073474, -0.0087492096, -0.011721429, 0.012558674, -0.0016744899, -0.00020931124, -0.013123814, -0.017582144, 0.018838011, -0.0025117348, -0.00031396685, 0.020998103, 0.02813143, -0.030140818, 0.0040187757, 0.00050234697, 0.031497155, 0.042197145, -0.045211227, 0.0060281636, 0.00075352045, -0.054595068, -0.073141718, 0.078366127, -0.010448817, -0.0013061021, -0.013123814, -0.017582144, 0.018838011, -0.0025117348, -0.00031396685, 0.022747945, 0.030475716, -0.032652553, 0.0043536737, 0.00054420921, -0.036396712, -0.048761145, 0.052244084, -0.0069658779, -0.00087073474, -0.054595068, -0.073141718, 0.078366127, -0.010448817, -0.0013061021, 0.094631451, 0.12677898, -0.13583462, 0.018111283, 0.0022639103, 0.022747945, 0.030475716, -0.032652553, 0.0043536737, 0.00054420921, 0.005468256, 0.0073258932, -0.0078491713, 0.0010465562, 0.00013081952, -0.0087492096, -0.011721429, 0.012558674, -0.0016744899, -0.00020931124, -0.013123814, -0.017582144, 0.018838011, -0.0025117348, -0.00031396685, 0.022747945, 0.030475716, -0.032652553, 0.0043536737, 0.00054420921, 0.005468256, 0.0073258932, -0.0078491713, 0.0010465562, 0.00013081952,
+ -0.00051407984, 0.002264813, 0.0039270385, 0.002117641, 0.00024017647, 0.00082252775, -0.0036237008, -0.0062832616, -0.0033882256, -0.00038428235, 0.0012337916, -0.0054355511, -0.0094248925, -0.0050823384, -0.00057642352, -0.0021385721, 0.009421622, 0.01633648, 0.0088093866, 0.0009991341, -0.00051407984, 0.002264813, 0.0039270385, 0.002117641, 0.00024017647, 0.00082252775, -0.0036237008, -0.0062832616, -0.0033882256, -0.00038428235, -0.0013160444, 0.0057979212, 0.010053219, 0.005421161, 0.00061485175, -0.0019740666, 0.0086968818, 0.015079828, 0.0081317415, 0.00092227763, 0.0034217154, -0.015074595, -0.026138368, -0.014095019, -0.0015986146, 0.00082252775, -0.0036237008, -0.0062832616, -0.0033882256, -0.00038428235, 0.0012337916, -0.0054355511, -0.0094248925, -0.0050823384, -0.00057642352, -0.0019740666, 0.0086968818, 0.015079828, 0.0081317415, 0.00092227763, -0.0029610999, 0.013045323, 0.022619742, 0.012197612, 0.0013834164, 0.0051325731, -0.022611893, -0.039207553, -0.021142528, -0.0023979218, 0.0012337916, -0.0054355511, -0.0094248925, -0.0050823384, -0.00057642352, -0.0021385721, 0.009421622, 0.01633648, 0.0088093866, 0.0009991341, 0.0034217154, -0.015074595, -0.026138368, -0.014095019, -0.0015986146, 0.0051325731, -0.022611893, -0.039207553, -0.021142528, -0.0023979218, -0.0088964601, 0.039193947, 0.067959758, 0.036647048, 0.0041563979, -0.0021385721, 0.009421622, 0.01633648, 0.0088093866, 0.0009991341, -0.00051407984, 0.002264813, 0.0039270385, 0.002117641, 0.00024017647, 0.00082252775, -0.0036237008, -0.0062832616, -0.0033882256, -0.00038428235, 0.0012337916, -0.0054355511, -0.0094248925, -0.0050823384, -0.00057642352, -0.0021385721, 0.009421622, 0.01633648, 0.0088093866, 0.0009991341, -0.00051407984, 0.002264813, 0.0039270385, 0.002117641, 0.00024017647,
+ 0.00014717196, -0.00039245857, -0.00058868785, 0.0035321271, 0.0010694496, -0.00023547514, 0.00062793371, 0.00094190056, -0.0056514034, -0.0017111193, -0.00035321271, 0.00094190056, 0.0014128508, -0.008477105, -0.002566679, 0.00061223536, -0.0016326276, -0.0024489415, 0.014693649, 0.0044489103, 0.00014717196, -0.00039245857, -0.00058868785, 0.0035321271, 0.0010694496, -0.00023547514, 0.00062793371, 0.00094190056, -0.0056514034, -0.0017111193, 0.00037676022, -0.0010046939, -0.0015070409, 0.0090422454, 0.002737791, 0.00056514034, -0.0015070409, -0.0022605613, 0.013563368, 0.0041066864, -0.00097957658, 0.0026122042, 0.0039183063, -0.023509838, -0.0071182565, -0.00023547514, 0.00062793371, 0.00094190056, -0.0056514034, -0.0017111193, -0.00035321271, 0.00094190056, 0.0014128508, -0.008477105, -0.002566679, 0.00056514034, -0.0015070409, -0.0022605613, 0.013563368, 0.0041066864, 0.0008477105, -0.0022605613, -0.003390842, 0.020345052, 0.0061600297, -0.0014693649, 0.0039183063, 0.0058774595, -0.035264757, -0.010677385, -0.00035321271, 0.00094190056, 0.0014128508, -0.008477105, -0.002566679, 0.00061223536, -0.0016326276, -0.0024489415, 0.014693649, 0.0044489103, -0.00097957658, 0.0026122042, 0.0039183063, -0.023509838, -0.0071182565, -0.0014693649, 0.0039183063, 0.0058774595, -0.035264757, -0.010677385, 0.0025468991, -0.006791731, -0.010187596, 0.061125579, 0.018507467, 0.00061223536, -0.0016326276, -0.0024489415, 0.014693649, 0.0044489103, 0.00014717196, -0.00039245857, -0.00058868785, 0.0035321271, 0.0010694496, -0.00023547514, 0.00062793371, 0.00094190056, -0.0056514034, -0.0017111193, -0.00035321271, 0.00094190056, 0.0014128508, -0.008477105, -0.002566679, 0.00061223536, -0.0016326276, -0.0024489415, 0.014693649, 0.0044489103, 0.00014717196, -0.00039245857, -0.00058868785, 0.0035321271, 0.0010694496,
+ -5.6211513e-05, 0.00027635624, -0.00023302227, -0.00049874943, 1.1242303e-05, 8.9938421e-05, -0.00044216998, 0.00037283564, 0.00079799909, -1.7987684e-05, 0.00013490763, -0.00066325498, 0.00055925346, 0.0011969986, -2.6981526e-05, -0.0002338399, 0.001149642, -0.00096937266, -0.0020747976, 4.6767979e-05, -5.6211513e-05, 0.00027635624, -0.00023302227, -0.00049874943, 1.1242303e-05, 8.9938421e-05, -0.00044216998, 0.00037283564, 0.00079799909, -1.7987684e-05, -0.00014390147, 0.00070747198, -0.00059653702, -0.0012767985, 2.8780295e-05, -0.00021585221, 0.001061208, -0.00089480553, -0.0019151978, 4.3170442e-05, 0.00037414383, -0.0018394271, 0.0015509963, 0.0033196762, -7.4828767e-05, 8.9938421e-05, -0.00044216998, 0.00037283564, 0.00079799909, -1.7987684e-05, 0.00013490763, -0.00066325498, 0.00055925346, 0.0011969986, -2.6981526e-05, -0.00021585221, 0.001061208, -0.00089480553, -0.0019151978, 4.3170442e-05, -0.00032377832, 0.0015918119, -0.0013422083, -0.0028727967, 6.4755663e-05, 0.00056121575, -0.0027591407, 0.0023264944, 0.0049795143, -0.00011224315, 0.00013490763, -0.00066325498, 0.00055925346, 0.0011969986, -2.6981526e-05, -0.0002338399, 0.001149642, -0.00096937266, -0.0020747976, 4.6767979e-05, 0.00037414383, -0.0018394271, 0.0015509963, 0.0033196762, -7.4828767e-05, 0.00056121575, -0.0027591407, 0.0023264944, 0.0049795143, -0.00011224315, -0.00097277397, 0.0047825106, -0.0040325903, -0.0086311581, 0.00019455479, -0.0002338399, 0.001149642, -0.00096937266, -0.0020747976, 4.6767979e-05, -5.6211513e-05, 0.00027635624, -0.00023302227, -0.00049874943, 1.1242303e-05, 8.9938421e-05, -0.00044216998, 0.00037283564, 0.00079799909, -1.7987684e-05, 0.00013490763, -0.00066325498, 0.00055925346, 0.0011969986, -2.6981526e-05, -0.0002338399, 0.001149642, -0.00096937266, -0.0020747976, 4.6767979e-05, -5.6211513e-05, 0.00027635624, -0.00023302227, -0.00049874943, 1.1242303e-05,
+ 0.00065409761, -0.0010465562, -0.0015698343, 0.0027210461, 0.00065409761, -0.0010465562, 0.0016744899, 0.0025117348, -0.0043536737, -0.0010465562, -0.0015698343, 0.0025117348, 0.0037676022, -0.0065305105, -0.0015698343, 0.0027210461, -0.0043536737, -0.0065305105, 0.011319552, 0.0027210461, 0.00065409761, -0.0010465562, -0.0015698343, 0.0027210461, 0.00065409761, -0.0010465562, 0.0016744899, 0.0025117348, -0.0043536737, -0.0010465562, 0.0016744899, -0.0026791838, -0.0040187757, 0.0069658779, 0.0016744899, 0.0025117348, -0.0040187757, -0.0060281636, 0.010448817, 0.0025117348, -0.0043536737, 0.0069658779, 0.010448817, -0.018111283, -0.0043536737, -0.0010465562, 0.0016744899, 0.0025117348, -0.0043536737, -0.0010465562, -0.0015698343, 0.0025117348, 0.0037676022, -0.0065305105, -0.0015698343, 0.0025117348, -0.0040187757, -0.0060281636, 0.010448817, 0.0025117348, 0.0037676022, -0.0060281636, -0.0090422454, 0.015673225, 0.0037676022, -0.0065305105, 0.010448817, 0.015673225, -0.027166924, -0.0065305105, -0.0015698343, 0.0025117348, 0.0037676022, -0.0065305105, -0.0015698343, 0.0027210461, -0.0043536737, -0.0065305105, 0.011319552, 0.0027210461, -0.0043536737, 0.0069658779, 0.010448817, -0.018111283, -0.0043536737, -0.0065305105, 0.010448817, 0.015673225, -0.027166924, -0.0065305105, 0.011319552, -0.018111283, -0.027166924, 0.047089335, 0.011319552, 0.0027210461, -0.0043536737, -0.0065305105, 0.011319552, 0.0027210461, 0.00065409761, -0.0010465562, -0.0015698343, 0.0027210461, 0.00065409761, -0.0010465562, 0.0016744899, 0.0025117348, -0.0043536737, -0.0010465562, -0.0015698343, 0.0025117348, 0.0037676022, -0.0065305105, -0.0015698343, 0.0027210461, -0.0043536737, -0.0065305105, 0.011319552, 0.0027210461, 0.00065409761, -0.0010465562, -0.0015698343, 0.0027210461, 0.00065409761,
+};
+
+
+static double * projection_matrices[] =
+{
+  dgq0_refined_onto_dgq0,
+  dgq1_refined_onto_dgq1,
+  dgq2_refined_onto_dgq2,
+  dgq3_refined_onto_dgq3,
+  dgq4_refined_onto_dgq4,
+  0,0,0,0,0,0,0
+};
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c6c848b5b541defa0b0fba4e4bcd3ec1f0339473 100644 (file)
@@ -0,0 +1,114 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+// Transfer matrices for finite elements
+
+static double q1_into_q1_refined_0[] =
+{
+  1., 0.,
+  13.5/27., 13.5/27.,
+};
+
+static double q1_into_q1_refined_1[] =
+{
+ 13.5/27., 13.5/27.,
+ 0., 1.,
+};
+
+static double q2_into_q2_refined_0[] =
+{
+  1., 0., 0.,
+  0., 0., 1.,
+ 10.125/27., -3.375/27., 20.25/27.,
+};
+
+static double q2_into_q2_refined_1[] =
+{
+ 0., 0., 1.,
+ 0., 1., 0.,
+ -3.375/27., 10.125/27., 20.25/27.,
+};
+
+static double q3_into_q3_refined_0[] =
+{
+ 1., 0., 0., 0.,
+ -1.6875/27., -1.6875/27., 15.1875/27., 15.1875/27.,
+ 8.4375/27., 1.6875/27., 25.3125/27., -8.4375/27.,
+ 0., 0., 1., 0.
+};
+
+static double q3_into_q3_refined_1[] =
+{
+ -1.6875/27., -1.6875/27., 15.1875/27., 15.1875/27.,
+ 0., 1., 0., 0.,
+ 0., 0., 0., 1.,
+ 1.6875/27., 8.4375/27., -8.4375/27., 25.3125/27.,
+};
+
+static double q4_into_q4_refined_0[] =
+{
+  1., 0., 0., 0., 0.,
+  0., 0., 0., 1., 0.,
+ 7.3828125/27., -1.0546875/27., 29.53125/27., -14.765625/27., 5.90625/27.,
+  0., 0., 1., 0., 0.,
+ -1.0546875/27., 0.6328125/27., 12.65625/27., 18.984375/27., -4.21875/27.,
+};
+
+static double q4_into_q4_refined_1[] =
+{
+  0., 0., 0., 1., 0.,
+  0., 1., 0., 0., 0.,
+  0.6328125/27., -1.0546875/27., -4.21875/27., 18.984375/27., 12.65625/27.,
+  0., 0., 0., 0., 1.,
+ -1.0546875/27., 7.3828125/27., 5.90625/27., -14.765625/27., 29.53125/27.,
+};
+
+static double * embedding0[] =
+{
+  q1_into_q1_refined_0,
+  q2_into_q2_refined_0,
+  q3_into_q3_refined_0,
+  q4_into_q4_refined_0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding1[] =
+{
+  q1_into_q1_refined_1,
+  q2_into_q2_refined_1,
+  q3_into_q3_refined_1,
+  q4_into_q4_refined_1,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double** embedding2;
+static double** embedding3;
+static double** embedding4;
+static double** embedding5;
+static double** embedding6;
+static double** embedding7;
+
+// No constrants in 1d
+
+static double ** constraint_matrices = 0;
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..089a416c63919cf77a7229806663169ac4a75df9 100644 (file)
@@ -0,0 +1,292 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+// Transfer matrices for finite elements
+
+static double q1_into_q1_refined_0[] =
+{
+ 1., 0., 0., 0.,
+ 13.5/27., 13.5/27., 0., 0.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+ 13.5/27., 0., 0., 13.5/27.,
+};
+
+static double q1_into_q1_refined_1[] =
+{
+ 13.5/27., 13.5/27., 0., 0.,
+ 0., 1., 0., 0.,
+ 0., 13.5/27., 13.5/27., 0.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+};
+
+static double q1_into_q1_refined_2[] =
+{
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+ 0., 13.5/27., 13.5/27., 0.,
+ 0., 0., 1., 0.,
+ 0., 0., 13.5/27., 13.5/27.,
+};
+
+static double q1_into_q1_refined_3[] =
+{
+ 13.5/27., 0., 0., 13.5/27.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+ 0., 0., 13.5/27., 13.5/27.,
+ 0., 0., 0., 1.,
+};
+
+static double q2_into_q2_refined_0[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 10.125/27., -3.375/27., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 20.25/27.,
+ 10.125/27., 0., 0., -3.375/27., 0., 0., 0., 20.25/27., 0.,
+ 3.796875/27., -1.265625/27., 0.421875/27., -1.265625/27., 7.59375/27., -2.53125/27., -2.53125/27., 7.59375/27., 15.1875/27.,
+};
+
+static double q2_into_q2_refined_1[] =
+{
+ 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ -3.375/27., 10.125/27., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 10.125/27., -3.375/27., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 20.25/27.,
+ 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 20.25/27.,
+ -1.265625/27., 3.796875/27., -1.265625/27., 0.421875/27., 7.59375/27., 7.59375/27., -2.53125/27., -2.53125/27., 15.1875/27.,
+};
+
+static double q2_into_q2_refined_2[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 20.25/27.,
+ 0., -3.375/27., 10.125/27., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 10.125/27., -3.375/27., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 20.25/27.,
+ 0.421875/27., -1.265625/27., 3.796875/27., -1.265625/27., -2.53125/27., 7.59375/27., 7.59375/27., -2.53125/27., 15.1875/27.,
+};
+
+static double q2_into_q2_refined_3[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 20.25/27.,
+ 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 20.25/27.,
+ 0., 0., -3.375/27., 10.125/27., 0., 0., 20.25/27., 0., 0.,
+ -3.375/27., 0., 0., 10.125/27., 0., 0., 0., 20.25/27., 0.,
+ -1.265625/27., 0.421875/27., -1.265625/27., 3.796875/27., -2.53125/27., -2.53125/27., 7.59375/27., 7.59375/27., 15.1875/27.,
+};
+
+static double q3_into_q3_refined_0[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -1.6875/27., -1.6875/27., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0.10546875/27., 0.10546875/27., 0.10546875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27.,
+ -1.6875/27., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0.,
+ 8.4375/27., 1.6875/27., 0., 0., 25.3125/27., -8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., -0.52734375/27., -0.10546875/27., -0.10546875/27., 4.74609375/27., 4.74609375/27., -1.58203125/27., 0.52734375/27., 0.94921875/27., 0.94921875/27., -1.58203125/27., 0.52734375/27., 14.23828125/27., 14.23828125/27., -4.74609375/27., -4.74609375/27.,
+ 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 15.1875/27., 15.1875/27., 0., 0.,
+ -0.52734375/27., -0.10546875/27., -0.10546875/27., -0.52734375/27., -1.58203125/27., 0.52734375/27., 0.94921875/27., 0.94921875/27., -1.58203125/27., 0.52734375/27., 4.74609375/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 14.23828125/27., -4.74609375/27.,
+ 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 15.1875/27., 0.,
+ 8.4375/27., 0., 0., 1.6875/27., 0., 0., 0., 0., 0., 0., 25.3125/27., -8.4375/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 2.63671875/27., 0.52734375/27., 0.10546875/27., 0.52734375/27., 7.91015625/27., -2.63671875/27., 1.58203125/27., -0.52734375/27., 1.58203125/27., -0.52734375/27., 7.91015625/27., -2.63671875/27., 23.73046875/27., -7.91015625/27., -7.91015625/27., 2.63671875/27.,
+ 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0., 25.3125/27., 0., -8.4375/27., 0.,
+ 0., 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 8.4375/27., 0., 25.3125/27., -8.4375/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+};
+
+static double q3_into_q3_refined_1[] =
+{
+ -1.6875/27., -1.6875/27., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., -1.6875/27., -1.6875/27., 0., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0.10546875/27., 0.10546875/27., 0.10546875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 1.6875/27., 8.4375/27., 0., 0., -8.4375/27., 25.3125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 8.4375/27., 1.6875/27., 0., 0., 0., 25.3125/27., -8.4375/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 15.1875/27.,
+ -0.10546875/27., -0.52734375/27., -0.52734375/27., -0.10546875/27., 0.52734375/27., -1.58203125/27., 4.74609375/27., 4.74609375/27., 0.52734375/27., -1.58203125/27., 0.94921875/27., 0.94921875/27., -4.74609375/27., 14.23828125/27., -4.74609375/27., 14.23828125/27.,
+ -0.52734375/27., -0.52734375/27., -0.10546875/27., -0.10546875/27., 4.74609375/27., 4.74609375/27., -1.58203125/27., 0.52734375/27., 0.94921875/27., 0.94921875/27., -1.58203125/27., 0.52734375/27., 14.23828125/27., 14.23828125/27., -4.74609375/27., -4.74609375/27.,
+ 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 15.1875/27., 15.1875/27., 0., 0.,
+ 0., 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., 0., 25.3125/27., 0., -8.4375/27.,
+ 0.52734375/27., 2.63671875/27., 0.52734375/27., 0.10546875/27., -2.63671875/27., 7.91015625/27., 7.91015625/27., -2.63671875/27., -0.52734375/27., 1.58203125/27., 1.58203125/27., -0.52734375/27., -7.91015625/27., 23.73046875/27., 2.63671875/27., -7.91015625/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 1.6875/27., 0., -8.4375/27., 25.3125/27., 0., 0.,
+};
+
+static double q3_into_q3_refined_2[] =
+{
+ 0.10546875/27., 0.10546875/27., 0.10546875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27.,
+ 0., -1.6875/27., -1.6875/27., 0., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., -1.6875/27., -1.6875/27., 0., 0., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 15.1875/27.,
+ -0.10546875/27., -0.52734375/27., -0.52734375/27., -0.10546875/27., 0.52734375/27., -1.58203125/27., 4.74609375/27., 4.74609375/27., 0.52734375/27., -1.58203125/27., 0.94921875/27., 0.94921875/27., -4.74609375/27., 14.23828125/27., -4.74609375/27., 14.23828125/27.,
+ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1.6875/27., 8.4375/27., 0., 0., 0., -8.4375/27., 25.3125/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 8.4375/27., 1.6875/27., 0., 0., 0., 0., -8.4375/27., 25.3125/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 0., 15.1875/27., 15.1875/27.,
+ -0.10546875/27., -0.10546875/27., -0.52734375/27., -0.52734375/27., 0.94921875/27., 0.94921875/27., 0.52734375/27., -1.58203125/27., 4.74609375/27., 4.74609375/27., 0.52734375/27., -1.58203125/27., -4.74609375/27., -4.74609375/27., 14.23828125/27., 14.23828125/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 8.4375/27., 0., 0., 0., 1.6875/27., 0., 0., -8.4375/27., 25.3125/27.,
+ 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 8.4375/27., 0., 0., 0., -8.4375/27., 0., 25.3125/27.,
+ 0.10546875/27., 0.52734375/27., 2.63671875/27., 0.52734375/27., -0.52734375/27., 1.58203125/27., -2.63671875/27., 7.91015625/27., -2.63671875/27., 7.91015625/27., -0.52734375/27., 1.58203125/27., 2.63671875/27., -7.91015625/27., -7.91015625/27., 23.73046875/27.,
+};
+
+static double q3_into_q3_refined_3[] =
+{
+ -1.6875/27., 0., 0., -1.6875/27., 0., 0., 0., 0., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0.,
+ 0.10546875/27., 0.10546875/27., 0.10546875/27., 0.10546875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27., 8.54296875/27.,
+ 0., 0., -1.6875/27., -1.6875/27., 0., 0., 0., 0., 15.1875/27., 15.1875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -0.52734375/27., -0.10546875/27., -0.10546875/27., -0.52734375/27., -1.58203125/27., 0.52734375/27., 0.94921875/27., 0.94921875/27., -1.58203125/27., 0.52734375/27., 4.74609375/27., 4.74609375/27., 14.23828125/27., -4.74609375/27., 14.23828125/27., -4.74609375/27.,
+ 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 0., 0., 15.1875/27., 0., 15.1875/27., 0.,
+ 0., 0., 0., 0., 0., 0., 0., -1.6875/27., 0., 0., 0., -1.6875/27., 0., 0., 15.1875/27., 15.1875/27.,
+ -0.10546875/27., -0.10546875/27., -0.52734375/27., -0.52734375/27., 0.94921875/27., 0.94921875/27., 0.52734375/27., -1.58203125/27., 4.74609375/27., 4.74609375/27., 0.52734375/27., -1.58203125/27., -4.74609375/27., -4.74609375/27., 14.23828125/27., 14.23828125/27.,
+ 0., 0., 1.6875/27., 8.4375/27., 0., 0., 0., 0., 25.3125/27., -8.4375/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 1.6875/27., 0., 0., 8.4375/27., 0., 0., 0., 0., 0., 0., -8.4375/27., 25.3125/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 8.4375/27., 0., 0., 25.3125/27., -8.4375/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 0.52734375/27., 0.10546875/27., 0.52734375/27., 2.63671875/27., 1.58203125/27., -0.52734375/27., -0.52734375/27., 1.58203125/27., 7.91015625/27., -2.63671875/27., -2.63671875/27., 7.91015625/27., -7.91015625/27., 2.63671875/27., 23.73046875/27., -7.91015625/27.,
+ 0., 0., 0., 0., 1.6875/27., 0., 0., 0., 8.4375/27., 0., 0., 0., -8.4375/27., 0., 25.3125/27., 0.,
+};
+
+
+static double * embedding0[] =
+{
+  q1_into_q1_refined_0,
+  q2_into_q2_refined_0,
+  q3_into_q3_refined_0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding1[] =
+{
+  q1_into_q1_refined_1,
+  q2_into_q2_refined_1,
+  q3_into_q3_refined_1,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding2[] =
+{
+  q1_into_q1_refined_2,
+  q2_into_q2_refined_2,
+  q3_into_q3_refined_2,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding3[] =
+{
+  q1_into_q1_refined_3,
+  q2_into_q2_refined_3,
+  q3_into_q3_refined_3,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double** embedding4;
+static double** embedding5;
+static double** embedding6;
+static double** embedding7;
+
+// Constraint matrices taken from Wolfgangs old version
+
+static double constraint_q1[] =
+{
+  .5, .5
+};
+
+static double constraint_q2[] =
+{
+  0., 0., 1.,
+  .375, -.125, .75,
+  -.125, .375, .75
+};
+
+static double constraint_q3[] =
+{
+  -.0625, -.0625, .5625, .5625,
+  .3125, .0625, .9375, -.3125,
+  0., 0., 1., 0.,
+  0., 0., 0., 1.,
+  .0625, .3125, -.3125, 0.9375
+};
+
+static double constraint_q4[] =
+{
+  0., 0., 0., 1., 0.,
+  0.2734375, -0.0390625, 1.09375, -0.546875,  0.21875,
+  0., 0., 1., 0., 0.,
+  -0.0390625, 0.0234375, 0.46875, 0.703125, -0.15625,
+  0.0234375, -0.0390625, -0.15625, 0.703125, 0.46875, 
+  0., 0., 0., 0., 1.,
+  -0.0390625, 0.2734375, 0.21875, -0.546875, 1.09375
+};
+
+static double* constraint_matrices[] =
+{
+  constraint_q1,
+  constraint_q2,
+  constraint_q3,
+  constraint_q4,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..38791acf43ce3ad58050aa2cd14ead1c346d7b94 100644 (file)
@@ -0,0 +1,552 @@
+//----------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------
+
+// Transfer matrices for finite elements
+
+
+static double q1_into_q1_refined_0[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0.,
+ 13.5/27., 13.5/27., 0., 0., 0., 0., 0., 0.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27., 0., 0., 0., 0.,
+ 13.5/27., 0., 0., 13.5/27., 0., 0., 0., 0.,
+ 13.5/27., 0., 0., 0., 13.5/27., 0., 0., 0.,
+ 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27.,
+};
+
+static double q1_into_q1_refined_1[] =
+{
+ 13.5/27., 13.5/27., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 13.5/27., 13.5/27., 0., 0., 0., 0., 0.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27., 0., 0., 0., 0.,
+ 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0.,
+ 0., 13.5/27., 0., 0., 0., 13.5/27., 0., 0.,
+ 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+};
+
+static double q1_into_q1_refined_2[] =
+{
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27., 0., 0., 0., 0.,
+ 0., 13.5/27., 13.5/27., 0., 0., 0., 0., 0.,
+ 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 13.5/27., 13.5/27., 0., 0., 0., 0.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0.,
+ 0., 0., 13.5/27., 0., 0., 0., 13.5/27., 0.,
+ 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27.,
+};
+
+static double q1_into_q1_refined_3[] =
+{
+ 13.5/27., 0., 0., 13.5/27., 0., 0., 0., 0.,
+ 6.75/27., 6.75/27., 6.75/27., 6.75/27., 0., 0., 0., 0.,
+ 0., 0., 13.5/27., 13.5/27., 0., 0., 0., 0.,
+ 0., 0., 0., 1., 0., 0., 0., 0.,
+ 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27.,
+ 0., 0., 0., 13.5/27., 0., 0., 0., 13.5/27.,
+};
+
+static double q1_into_q1_refined_4[] =
+{
+ 13.5/27., 0., 0., 0., 13.5/27., 0., 0., 0.,
+ 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27.,
+ 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 0., 0., 13.5/27., 13.5/27., 0., 0.,
+ 0., 0., 0., 0., 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+ 0., 0., 0., 0., 13.5/27., 0., 0., 13.5/27.,
+};
+
+static double q1_into_q1_refined_5[] =
+{
+ 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0.,
+ 0., 13.5/27., 0., 0., 0., 13.5/27., 0., 0.,
+ 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 0., 0., 0., 0., 13.5/27., 13.5/27., 0., 0.,
+ 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 13.5/27., 13.5/27., 0.,
+ 0., 0., 0., 0., 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+};
+
+static double q1_into_q1_refined_6[] =
+{
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27., 0.,
+ 0., 0., 13.5/27., 0., 0., 0., 13.5/27., 0.,
+ 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27.,
+ 0., 0., 0., 0., 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+ 0., 0., 0., 0., 0., 13.5/27., 13.5/27., 0.,
+ 0., 0., 0., 0., 0., 0., 1., 0.,
+ 0., 0., 0., 0., 0., 0., 13.5/27., 13.5/27.,
+};
+
+static double q1_into_q1_refined_7[] =
+{
+ 6.75/27., 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27.,
+ 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27., 3.375/27.,
+ 0., 0., 6.75/27., 6.75/27., 0., 0., 6.75/27., 6.75/27.,
+ 0., 0., 0., 13.5/27., 0., 0., 0., 13.5/27.,
+ 0., 0., 0., 0., 13.5/27., 0., 0., 13.5/27.,
+ 0., 0., 0., 0., 6.75/27., 6.75/27., 6.75/27., 6.75/27.,
+ 0., 0., 0., 0., 0., 0., 13.5/27., 13.5/27.,
+ 0., 0., 0., 0., 0., 0., 0., 1.,
+};
+
+static double q2_into_q2_refined_0[] =
+{
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 10.125/27., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 10.125/27., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 3.796875/27., -1.265625/27., 0.421875/27., -1.265625/27., 0., 0., 0., 0., 7.59375/27., -2.53125/27., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., -1.265625/27., 0.421875/27., -1.265625/27., 0., 0., 7.59375/27., -2.53125/27., -2.53125/27., 7.59375/27., 15.1875/27.,
+ 3.796875/27., -1.265625/27., 0., 0., -1.265625/27., 0.421875/27., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 0.421875/27., 0., 0., 0., 0., 0., 7.59375/27., -2.53125/27., 7.59375/27., 0., -2.53125/27., 0., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 3.796875/27., 0., 0.421875/27., 0., -1.265625/27., 0., 0., 0., 0., 7.59375/27., -2.53125/27., 0., -2.53125/27., 0., 7.59375/27., 15.1875/27.,
+ 3.796875/27., 0., 0., -1.265625/27., -1.265625/27., 0., 0., 0.421875/27., 0., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., -2.53125/27., 0., 0., 0., 0., 0., 15.1875/27., 0.,
+ 1.423828125/27., -0.474609375/27., 0.158203125/27., -0.474609375/27., -0.474609375/27., 0.158203125/27., -0.052734375/27., 0.158203125/27., 2.84765625/27., -0.94921875/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., 5.6953125/27., -1.8984375/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., 5.6953125/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_1[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ -3.375/27., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27.,
+ -1.265625/27., 3.796875/27., -1.265625/27., 0.421875/27., 0., 0., 0., 0., 7.59375/27., 7.59375/27., -2.53125/27., -2.53125/27., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 3.796875/27., -1.265625/27., 0.421875/27., 0., 0., 7.59375/27., 7.59375/27., -2.53125/27., -2.53125/27., 15.1875/27.,
+ -1.265625/27., 3.796875/27., 0., 0., 0.421875/27., -1.265625/27., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0.,
+ 0., 3.796875/27., -1.265625/27., 0., 0., -1.265625/27., 0.421875/27., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 0.421875/27., 0., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 7.59375/27., 0., -2.53125/27., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 0.421875/27., 0., 0., 0., 0., 0., 7.59375/27., -2.53125/27., 7.59375/27., 0., -2.53125/27., 0., 15.1875/27.,
+ -0.474609375/27., 1.423828125/27., -0.474609375/27., 0.158203125/27., 0.158203125/27., -0.474609375/27., 0.158203125/27., -0.052734375/27., 2.84765625/27., 2.84765625/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 0.31640625/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., 5.6953125/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_2[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0.421875/27., -1.265625/27., 3.796875/27., -1.265625/27., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.421875/27., -1.265625/27., 3.796875/27., -1.265625/27., 0., 0., -2.53125/27., 7.59375/27., 7.59375/27., -2.53125/27., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 0.421875/27., 0., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 7.59375/27., 0., -2.53125/27., 15.1875/27.,
+ 0., -1.265625/27., 3.796875/27., 0., 0., 0.421875/27., -1.265625/27., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0.,
+ 0., 0., 3.796875/27., -1.265625/27., 0., 0., -1.265625/27., 0.421875/27., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 15.1875/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 3.796875/27., 0., 0.421875/27., 0., -1.265625/27., 0., 0., 0., 0., 0., 7.59375/27., -2.53125/27., -2.53125/27., 0., 7.59375/27., 0., 15.1875/27.,
+ 0.158203125/27., -0.474609375/27., 1.423828125/27., -0.474609375/27., -0.052734375/27., 0.158203125/27., -0.474609375/27., 0.158203125/27., -0.94921875/27., 2.84765625/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., -0.94921875/27., 0.31640625/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., -1.8984375/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_3[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -3.375/27., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 10.125/27., 0., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0.,
+ -1.265625/27., 0.421875/27., -1.265625/27., 3.796875/27., 0., 0., 0., 0., -2.53125/27., -2.53125/27., 7.59375/27., 7.59375/27., 0., 0., 0., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0.421875/27., -1.265625/27., 3.796875/27., 0., 0., -2.53125/27., -2.53125/27., 7.59375/27., 7.59375/27., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 3.796875/27., 0., 0.421875/27., 0., -1.265625/27., 0., 0., 0., 0., 7.59375/27., -2.53125/27., 0., -2.53125/27., 0., 7.59375/27., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 3.796875/27., 0., 0.421875/27., 0., -1.265625/27., 0., 0., 0., 0., 0., 7.59375/27., -2.53125/27., -2.53125/27., 0., 7.59375/27., 0., 15.1875/27.,
+ 0., 0., -1.265625/27., 3.796875/27., 0., 0., 0.421875/27., -1.265625/27., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 15.1875/27., 0., 0.,
+ -1.265625/27., 0., 0., 3.796875/27., 0.421875/27., 0., 0., -1.265625/27., 0., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., -2.53125/27., 0., 0., 7.59375/27., 0., 0., 0., 0., 0., 15.1875/27., 0.,
+ -0.474609375/27., 0.158203125/27., -0.474609375/27., 1.423828125/27., 0.158203125/27., -0.052734375/27., 0.158203125/27., -0.474609375/27., -0.94921875/27., -0.94921875/27., 2.84765625/27., 2.84765625/27., 0.31640625/27., 0.31640625/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_4[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 10.125/27., 0., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3.796875/27., -1.265625/27., 0.421875/27., -1.265625/27., 0., 0., 7.59375/27., -2.53125/27., -2.53125/27., 7.59375/27., 15.1875/27.,
+ 0., 0., 0., 0., 3.796875/27., -1.265625/27., 0.421875/27., -1.265625/27., 0., 0., 0., 0., 7.59375/27., -2.53125/27., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0.,
+ -1.265625/27., 0.421875/27., 0., 0., 3.796875/27., -1.265625/27., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 0.421875/27., 0., 3.796875/27., 0., -1.265625/27., 0., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 7.59375/27., 0., -2.53125/27., 0., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.421875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 3.796875/27., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 0., -2.53125/27., 0., 7.59375/27., 15.1875/27.,
+ -1.265625/27., 0., 0., 0.421875/27., 3.796875/27., 0., 0., -1.265625/27., 0., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 7.59375/27., 0., 0., -2.53125/27., 0., 0., 0., 0., 0., 15.1875/27., 0.,
+ -0.474609375/27., 0.158203125/27., -0.052734375/27., 0.158203125/27., 1.423828125/27., -0.474609375/27., 0.158203125/27., -0.474609375/27., -0.94921875/27., 0.31640625/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., -0.94921875/27., 2.84765625/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., 5.6953125/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_5[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 20.25/27.,
+ 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0.,
+ 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 3.796875/27., -1.265625/27., 0.421875/27., 0., 0., 7.59375/27., 7.59375/27., -2.53125/27., -2.53125/27., 15.1875/27.,
+ 0., 0., 0., 0., -1.265625/27., 3.796875/27., -1.265625/27., 0.421875/27., 0., 0., 0., 0., 7.59375/27., 7.59375/27., -2.53125/27., -2.53125/27., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0.,
+ 0.421875/27., -1.265625/27., 0., 0., -1.265625/27., 3.796875/27., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0.,
+ 0., -1.265625/27., 0.421875/27., 0., 0., 3.796875/27., -1.265625/27., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 0.421875/27., 0., 3.796875/27., 0., -1.265625/27., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 7.59375/27., 0., -2.53125/27., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 0.421875/27., 0., 3.796875/27., 0., -1.265625/27., 0., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 7.59375/27., 0., -2.53125/27., 0., 15.1875/27.,
+ 0.158203125/27., -0.474609375/27., 0.158203125/27., -0.052734375/27., -0.474609375/27., 1.423828125/27., -0.474609375/27., 0.158203125/27., -0.94921875/27., -0.94921875/27., 0.31640625/27., 0.31640625/27., 2.84765625/27., 2.84765625/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_6[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 10.125/27., 0., -3.375/27., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 10.125/27., -3.375/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0.,
+ 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.421875/27., -1.265625/27., 3.796875/27., -1.265625/27., 0., 0., -2.53125/27., 7.59375/27., 7.59375/27., -2.53125/27., 15.1875/27.,
+ 0., 0., 0., 0., 0.421875/27., -1.265625/27., 3.796875/27., -1.265625/27., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0., 0.421875/27., 0., 3.796875/27., 0., -1.265625/27., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 7.59375/27., 0., -2.53125/27., 15.1875/27.,
+ 0., 0.421875/27., -1.265625/27., 0., 0., -1.265625/27., 3.796875/27., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 15.1875/27., 0., 0., 0.,
+ 0., 0., -1.265625/27., 0.421875/27., 0., 0., 3.796875/27., -1.265625/27., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 0., 0., 15.1875/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0.421875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 3.796875/27., 0., 0., 0., 0., 0., -2.53125/27., 7.59375/27., -2.53125/27., 0., 7.59375/27., 0., 15.1875/27.,
+ -0.052734375/27., 0.158203125/27., -0.474609375/27., 0.158203125/27., 0.158203125/27., -0.474609375/27., 1.423828125/27., -0.474609375/27., 0.31640625/27., -0.94921875/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., -0.94921875/27., -1.8984375/27., 5.6953125/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., -1.8984375/27., 11.390625/27.,
+};
+
+static double q2_into_q2_refined_7[] =
+{
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., -3.375/27., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 10.125/27., 0., 0., 0., 0., 20.25/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0.,
+ 0., 0., 0., -3.375/27., 0., 0., 0., 10.125/27., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 20.25/27., 0., 0., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.265625/27., 0.421875/27., -1.265625/27., 3.796875/27., 0., 0., -2.53125/27., -2.53125/27., 7.59375/27., 7.59375/27., 15.1875/27.,
+ 0., 0., 0., 0., -1.265625/27., 0.421875/27., -1.265625/27., 3.796875/27., 0., 0., 0., 0., -2.53125/27., -2.53125/27., 7.59375/27., 7.59375/27., 0., 0., 0., 0., 0., 15.1875/27., 0., 0., 0., 0., 0.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.421875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 3.796875/27., 0., 0., 0., 0., -2.53125/27., 7.59375/27., 0., -2.53125/27., 0., 7.59375/27., 15.1875/27.,
+ 0., 0., 0., 0., 0., 0., 0., 0., 0.421875/27., 0., -1.265625/27., 0., -1.265625/27., 0., 3.796875/27., 0., 0., 0., 0., 0., -2.53125/27., 7.59375/27., -2.53125/27., 0., 7.59375/27., 0., 15.1875/27.,
+ 0., 0., 0.421875/27., -1.265625/27., 0., 0., -1.265625/27., 3.796875/27., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., 0., 0., 0., -2.53125/27., 7.59375/27., 0., 0., 0., 0., 15.1875/27., 0., 0.,
+ 0.421875/27., 0., 0., -1.265625/27., -1.265625/27., 0., 0., 3.796875/27., 0., 0., 0., -2.53125/27., 0., 0., 0., 7.59375/27., -2.53125/27., 0., 0., 7.59375/27., 0., 0., 0., 0., 0., 15.1875/27., 0.,
+ 0.158203125/27., -0.052734375/27., 0.158203125/27., -0.474609375/27., -0.474609375/27., 0.158203125/27., -0.474609375/27., 1.423828125/27., 0.31640625/27., 0.31640625/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., -0.94921875/27., 2.84765625/27., 2.84765625/27., -0.94921875/27., 0.31640625/27., -0.94921875/27., 2.84765625/27., -1.8984375/27., 5.6953125/27., -1.8984375/27., -1.8984375/27., 5.6953125/27., 5.6953125/27., 11.390625/27.,
+};
+
+
+
+
+static double * embedding0[] =
+{
+  q1_into_q1_refined_0,
+  q2_into_q2_refined_0,
+//    q3_into_q3_refined_0,
+//    q4_into_q4_refined_0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding1[] =
+{
+  q1_into_q1_refined_1,
+  q2_into_q2_refined_1,
+//    q3_into_q3_refined_1,
+//    q4_into_q4_refined_1,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding2[] =
+{
+  q1_into_q1_refined_2,
+  q2_into_q2_refined_2,
+//    q3_into_q3_refined_2,
+//    q4_into_q4_refined_2,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding3[] =
+{
+  q1_into_q1_refined_3,
+  q2_into_q2_refined_3,
+//    q3_into_q3_refined_3,
+//    q4_into_q4_refined_3,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding4[] =
+{
+  q1_into_q1_refined_4,
+  q2_into_q2_refined_4,
+//    q3_into_q3_refined_4,
+//    q4_into_q4_refined_4,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding5[] =
+{
+  q1_into_q1_refined_5,
+  q2_into_q2_refined_5,
+//    q3_into_q3_refined_5,
+//    q4_into_q4_refined_5,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding6[] =
+{
+  q1_into_q1_refined_6,
+  q2_into_q2_refined_6,
+//    q3_into_q3_refined_6,
+//    q4_into_q4_refined_6,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+static double * embedding7[] =
+{
+  q1_into_q1_refined_7,
+  q2_into_q2_refined_7,
+//    q3_into_q3_refined_7,
+//    q4_into_q4_refined_7,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+};
+
+
+
+static double constraint_q1[] =
+{
+  .25,.25,.25,.25,
+  .5,.5,0.,0.,
+  0.,.5,.5,0.,
+  0.,0.,.5,.5,
+  .5,0.,0.,.5
+};
+
+static double constraint_q2[] =
+{
+  0,0,0,0,0,0,0,0,1,
+  0,0,0,0,1,0,0,0,0,
+  0,0,0,0,0,1,0,0,0,
+  0,0,0,0,0,0,1,0,0,
+  0,0,0,0,0,0,0,1,0,
+  0,0,0,0,.375,0,-.125,0,.75,
+  0,0,0,0,0,.375,0,-.125,.75,
+  0,0,0,0,-.125,0,.375,0,.75,
+  0,0,0,0,0,-.125,0,.375,.75,
+  .375,-.125,0,0,.75,0,0,0,0,
+  -.125,.375,0,0,.75,0,0,0,0,
+  0,.375,-.125,0,0,.75,0,0,0,
+  0,-.125,.375,0,0,.75,0,0,0,
+  0,0,-.125,.375,0,0,.75,0,0,
+  0,0,.375,-.125,0,0,.75,0,0,
+  .375,0,0,-.125,0,0,0,.75,0,
+  -.125,0,0,.375,0,0,0,.75,0,
+  .140625,-.046875,.015625,-.046875,.28125,-.09375,-.09375,.28125,.5625,
+  -.046875,.140625,-.046875,.015625,.28125,.28125,-.09375,-.09375,.5625,
+  .015625,-.046875,.140625,-.046875,-.09375,.28125,.28125,-.09375,.5625,
+  -.046875,.015625,-.046875,.140625,-.09375,-.09375,.28125,.28125,.5625
+};
+
+static double* constraint_matrices[] =
+{
+  constraint_q1,
+  constraint_q2,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0
+//  constraint_q3,
+//  constraint_q4
+};
+
diff --git a/deal.II/deal.II/source/fe/q1_mapping.cc b/deal.II/deal.II/source/fe/q1_mapping.cc
deleted file mode 100644 (file)
index ec48f73..0000000
+++ /dev/null
@@ -1,801 +0,0 @@
-//----------------------------  q1_mapping.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  q1_mapping.cc  ---------------------------
-
-
-#include <fe/q1_mapping.h>
-#include <base/quadrature.h>
-#include <lac/vector.h>
-#include <lac/full_matrix.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-
-#include <cmath>
-
-
-// if necessary try to work around a bug in the IBM xlC compiler
-#ifdef XLC_WORK_AROUND_STD_BUG
-using namespace std;
-#endif
-
-
-
-/*---------------------------- FEQ1Mapping ----------------------------------*/
-
-
-#if deal_II_dimension == 1
-
-template <>
-FEQ1Mapping<1>::FEQ1Mapping (const unsigned int dofs_per_vertex,
-                            const unsigned int dofs_per_line,
-                            const unsigned int dofs_per_quad,
-                            const unsigned int dofs_per_hex,
-                            const unsigned int n_components,
-                            const std::vector<bool> &restriction_is_additive_flags) :
-               FiniteElement<1> (FiniteElementData<1> (dofs_per_vertex,
-                                                       dofs_per_line,
-                                                       GeometryInfo<1>::vertices_per_cell,
-                                                       n_components),
-                                 restriction_is_additive_flags)
-{
-  Assert (dofs_per_quad==0, ExcInvalidData());
-  Assert (dofs_per_hex==0,  ExcInvalidData());
-};
-
-
-template <>
-double
-FEQ1Mapping<1>::shape_value_transform (const unsigned int i,
-                                      const Point<1>     &p) const
-{
-  Assert((i<2), ExcIndexRange(i,0,2));
-  const double xi = p(0);
-  switch (i)
-    {
-      case 0: return 1.-xi;
-      case 1: return xi;
-    }
-  return 0.;
-};
-
-
-template <>
-Tensor<1,1>
-FEQ1Mapping<1>::shape_grad_transform(const unsigned int i,
-                                    const Point<1>&) const
-{
-  Assert((i<2), ExcIndexRange(i,0,2));
-  switch (i)
-    {
-      case 0: return Point<1>(-1.);
-      case 1: return Point<1>(1.);
-    }
-  return Point<1>();
-};
-
-
-template <>
-void FEQ1Mapping<1>::get_face_jacobians (const DoFHandler<1>::face_iterator &,
-                                        const std::vector<Point<0> > &,
-                                        std::vector<double>      &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ1Mapping<1>::get_subface_jacobians (const DoFHandler<1>::face_iterator &,
-                                           const unsigned int           ,
-                                           const std::vector<Point<0> > &,
-                                           std::vector<double>      &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ1Mapping<1>::get_normal_vectors (const DoFHandler<1>::cell_iterator &,
-                                        const unsigned int,
-                                        const std::vector<Point<0> > &,
-                                        std::vector<Point<1> > &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ1Mapping<1>::get_normal_vectors (const DoFHandler<1>::cell_iterator &,
-                                        const unsigned int,
-                                        const unsigned int,
-                                        const std::vector<Point<0> > &,
-                                        std::vector<Point<1> > &) const {
-  Assert (false, ExcInternalError());
-};
-
-
-template <>
-void FEQ1Mapping<1>::fill_fe_values (const DoFHandler<1>::cell_iterator &cell,
-                                    const std::vector<Point<1> > &unit_points,
-                                    std::vector<Tensor<2,1> >    &jacobians,
-                                    const bool            compute_jacobians,
-                                    std::vector<Tensor<3,1> > &jacobians_grad,
-                                    const bool            compute_jacobians_grad,
-                                    std::vector<Point<1> >    &support_points,
-                                    const bool            compute_support_points,
-                                    std::vector<Point<1> >    &q_points,
-                                    const bool            compute_q_points,
-                                    const FullMatrix<double>       &shape_values_transform,
-                                    const std::vector<std::vector<Tensor<1,1> > > &shape_gradients_transform) const {
-                                  // simply pass down
-  FiniteElement<1>::fill_fe_values (cell, unit_points,
-                                   jacobians, compute_jacobians,
-                                   jacobians_grad, compute_jacobians_grad,
-                                   support_points, compute_support_points,
-                                   q_points, compute_q_points,
-                                   shape_values_transform, shape_gradients_transform);
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-FEQ1Mapping<2>::FEQ1Mapping (const unsigned int dofs_per_vertex,
-                            const unsigned int dofs_per_line,
-                            const unsigned int dofs_per_quad,
-                            const unsigned int dofs_per_hex,
-                            const unsigned int n_components,
-                            const std::vector<bool> &restriction_is_additive_flags) :
-               FiniteElement<2> (FiniteElementData<2> (dofs_per_vertex,
-                                                       dofs_per_line,
-                                                       dofs_per_quad,
-                                                       GeometryInfo<2>::vertices_per_cell,
-                                                       n_components),
-                                 restriction_is_additive_flags)
-{
-  Assert (dofs_per_hex == 0, ExcInvalidData());
-};
-
-
-template <>
-double
-FEQ1Mapping<2>::shape_value_transform (const unsigned int i,
-                                      const Point<2>& p) const
-{
-  Assert((i<4), ExcIndexRange(i,0,4));
-  switch (i)
-    {
-      case 0: return (1.-p(0)) * (1.-p(1));
-      case 1: return p(0) * (1.-p(1));
-      case 2: return p(0) * p(1);
-      case 3: return (1.-p(0)) * p(1);
-    }
-  return 0.;
-};
-
-
-template <>
-Tensor<1,2>
-FEQ1Mapping<2>::shape_grad_transform (const unsigned int i,
-                                     const Point<2>& p) const
-{
-  Assert((i<4), ExcIndexRange(i,0,4));
-  switch (i)
-    {
-      case 0: return Point<2> (p(1)-1., p(0)-1.);
-      case 1: return Point<2> (1.-p(1), -p(0));
-      case 2: return Point<2> (p(1), p(0));
-      case 3: return Point<2> (-p(1), 1.-p(0));
-    }
-  return Point<2> ();
-};
-
-
-template <>
-void FEQ1Mapping<2>::get_face_jacobians (const DoFHandler<2>::face_iterator &face,
-                                        const std::vector<Point<1> > &unit_points,
-                                        std::vector<double> &face_jacobians) const {
-                                  // more or less copied from the linear
-                                  // finite element
-  Assert (unit_points.size() == face_jacobians.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       face_jacobians.size()));
-
-                                  // a linear mapping for a single line
-                                  // produces particularly simple
-                                  // expressions for the jacobi
-                                  // determinant :-)
-  const double h = sqrt((face->vertex(1) - face->vertex(0)).square());
-  fill_n (face_jacobians.begin(),
-         unit_points.size(),
-         h);  
-};
-
-
-template <>
-void FEQ1Mapping<2>::get_subface_jacobians (const DoFHandler<2>::face_iterator &face,
-                                           const unsigned int           ,
-                                           const std::vector<Point<1> > &unit_points,
-                                           std::vector<double> &face_jacobians) const {
-                                  // more or less copied from the linear
-                                  // finite element
-  Assert (unit_points.size() == face_jacobians.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       face_jacobians.size()));
-  Assert (face->at_boundary() == false,
-         FiniteElement<2>::ExcBoundaryFaceUsed ());
-
-                                  // a linear mapping for a single line
-                                  // produces particularly simple
-                                  // expressions for the jacobi
-                                  // determinant :-)
-  const double h = sqrt((face->vertex(1) - face->vertex(0)).square());
-  fill_n (face_jacobians.begin(),
-         unit_points.size(),
-         h/2);
-};
-
-
-template <>
-void FEQ1Mapping<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell,
-                                        const unsigned int       face_no,
-                                        const std::vector<Point<1> > &unit_points,
-                                        std::vector<Point<2> > &normal_vectors) const {
-                                  // more or less copied from the linear
-                                  // finite element
-  Assert (unit_points.size() == normal_vectors.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       normal_vectors.size()));
-
-  const DoFHandler<2>::face_iterator face = cell->face(face_no);
-                                  // compute direction of line
-  const Point<2> line_direction = (face->vertex(1) - face->vertex(0));
-                                  // rotate to the right by 90 degrees
-  const Point<2> normal_direction(line_direction(1),
-                                 -line_direction(0));
-
-  if (face_no <= 1)
-                                    // for sides 0 and 1: return the correctly
-                                    // scaled vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / sqrt(normal_direction.square()));
-  else
-                                    // for sides 2 and 3: scale and invert
-                                    // vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / (-sqrt(normal_direction.square())));
-};
-
-
-template <>
-void FEQ1Mapping<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell,
-                                        const unsigned int       face_no,
-                                        const unsigned int,
-                                        const std::vector<Point<1> > &unit_points,
-                                        std::vector<Point<2> > &normal_vectors) const
-{
-                                  // more or less copied from the
-                                  // linear finite element note, that
-                                  // in 2D the normal vectors to the
-                                  // subface have the same direction
-                                  // as that for the face, so we can
-                                  // ignore the subface number
-  Assert (unit_points.size() == normal_vectors.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension (unit_points.size(),
-                                                       normal_vectors.size()));
-  Assert (cell->face(face_no)->at_boundary() == false,
-         FiniteElement<2>::ExcBoundaryFaceUsed ());
-
-  const DoFHandler<2>::face_iterator face = cell->face(face_no);
-                                  // compute direction of line
-  const Point<2> line_direction = (face->vertex(1) - face->vertex(0));
-                                  // rotate to the right by 90 degrees
-  const Point<2> normal_direction(line_direction(1),
-                                 -line_direction(0));
-
-  if (face_no <= 1)
-                                    // for sides 0 and 1: return the correctly
-                                    // scaled vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / sqrt(normal_direction.square()));
-  else
-                                    // for sides 2 and 3: scale and invert
-                                    // vector
-    fill (normal_vectors.begin(), normal_vectors.end(),
-         normal_direction / (-sqrt(normal_direction.square())));
-};
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-FEQ1Mapping<3>::FEQ1Mapping (const unsigned int dofs_per_vertex,
-                            const unsigned int dofs_per_line,
-                            const unsigned int dofs_per_quad,
-                            const unsigned int dofs_per_hex,
-                            const unsigned int n_components,
-                            const std::vector<bool> &restriction_is_additive_flags) :
-               FiniteElement<3> (FiniteElementData<3> (dofs_per_vertex,
-                                                       dofs_per_line,
-                                                       dofs_per_quad,
-                                                       dofs_per_hex,
-                                                       GeometryInfo<3>::vertices_per_cell,
-                                                       n_components),
-                                 restriction_is_additive_flags)
-{};
-
-
-template <>
-double
-FEQ1Mapping<3>::shape_value_transform (const unsigned int i,
-                                      const Point<3>& p) const
-{
-  Assert((i<8), ExcIndexRange(i,0,8));
-  switch (i)
-    {
-      case 0: return 1.0-p(0)+(-1.0+p(0))*p(1)+(-1.0+p(0)+(1.0-p(0))*p(1))*p(2);
-      case 1: return p(0)-p(0)*p(1)+(-p(0)+p(0)*p(1))*p(2);
-      case 2: return (p(0)-p(0)*p(1))*p(2);
-      case 3: return (1.0-p(0)+(-1.0+p(0))*p(1))*p(2);
-      case 4: return (1.0-p(0))*p(1)+(-1.0+p(0))*p(1)*p(2);
-      case 5: return p(0)*p(1)-p(0)*p(1)*p(2);
-      case 6: return p(0)*p(1)*p(2);
-      case 7: return (1.0-p(0))*p(1)*p(2);
-    }
-  return 0.;
-};
-
-
-template <>
-Tensor<1,3>
-FEQ1Mapping<3>::shape_grad_transform (const unsigned int i,
-                                     const Point<3>& p) const
-{
-  Assert((i<8), ExcIndexRange(i,0,8));
-  switch (i)
-    {
-      case 0: return Point<3>(-1.0+p(1)+(1.0-p(1))*p(2),
-                             -1.0+p(0)+(1.0-p(0))*p(2),
-                             -1.0+p(0)+(1.0-p(0))*p(1));
-      case 1: return Point<3>(1.0-p(1)+(-1.0+p(1))*p(2),
-                             -p(0)+p(0)*p(2),
-                             -p(0)+p(0)*p(1));
-      case 2: return Point<3>((1.0-p(1))*p(2),
-                             -p(0)*p(2),
-                             p(0)-p(0)*p(1));
-      case 3: return Point<3>((-1.0+p(1))*p(2),
-                             (-1.0+p(0))*p(2),
-                             1.0-p(0)+(-1.0+p(0))*p(1));
-      case 4: return Point<3>(-p(1)+p(1)*p(2),
-                             1.0-p(0)+(-1.0+p(0))*p(2),
-                             (-1.0+p(0))*p(1));
-      case 5: return Point<3>(p(1)-p(1)*p(2),
-                             p(0)-p(0)*p(2),
-                             -p(0)*p(1));
-      case 6: return Point<3>(p(1)*p(2),
-                             p(0)*p(2),
-                             p(0)*p(1));
-      case 7: return Point<3>(-p(1)*p(2),
-                             (1.0-p(0))*p(2),
-                             (1.0-p(0))*p(1));
-    }
-  return Point<3> ();
-};
-
-
-template <>
-void FEQ1Mapping<3>::get_face_jacobians (const DoFHandler<3>::face_iterator &face,
-                                        const std::vector<Point<2> > &unit_points,
-                                        std::vector<double> &face_jacobians) const {
-  Assert (unit_points.size() == face_jacobians.size(),
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       face_jacobians.size()));
-
-                                  // the computation of the face jacobians is
-                                  // along the following lines: let x_i be
-                                  // the four vertices of a face, then the
-                                  // unit point (xi,eta) is mapped to the
-                                  // point vec x(xi,eta)=\sum x_i phi_i(xi,eta),
-                                  // with phi_i being the shape functions
-                                  // of this face
-                                  //
-                                  // now, while d(xi) d(eta) is the area
-                                  // element on the unit face,
-                                  // abs(dx dy) is the respective element
-                                  // of the real face. to compute it, we
-                                  // compute the image of the elements d(xi)
-                                  // and d(eta):
-                                  // (\vec x(xi+dxi,eta) - \vec x(xi,eta) )
-                                  // (\vec x(xi,eta+deta) - \vec x(xi,eta) )
-                                  // the area then is the norm of the
-                                  // cross product of these two vectors
-                                  // and the determinant is the area
-                                  // divided by d(xi)d(eta)
-                                  //
-                                  // written down, we remark that the
-                                  // determinant we are looking for is
-                                  // the cross product of the following
-                                  // two vectors:
-                                  // d/d(xi)  vec x(xi,eta)
-                                  // d/d(eta) vec x(xi,eta)
-                                  // we then arrive at:
-                                  //
-                                  // detJ =
-                                  // || \sum_l \sum_k \phi_{l,xi} \phi_{k,eta}
-                                  //        x_l \times x_k ||
-                                  //
-                                  // a maple script doing this computation is
-                                  // in the <scripts> directory
-  const Point<3> vertices[4] = { face->vertex(0),
-                                  face->vertex(1),
-                                  face->vertex(2),
-                                  face->vertex(3)   };
-
-  for (unsigned int point=0; point<unit_points.size(); ++point)
-    {
-      const double xi  = unit_points[point](0),
-                  eta = unit_points[point](1);
-
-      const double t1 = 1.0-eta;
-      const double t6 = -vertices[0](1)*t1+vertices[1](1)*t1+vertices[2](1)*eta-vertices[3](1)*eta;
-      const double t7 = 1.0-xi;
-      const double t12 = -vertices[0](2)*t7-vertices[1](2)*xi+vertices[2](2)*xi+vertices[3](2)*t7;
-      const double t18 = -vertices[0](2)*t1+vertices[1](2)*t1+vertices[2](2)*eta-vertices[3](2)*eta;
-      const double t23 = -vertices[0](1)*t7-vertices[1](1)*xi+vertices[2](1)*xi+vertices[3](1)*t7;
-      const double t26 = fabs(t6*t12-t18*t23);
-      const double t27 = t26*t26;
-      const double t32 = -vertices[0](0)*t7-vertices[1](0)*xi+vertices[2](0)*xi+vertices[3](0)*t7;
-      const double t38 = -vertices[0](0)*t1+vertices[1](0)*t1+vertices[2](0)*eta-vertices[3](0)*eta;
-      const double t41 = fabs(t18*t32-t38*t12);
-      const double t42 = t41*t41;
-      const double t46 = fabs(t38*t23-t6*t32);
-      const double t47 = t46*t46;
-      face_jacobians[point] = sqrt(t27+t42+t47);
-    };
-};
-
-
-template <>
-void FEQ1Mapping<3>::get_subface_jacobians (const DoFHandler<3>::face_iterator &/*face*/,
-                                           const unsigned int           ,
-                                           const std::vector<Point<2> > &unit_points,
-                                           std::vector<double> &face_jacobians) const {
-  Assert (false,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       face_jacobians.size()));
-};
-
-
-template <>
-void FEQ1Mapping<3>::get_normal_vectors (const DoFHandler<3>::cell_iterator &cell,
-                                        const unsigned int       face_no,
-                                        const std::vector<Point<2> > &unit_points,
-                                        std::vector<Point<3> > &normal_vectors) const {
-  Assert (unit_points.size() == normal_vectors.size(),
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       normal_vectors.size()));
-  
-                                  // taken from the same script as is
-                                  // the computation of the jacobian
-                                  // determinant above
-
-  const Point<3> vertices[4] = { cell->face(face_no)->vertex(0),
-                                  cell->face(face_no)->vertex(1),
-                                  cell->face(face_no)->vertex(2),
-                                  cell->face(face_no)->vertex(3)   };
-
-  for (unsigned int point=0; point<unit_points.size(); ++point)
-    {
-      const double xi  = unit_points[point](0),
-                  eta = unit_points[point](1);
-      
-      const double t1 = 1.0-eta;
-      const double t6 = -vertices[0](1)*t1+vertices[1](1)*t1+vertices[2](1)*eta-vertices[3](1)*eta;
-      const double t7 = 1.0-xi;
-      const double t12 = -vertices[0](2)*t7-vertices[1](2)*xi+vertices[2](2)*xi+vertices[3](2)*t7;
-      const double t18 = -vertices[0](2)*t1+vertices[1](2)*t1+vertices[2](2)*eta-vertices[3](2)*eta;
-      const double t23 = -vertices[0](1)*t7-vertices[1](1)*xi+vertices[2](1)*xi+vertices[3](1)*t7;
-      const double t25 = t6*t12-t18*t23;
-      const double t26 = fabs(t25);
-      const double t27 = t26*t26;
-      const double t32 = -vertices[0](0)*t7-vertices[1](0)*xi+vertices[2](0)*xi+vertices[3](0)*t7;
-      const double t38 = -vertices[0](0)*t1+vertices[1](0)*t1+vertices[2](0)*eta-vertices[3](0)*eta;
-      const double t40 = t18*t32-t38*t12;
-      const double t41 = fabs(t40);
-      const double t42 = t41*t41;
-      const double t45 = t38*t23-t6*t32;
-      const double t46 = fabs(t45);
-      const double t47 = t46*t46;
-      const double t49 = sqrt(t27+t42+t47);
-      const double t50 = 1/t49;
-      
-      normal_vectors[point](0) = t25*t50;
-      normal_vectors[point](1) = t40*t50;
-      normal_vectors[point](2) = t45*t50;
-
-      if ((face_no == 1) ||
-         (face_no == 2) ||
-         (face_no == 5))
-       normal_vectors[point] *= -1;
-    };  
-};
-
-
-template <>
-void FEQ1Mapping<3>::get_normal_vectors (const DoFHandler<3>::cell_iterator &/*cell*/,
-                                        const unsigned int       /*face_no*/,
-                                        const unsigned int,
-                                        const std::vector<Point<2> > &unit_points,
-                                        std::vector<Point<3> > &normal_vectors) const {
-                                  // more or less copied from the linear
-                                  // finite element
-                                  // note, that in 2D the normal vectors to the
-                                  // subface have the same direction as that
-                                  // for the face
-  Assert (false,
-         FiniteElementBase<3>::ExcWrongFieldDimension (unit_points.size(),
-                                                       normal_vectors.size()));
-};
-
-#endif
-
-
-template <int dim>
-Point<dim> FEQ1Mapping<dim>::transform_unit_to_real_cell (
-  const typename DoFHandler<dim>::cell_iterator &cell,
-  const Point<dim> &p) const
-{
-  Point<dim> p_real;
-  for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
-    p_real+=cell->vertex(i) * shape_value_transform (i, p);
-  return p_real;
-}
-
-
-template <int dim>
-Point<dim> FEQ1Mapping<dim>::transform_real_to_unit_cell (
-  const typename DoFHandler<dim>::cell_iterator &cell,
-  const Point<dim> &p) const
-{
-                                  // Newton iteration to solve
-                                  // f(x)=p(x)-p=0
-                                  // x_{n+1}=x_n-[f'(x)]^{-1}f(x)
-  
-                                  // start value in center of unit
-                                  // cell (p_unit stands for x)
-  Point<dim> p_unit;
-  for (unsigned int i=0; i<dim; ++i)
-    p_unit(i)=0.5;
-
-                                  // f(x)
-  Point<dim> p_real(transform_unit_to_real_cell(cell, p_unit));
-  Point<dim> f = p_real-p;
-
-  double eps=1e-15*cell->diameter();
-  
-  while (f.square()>eps*eps)
-    {
-                                      // f'(x)
-      Tensor<2,dim> df;
-      for (unsigned int k=0; k<GeometryInfo<dim>::vertices_per_cell; ++k)
-       {
-         Tensor<1,dim> grad_transform(shape_grad_transform (k, p_unit));
-         Point<dim> &vertex=cell->vertex(k);
-
-         
-         for (unsigned int i=0; i<dim; ++i)
-           for (unsigned int j=0; j<dim; ++j)
-             df[i][j]+=vertex[i]*grad_transform[j];
-       }
-      
-                                      // Solve  [f'(x)]d=f(x)
-      Point<dim> d;
-      Tensor<2,dim> df_1;
-
-      df_1 = invert(df);
-      contract (d, df_1, f);
-      
-      p_unit -= d;
-                                      // f(x)
-      p_real=transform_unit_to_real_cell(cell, p_unit);
-      f = p_real-p;
-    }
-  
-  return p_unit;
-}
-
-  
-template <int dim>
-void FEQ1Mapping<dim>::fill_fe_values (const typename DoFHandler<dim>::cell_iterator &cell,
-                                      const typename std::vector<Point<dim> >            &unit_points,
-                                      typename std::vector<Tensor<2,dim> >               &jacobians,
-                                      const bool              compute_jacobians,
-                                      typename std::vector<Tensor<3,dim> > &jacobians_grad,
-                                      const bool              compute_jacobians_grad,
-                                      typename std::vector<Point<dim> > &support_points,
-                                      const bool           compute_support_points,
-                                      typename std::vector<Point<dim> > &q_points,
-                                      const bool           compute_q_points,
-                                      const FullMatrix<double>      &shape_values_transform,
-                                      const typename std::vector<typename std::vector<Tensor<1,dim> > > &shape_grad_transform) const
-{
-  Assert ((!compute_jacobians) || (jacobians.size() == unit_points.size()),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(jacobians.size(),
-                                                                 unit_points.size()));
-  Assert ((!compute_jacobians_grad) || (jacobians_grad.size() == unit_points.size()),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(jacobians_grad.size(),
-                                                                 unit_points.size()));
-  Assert ((!compute_q_points) || (q_points.size() == unit_points.size()),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(q_points.size(),
-                                                                 unit_points.size()));
-  Assert ((!compute_support_points) || (support_points.size() == dofs_per_cell),
-         typename FiniteElementBase<dim>::ExcWrongFieldDimension(support_points.size(),
-                                                                 dofs_per_cell));
-
-
-  unsigned int n_points=unit_points.size();
-
-  Point<dim> vertices[GeometryInfo<dim>::vertices_per_cell];
-  for (unsigned int l=0; l<GeometryInfo<dim>::vertices_per_cell; ++l)
-    vertices[l] = cell->vertex(l);
-
-
-  if (compute_q_points) 
-    {
-                                      // initialize points to zero
-      for (unsigned int i=0; i<n_points; ++i)
-       q_points[i] = Point<dim> ();
-      
-                                      // note: let x_l be the vector of the
-                                      // lth quadrature point in real space and
-                                      // xi_l that on the unit cell, let further
-                                      // p_j be the vector of the jth vertex
-                                      // of the cell in real space and
-                                      // N_j(xi_l) be the value of the associated
-                                      // basis function at xi_l, then
-                                      // x_l(xi_l) = sum_j p_j N_j(xi_l)
-                                      //
-                                      // Here, N_j is the *linear* basis function,
-                                      // not that of the finite element, since we
-                                      // use a subparametric mapping
-      for (unsigned int j=0; j<GeometryInfo<dim>::vertices_per_cell; ++j) 
-       for (unsigned int l=0; l<n_points; ++l) 
-         q_points[l] += vertices[j] * shape_values_transform(j, l);
-    };
-
-
-/* jacobi matrices: compute d(x)/d(xi) and invert this
-   Let M(l) be the inverse of J at the quadrature point l, then
-   M_{ij}(l) = sum_s p_i(s) d(N_s(l))/d(xi_j)
-   where p_i(s) is the i-th coordinate of the s-th vertex std::vector,
-   N_s(l) is the value of the s-th vertex shape function at the
-   quadrature point l.
-
-   We could therefore write:
-   l=0..n_points-1
-   i=0..dim-1
-   j=0..dim-1
-   M_{ij}(l) = 0
-   s=0..n_vertices
-   M_{ij}(l) += p_i(s) d(N_s(l))/d(xi_j)
-
-   However, we rewrite the loops to only compute the gradient once for
-   each integration point and basis function.
-
-   One last note regarding whether we have to invert M or M transposed: it is
-   easy to try out, by computing the gradients of a function on a distorted
-   cell (just move one vertex) where the nodal values for linear elements
-   are one for the moved vertex and zero otherwise. Please also note that
-   when computing the gradients on the real cell, the jacobian matrix
-   is multiplied to the unit cell gradient *from the right*! be very careful
-   with these things.
-
-   The following little program tests the correct behaviour. The program can
-   also be found in the <tests> directory.
-
-   -------------------------------------------
-   #include <grid/tria.h>
-   #include <grid/tria_boundary.h>
-   #include <dofs/dof_handler.h>
-   #include <fe/fe_values.h>
-   #include <fe/fe_lib.lagrange.h>
-   #include <base/quadrature_lib.h>
-   #include <grid/tria_iterator.h>
-   #include <dofs/dof_accessor.h>
-   #include <lac/vector.h>
-
-   int main () {
-   Triangulation<2> tria;
-   tria.create_hypercube (0,1);
-   tria.begin_active()->vertex(2)(0) = 2;
-
-   DoFHandler<2> dof(&tria);
-   FELinear<2> fe;
-   dof.distribute_dofs(fe);
-
-   StraightBoundary<2> b;
-   QTrapez<2> q;
-   FEValues<2> fevalues(fe,q,update_gradients);
-   fevalues.reinit (dof.begin_active(),b);
-
-
-   Vector<double> val(4);
-   val(2) = 1;
-
-   std::vector<Point<2> > grads(4);
-   fevalues.get_function_grads (val, grads);
-
-   for (unsigned int i=0; i<4; ++i)
-   std::cout << "Vertex " << i
-   << "   grad=" << grads[i] << std::endl;
-   };
-   ---------------------------------------------
-  
-   The correct output should be
-   --------------------------------
-   Vertex 0   grad=0 0
-   Vertex 1   grad=0.5 0
-   Vertex 2   grad=0 1
-   Vertex 3   grad=0.5 0.5
-   --------------------------------
-   and the wrong would be
-   --------------------------------
-   Vertex 0   grad=0 0
-   Vertex 1   grad=0.5 0
-   Vertex 2   grad=-1 1
-   Vertex 3   grad=0 1
-   --------------------------------  
-*/
-
-  if (compute_jacobians)
-    {
-      if (dim == 1)
-       {
-         const double h = (cell->vertex(1)(0)-cell->vertex(0)(0));
-         
-         for (unsigned int point=0; point<n_points; ++point)
-           jacobians[point][0][0] = 1./h;
-       }
-      else
-                                        // 2d or 3d case
-       { 
-         Tensor<2,dim> M;
-         for (unsigned int l=0; l<n_points; ++l) 
-           {
-             M.clear ();
-             for (unsigned int s=0; s<GeometryInfo<dim>::vertices_per_cell; ++s)
-               {
-                                                  // we want the linear transform,
-                                                  // so use that function
-                 const Point<dim> gradient = shape_grad_transform[s][l];
-                 for (unsigned int i=0; i<dim; ++i)
-                   for (unsigned int j=0; j<dim; ++j)
-                     M[i][j] += vertices[s](i) * gradient(j);
-               };
-             jacobians[l] = invert (M);
-           };
-       };
-    };
-  
-  if (compute_jacobians_grad)
-    compute_jacobian_gradients (cell, unit_points, jacobians_grad);
-    
-  if (compute_support_points)
-    get_support_points (cell, support_points);
-};
-
-
-/*------------------------------- Explicit Instantiations -------------*/
-
-template class FEQ1Mapping<deal_II_dimension>;
diff --git a/deal.II/deal.II/source/fe/q1_mapping.jacobians.cc b/deal.II/deal.II/source/fe/q1_mapping.jacobians.cc
deleted file mode 100644 (file)
index 5058388..0000000
+++ /dev/null
@@ -1,4636 +0,0 @@
-//----------------------------  q1_mapping.jacobians.cc  ---------------------------
-//    $Id$
-//    Version: $Name$
-//
-//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
-//
-//    This file is subject to QPL and may not be  distributed
-//    without copyright and license information. Please refer
-//    to the file deal.II/doc/license.html for the  text  and
-//    further information on this license.
-//
-//----------------------------  q1_mapping.jacobians.cc  ---------------------------
-
-
-#include <fe/q1_mapping.h>
-#include <grid/tria.h>
-#include <grid/tria_iterator.h>
-#include <dofs/dof_accessor.h>
-
-#include <cmath>
-
-
-/**
- * This file has been singled out from q1_mapping.cc because the computation
- * of the 3d matrices is so extremely large that it can't be done with
- * optimization switched on. On the other hand, this also is not necessary,
- * because Maple outputs fairly good optimized code already. Singling out this file
- * allows to compile this file with less optimization without affecting the other
- * files.
- */
-
-
-#if deal_II_dimension == 1
-
-template <>
-void FEQ1Mapping<1>::compute_jacobian_gradients (const DoFHandler<1>::cell_iterator &,
-                                                    const std::vector<Point<1> > &unit_points,
-                                                    std::vector<Tensor<3,1> >    &jacobians_grad) 
-{
-  Assert (unit_points.size() == jacobians_grad.size(),
-         FiniteElementBase<3>::ExcWrongFieldDimension(jacobians_grad.size(),
-                                                      unit_points.size()));
-
-                                  // derivative of the
-                                  // jacobian is always zero
-                                  // for a linear mapping in 1d
-  for (unsigned int point=0; point<unit_points.size(); ++point)
-    jacobians_grad[point][0][0][0] = 0;
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 2
-
-template <>
-void FEQ1Mapping<2>::compute_jacobian_gradients (const DoFHandler<2>::cell_iterator &cell,
-                                                    const std::vector<Point<2> > &unit_points,
-                                                    std::vector<Tensor<3,2> >    &jacobians_grad) 
-{
-  Assert (unit_points.size() == jacobians_grad.size(),
-         FiniteElementBase<2>::ExcWrongFieldDimension(jacobians_grad.size(),
-                                                      unit_points.size()));
-
-  const unsigned int dim = 2;
-  
-  Point<dim> vertices[GeometryInfo<dim>::vertices_per_cell];
-  for (unsigned int l=0; l<GeometryInfo<dim>::vertices_per_cell; ++l)
-    vertices[l] = cell->vertex(l);
-
-  for (unsigned int point=0; point<unit_points.size(); ++point)
-    {
-      const double xi = unit_points[point](0);
-      const double eta= unit_points[point](1);
-       
-      const double t2 = vertices[1](0)*eta;
-      const double t4 = vertices[3](0)*vertices[2](1);
-      const double t6 = vertices[0](0)*vertices[2](1);
-      const double t8 = vertices[0](0)*vertices[3](1);
-      const double t10 = vertices[3](0)*xi;
-      const double t13 = vertices[2](0)*xi;
-      const double t16 = vertices[3](0)*vertices[1](1);
-      const double t18 = vertices[0](0)*vertices[1](1);
-      const double t19 = vertices[3](0)*vertices[0](1);
-      const double t20 = -t2*vertices[3](1)-t4*eta-t6*xi+t8*xi-
-                        t10*vertices[0](1)+t10*vertices[1](1)+
-                        t13*vertices[0](1)-t13*vertices[1](1)+t16
-                        *eta+t18+t19;
-      const double t23 = vertices[1](0)*vertices[3](1);
-      const double t26 = vertices[2](0)*eta;
-      const double t29 = vertices[1](0)*vertices[0](1);
-      const double t30 = vertices[1](0)*vertices[2](1);
-      const double t32 = -t16-t18*eta+t6*eta-t23*xi+t2*vertices[0](1)-
-                        t26*vertices[0](1)+t26*vertices[3](1)-
-                        t8-t29+t23+t30
-                        *xi;
-      const double t33 = t20+t32;
-      const double t34 = 1/t33;
-      const double t35 = (vertices[0](1)-vertices[1](1)+
-                         vertices[2](1)-vertices[3](1))*t34;
-      const double t41 = t33*t33;
-      const double t42 = 1/t41;
-      const double t43 = (-vertices[0](1)+vertices[0](1)*xi-
-                         vertices[1](1)*xi+vertices[2](1)*xi+
-                         vertices[3](1)-vertices[3](1)*xi)*t42;
-      const double t44 = vertices[2](0)*vertices[0](1);
-      const double t46 = -t6+t8-t19+t16+t44-
-                        vertices[2](0)*vertices[1](1)-
-                        t23+t30;
-      const double t50 = (vertices[0](0)-vertices[1](0)+
-                         vertices[2](0)-vertices[3](0))*t34;
-      const double t54 = (-vertices[0](0)+vertices[0](0)*xi-
-                         vertices[1](0)*xi+t13+
-                         vertices[3](0)-t10)*t42;
-      const double t62 = (-vertices[0](1)+vertices[0](1)*eta+
-                         vertices[1](1)-vertices[1](1)*eta+
-                         vertices[2](1)*eta-
-                         vertices[3](1)*eta)*t42;
-      const double t67 = (-vertices[0](0)+vertices[0](0)*eta+
-                         vertices[1](0)-t2+t26-vertices[3](0)*eta)*t42;
-      const double t70 = -t23-t4+t16-t18+t6+t29-t44+
-                        vertices[2](0)*vertices[3](1);
-      jacobians_grad[point][0][0][0] = t35-t43*t46;
-      jacobians_grad[point][0][0][1] = -t50+t54*t46;
-      jacobians_grad[point][0][1][0] = t62*t46;
-      jacobians_grad[point][0][1][1] = -t67*t46;
-      jacobians_grad[point][1][0][0] = -t43*t70;
-      jacobians_grad[point][1][0][1] = t54*t70;
-      jacobians_grad[point][1][1][0] = -t35+t62*t70;
-      jacobians_grad[point][1][1][1] = t50-t67*t70;
-    };
-};
-
-
-#endif
-
-
-#if deal_II_dimension == 3
-
-template <>
-void FEQ1Mapping<3>::compute_jacobian_gradients (const DoFHandler<3>::cell_iterator &cell,
-                                                    const std::vector<Point<3> > &unit_points,
-                                                    std::vector<Tensor<3,3> >    &jacobians_grad) 
-{
-  Assert (unit_points.size() == jacobians_grad.size(),
-         FiniteElementBase<3>::ExcWrongFieldDimension(jacobians_grad.size(),
-                                                      unit_points.size()));
-
-  const unsigned int dim = 3;
-  
-  Point<dim> vertices[GeometryInfo<dim>::vertices_per_cell];
-  for (unsigned int l=0; l<GeometryInfo<dim>::vertices_per_cell; ++l)
-    vertices[l] = cell->vertex(l);
-
-         for (unsigned int point=0; point<unit_points.size(); ++point)
-           {
-             const double xi  = unit_points[point](0);
-             const double eta = unit_points[point](1);
-             const double zeta= unit_points[point](2);
-
-              const double t1 = vertices[4](1)*vertices[1](2);
-              const double t2 = t1*zeta;
-              const double t3 = vertices[4](1)*vertices[2](2);
-              const double t4 = t3*zeta;
-              const double t5 = vertices[5](1)*xi;
-              const double t6 = t5*vertices[1](2);
-              const double t7 = 2.0*t6;
-              const double t8 = vertices[7](1)*zeta;
-              const double t9 = t8*vertices[1](2);
-              const double t10 = vertices[4](1)*vertices[0](2);
-              const double t11 = t10*xi;
-              const double t12 = 2.0*t11;
-              const double t13 = t5*vertices[3](2);
-              const double t15 = vertices[2](1)*xi;
-              const double t16 = t15*vertices[0](2);
-              const double t17 = 2.0*t16;
-              const double t18 = vertices[2](1)*zeta;
-              const double t19 = t18*vertices[4](2);
-              const double t20 = vertices[1](1)*vertices[4](2);
-              const double t21 = t20*zeta;
-              const double t22 = vertices[1](1)*vertices[5](2);
-              const double t23 = t22*xi;
-              const double t24 = 2.0*t23;
-              const double t25 = vertices[0](1)*vertices[4](2);
-              const double t26 = t25*zeta;
-              const double t27 = 2.0*t26;
-              const double t28 = vertices[1](1)*vertices[7](2);
-              const double t29 = t28*zeta;
-              const double t30 = vertices[4](1)*zeta;
-              const double t31 = t30*vertices[3](2);
-              const double t32 = 2.0*t31;
-              const double t33 = vertices[5](1)*zeta;
-              const double t34 = t33*vertices[0](2);
-              const double t35 = vertices[0](1)*vertices[7](2);
-              const double t36 = t35*zeta;
-              const double t37 = 2.0*t36;
-              const double t38 = t1*xi;
-              const double t39 = 2.0*t38;
-              const double t40 = vertices[5](1)*vertices[7](2);
-              const double t41 = t40*eta;
-              const double t42 = t3*xi;
-              const double t44 = vertices[4](1)*vertices[7](2);
-              const double t45 = t44*eta;
-              const double t46 = 2.0*t45;
-              const double t47 = -t2+t4+t7+t9+t12+2.0*t13+t17-t19+t21-t24-t27-t29-t32-t34+t37-t39-t41+2.0*t42+t46;
-              const double t48 = vertices[1](1)*vertices[2](2);
-              const double t49 = t48*xi;
-              const double t50 = 2.0*t49;
-              const double t51 = vertices[7](1)*eta;
-              const double t52 = t51*vertices[0](2);
-              const double t53 = 2.0*t52;
-              const double t54 = t51*vertices[1](2);
-              const double t55 = vertices[3](1)*vertices[5](2);
-              const double t56 = t55*eta;
-              const double t57 = t5*vertices[0](2);
-              const double t58 = 2.0*t57;
-              const double t59 = vertices[3](1)*eta;
-              const double t60 = t59*vertices[0](2);
-              const double t61 = 2.0*t60;
-              const double t62 = t15*vertices[1](2);
-              const double t63 = 2.0*t62;
-              const double t64 = vertices[0](1)*vertices[5](2);
-              const double t65 = t64*xi;
-              const double t66 = 2.0*t65;
-              const double t67 = t8*vertices[0](2);
-              const double t68 = 2.0*t67;
-              const double t69 = t51*vertices[4](2);
-              const double t70 = 2.0*t69;
-              const double t71 = vertices[1](1)*xi;
-              const double t72 = t71*vertices[4](2);
-              const double t73 = 2.0*t72;
-              const double t74 = t25*xi;
-              const double t75 = 2.0*t74;
-              const double t76 = t59*vertices[4](2);
-              const double t77 = 2.0*t76;
-              const double t78 = vertices[3](1)*vertices[7](2);
-              const double t79 = t78*zeta;
-              const double t80 = 2.0*t79;
-              const double t81 = t55*xi;
-              const double t83 = vertices[3](1)*vertices[4](2);
-              const double t84 = t83*xi;
-              const double t85 = 2.0*t84;
-              const double t86 = t83*zeta;
-              const double t87 = 2.0*t86;
-              const double t88 = vertices[3](1)*vertices[1](2);
-              const double t89 = t88*xi;
-              const double t90 = 2.0*t89;
-              const double t91 = vertices[3](1)*vertices[0](2);
-              const double t92 = t91*xi;
-              const double t93 = 2.0*t92;
-              const double t94 = t50+t53-t54-t56-t58-t61-t63+t66-t68-t70+t73-t75+t77-t80-2.0*t81+t85+t87+t90-t93;
-              const double t96 = t15*vertices[4](2);
-              const double t98 = vertices[0](1)*vertices[6](2);
-              const double t99 = t98*zeta;
-              const double t100 = vertices[4](1)*vertices[6](2);
-              const double t101 = t100*eta;
-              const double t102 = t88*eta;
-              const double t103 = t30*vertices[0](2);
-              const double t104 = 2.0*t103;
-              const double t105 = vertices[4](1)*vertices[3](2);
-              const double t106 = t105*xi;
-              const double t107 = 2.0*t106;
-              const double t108 = t105*eta;
-              const double t109 = 2.0*t108;
-              const double t110 = t71*vertices[3](2);
-              const double t111 = 2.0*t110;
-              const double t112 = t35*eta;
-              const double t113 = 2.0*t112;
-              const double t114 = vertices[0](1)*vertices[3](2);
-              const double t115 = t114*xi;
-              const double t116 = 2.0*t115;
-              const double t117 = t114*eta;
-              const double t118 = 2.0*t117;
-              const double t119 = vertices[0](1)*vertices[2](2);
-              const double t120 = t119*xi;
-              const double t121 = 2.0*t120;
-              const double t122 = t3*eta;
-              const double t123 = xi*eta;
-              const double t125 = 2.0*t114*t123;
-              const double t126 = t119*t123;
-              const double t127 = 2.0*t126;
-              const double t128 = t8*vertices[3](2);
-              const double t129 = 2.0*t128;
-              const double t130 = t5*vertices[2](2);
-              const double t132 = t35*t123;
-              const double t133 = 2.0*t132;
-              const double t134 = t98*t123;
-              const double t135 = 2.0*t134;
-              const double t136 = -2.0*t96-t99-t101+t102+t104-t107-t109-t111-t113+t116+t118-t121+t122-t125+t127+t129-2.0*t130+t133-t135;
-              const double t137 = t98*eta;
-              const double t138 = vertices[2](1)*eta;
-              const double t139 = t138*vertices[0](2);
-              const double t140 = vertices[6](1)*eta;
-              const double t141 = t140*vertices[4](2);
-              const double t142 = t140*vertices[0](2);
-              const double t143 = vertices[3](1)*vertices[6](2);
-              const double t144 = t143*zeta;
-              const double t145 = t55*zeta;
-              const double t146 = t138*vertices[4](2);
-              const double t147 = vertices[6](1)*zeta;
-              const double t148 = t147*vertices[3](2);
-              const double t149 = t147*vertices[0](2);
-              const double t150 = t64*zeta;
-              const double t151 = vertices[2](1)*vertices[7](2);
-              const double t152 = t151*zeta;
-              const double t153 = t28*eta;
-              const double t154 = vertices[1](1)*vertices[3](2);
-              const double t155 = t154*eta;
-              const double t156 = vertices[5](1)*eta;
-              const double t157 = t156*vertices[3](2);
-              const double t158 = t8*vertices[2](2);
-              const double t159 = t119*eta;
-              const double t160 = t15*vertices[5](2);
-              const double t162 = vertices[0](2)*xi;
-              const double t164 = 2.0*t30*t162;
-              const double t165 = vertices[7](2)*eta;
-              const double t166 = t5*t165;
-              const double t167 = 2.0*t166;
-              const double t168 = vertices[3](2)*eta;
-              const double t169 = t5*t168;
-              const double t170 = 2.0*t169;
-              const double t171 = t137+t139+t141-t142+t144-t145-t146-t148+t149+t150+t152+t153-t155+t157-t158-t159+2.0*t160-t164+t167-t170;
-              const double t174 = vertices[3](2)*xi;
-              const double t175 = t30*t174;
-              const double t176 = vertices[1](2)*xi;
-              const double t177 = t30*t176;
-              const double t178 = t8*t174;
-              const double t179 = vertices[2](2)*xi;
-              const double t180 = t8*t179;
-              const double t181 = t8*t176;
-              const double t182 = t8*t162;
-              const double t183 = xi*zeta;
-              const double t184 = t143*t183;
-              const double t185 = t55*t183;
-              const double t186 = t83*t183;
-              const double t187 = eta*vertices[4](2);
-              const double t188 = t15*t187;
-              const double t189 = eta*vertices[0](2);
-              const double t190 = t15*t189;
-              const double t191 = vertices[6](1)*xi;
-              const double t192 = t191*t187;
-              const double t193 = t71*t165;
-              const double t194 = t71*t168;
-              const double t195 = t51*t176;
-              const double t196 = vertices[5](2)*xi;
-              const double t197 = t59*t196;
-              const double t198 = vertices[4](2)*xi;
-              const double t199 = t59*t198;
-              const double t200 = t59*t176;
-              const double t201 = t59*t162;
-              const double t202 = t175+t177-t178+t180-t181+t182-t184+t185-t186+t188-t190-t192-t193+t194+t195+t197-t199-t200+t201;
-              const double t203 = t3*t123;
-              const double t204 = vertices[7](2)*zeta;
-              const double t205 = t15*t204;
-              const double t206 = vertices[4](2)*zeta;
-              const double t207 = t15*t206;
-              const double t208 = t71*t204;
-              const double t209 = t71*t206;
-              const double t210 = zeta*vertices[3](2);
-              const double t211 = t191*t210;
-              const double t212 = zeta*vertices[0](2);
-              const double t213 = t191*t212;
-              const double t214 = t5*t212;
-              const double t215 = t51*t162;
-              const double t216 = t35*t183;
-              const double t217 = t98*t183;
-              const double t218 = t64*t183;
-              const double t219 = t25*t183;
-              const double t220 = t51*t196;
-              const double t221 = t51*t198;
-              const double t222 = vertices[6](2)*eta;
-              const double t223 = t5*t222;
-              const double t224 = t156*t179;
-              const double t225 = t48*t123;
-              const double t226 = vertices[1](1)*vertices[6](2);
-              const double t227 = t226*t123;
-              const double t228 = -t203-t205+t207+t208-t209+t211-t213+t214-t215-t216+t217-t218+t219-t220+t221-t223+t224-t225+t227;
-              const double t230 = vertices[5](2)*eta;
-              const double t231 = t15*t230;
-              const double t233 = vertices[1](2)*eta;
-              const double t234 = t15*t233;
-              const double t235 = 2.0*t234;
-              const double t236 = t44*t123;
-              const double t237 = 2.0*t236;
-              const double t238 = t100*t123;
-              const double t240 = t105*t123;
-              const double t241 = 2.0*t240;
-              const double t242 = t191*t230;
-              const double t244 = t18*t196;
-              const double t246 = t226*t183;
-              const double t248 = t22*t183;
-              const double t249 = 2.0*t248;
-              const double t250 = t191*t233;
-              const double t252 = zeta*vertices[2](2);
-              const double t253 = t191*t252;
-              const double t255 = zeta*vertices[1](2);
-              const double t256 = t191*t255;
-              const double t258 = t5*t252;
-              const double t261 = t191*t189;
-              const double t262 = 2.0*t261;
-              const double t263 = 2.0*t114;
-              const double t264 = 2.0*t10;
-              const double t265 = t30*t179;
-              const double t266 = 2.0*t265;
-              const double t267 = -2.0*t231+t235-t237+2.0*t238+t241+2.0*t242-2.0*t244-2.0*t246+t249-2.0*t250-2.0*t253+2.0*t256+2.0*t258+t119+2.0*t105+t262-t263-t264-t266;
-              const double t268 = 2.0*t25;
-              const double t269 = 2.0*t91;
-              const double t271 = 2.0*t78*t183;
-              const double t273 = vertices[5](1)*vertices[0](2);
-              const double t274 = vertices[2](1)*vertices[0](2);
-              const double t275 = vertices[2](1)*vertices[4](2);
-              const double t276 = t5*t210;
-              const double t277 = 2.0*t276;
-              const double t278 = t33*vertices[3](2);
-              const double t279 = vertices[6](2)*zeta;
-              const double t281 = 2.0*t15*t279;
-              const double t283 = 2.0*t5*t255;
-              const double t284 = vertices[5](1)*vertices[3](2);
-              const double t285 = t51*vertices[5](2);
-              const double t286 = t268+t269+t271-2.0*t83-t3-t64+t273-t274+t275-t277+t55-t88+t154-t20+t278+t281-t283+t1-t284+t285;
-              const double t290 = vertices[5](0)*eta;
-              const double t291 = t290*t36;
-              const double t292 = vertices[0](0)*vertices[1](2);
-              const double t293 = t292*vertices[3](1);
-              const double t294 = t290*t74;
-              const double t295 = t290*vertices[2](1);
-              const double t296 = xi*vertices[7](2);
-              const double t297 = t296*zeta;
-              const double t299 = 2.0*t295*t297;
-              const double t300 = vertices[3](0)*vertices[0](2);
-              const double t301 = t300*t5;
-              const double t302 = xi*xi;
-              const double t303 = t302*vertices[7](2);
-              const double t304 = t303*zeta;
-              const double t306 = t302*vertices[6](2);
-              const double t307 = t306*zeta;
-              const double t309 = vertices[0](0)*vertices[1](1);
-              const double t310 = t309*zeta;
-              const double t311 = t179*eta;
-              const double t313 = 2.0*t310*t311;
-              const double t314 = t15*eta;
-              const double t316 = 2.0*t292*t314;
-              const double t317 = t290*vertices[1](1);
-              const double t320 = 2.0*t317*t297;
-              const double t321 = t191*eta;
-              const double t322 = t292*t321;
-              const double t323 = vertices[7](0)*vertices[1](2);
-              const double t324 = eta*vertices[4](1);
-              const double t325 = t324*xi;
-              const double t327 = 2.0*t323*t325;
-              const double t328 = vertices[3](0)*vertices[0](1);
-              const double t329 = t328*vertices[4](2);
-              const double t330 = vertices[3](0)*vertices[1](2);
-              const double t331 = t330*vertices[4](1);
-              const double t332 = t330*vertices[0](1);
-              const double t333 = t291-t293-t294-t299+t301+t295*t304-t295*t307+t313+t316-t317*t304+t320-t322+t327-t329-t331+t332;
-              const double t334 = vertices[3](0)*vertices[1](1);
-              const double t335 = t334*vertices[0](2);
-              const double t337 = vertices[1](0)*vertices[0](1);
-              const double t338 = t337*vertices[4](2);
-              const double t339 = t292*vertices[4](1);
-              const double t340 = eta*eta;
-              const double t341 = vertices[5](0)*t340;
-              const double t342 = vertices[7](1)*vertices[0](2);
-              const double t343 = t342*xi;
-              const double t344 = t341*t343;
-              const double t345 = t198*zeta;
-              const double t347 = 2.0*t317*t345;
-              const double t348 = t300*vertices[4](1);
-              const double t349 = vertices[1](1)*eta;
-              const double t350 = zeta*zeta;
-              const double t351 = t349*t350;
-              const double t352 = vertices[0](0)*vertices[5](2);
-              const double t353 = t352*xi;
-              const double t355 = zeta*t302;
-              const double t356 = t355*vertices[3](1);
-              const double t357 = t323*t356;
-              const double t358 = vertices[4](0)*vertices[1](2);
-              const double t359 = t358*vertices[0](1);
-              const double t360 = vertices[1](0)*vertices[3](1);
-              const double t361 = t360*vertices[4](2);
-              const double t362 = vertices[1](2)*vertices[6](0);
-              const double t363 = t302*eta;
-              const double t364 = t363*vertices[5](1);
-              const double t365 = t362*t364;
-              const double t366 = vertices[4](0)*eta;
-              const double t367 = t366*t350;
-              const double t368 = t191*vertices[3](2);
-              const double t370 = t300*t8;
-              const double t371 = t191*vertices[0](2);
-              const double t374 = -t335+t317*t307+t338+t339-t344-t347+t348+t351*t353+t357-t359-t361-t365-t367*t368+t370+t367*t371+t367*t13;
-              const double t377 = vertices[1](1)*t340;
-              const double t378 = t377*zeta;
-              const double t379 = vertices[7](0)*vertices[4](2);
-              const double t380 = t379*xi;
-              const double t382 = t233*t350;
-              const double t383 = vertices[3](0)*vertices[5](1);
-              const double t384 = t383*xi;
-              const double t386 = vertices[7](1)*vertices[4](2);
-              const double t387 = t386*xi;
-              const double t388 = t341*t387;
-              const double t389 = t290*t72;
-              const double t390 = vertices[3](0)*vertices[6](1);
-              const double t391 = t390*xi;
-              const double t393 = vertices[1](2)*t340;
-              const double t394 = t393*zeta;
-              const double t395 = vertices[6](0)*xi;
-              const double t396 = t395*vertices[0](1);
-              const double t398 = t395*vertices[4](1);
-              const double t400 = t290*vertices[0](1);
-              const double t403 = 2.0*t400*t297;
-              const double t404 = vertices[3](0)*vertices[2](2);
-              const double t405 = t404*zeta;
-              const double t406 = t349*xi;
-              const double t408 = 2.0*t405*t406;
-              const double t409 = t156*xi;
-              const double t411 = 2.0*t405*t409;
-              const double t412 = vertices[7](0)*eta;
-              const double t413 = t412*zeta;
-              const double t414 = vertices[0](1)*t302;
-              const double t415 = t414*vertices[5](2);
-              const double t417 = vertices[4](0)*vertices[3](1);
-              const double t418 = t252*t417;
-              const double t419 = t414*vertices[4](2);
-              const double t421 = t98*xi;
-              const double t423 = -t367*t57-t378*t380+t382*t384+t388+t389-t382*t391+t394*t396-t394*t398-t400*t307-t403-t408+t411-t413*t415+t418+t413*t419-t367*t421;
-              const double t424 = vertices[5](2)*t340;
-              const double t425 = zeta*vertices[3](0);
-              const double t426 = t425*vertices[0](1);
-              const double t427 = t424*t426;
-              const double t429 = zeta*vertices[7](0);
-              const double t430 = t429*vertices[4](1);
-              const double t431 = t424*t430;
-              const double t432 = vertices[4](0)*t340;
-              const double t433 = t432*zeta;
-              const double t435 = vertices[7](1)*vertices[5](2)*xi;
-              const double t437 = vertices[4](0)*vertices[0](2);
-              const double t438 = vertices[3](1)*xi;
-              const double t440 = 2.0*t437*t438;
-              const double t441 = vertices[1](0)*vertices[4](1);
-              const double t442 = t441*vertices[3](2);
-              const double t443 = vertices[1](1)*t350;
-              const double t444 = vertices[7](0)*vertices[0](2);
-              const double t445 = t444*xi;
-              const double t446 = t443*t445;
-              const double t447 = vertices[4](0)*vertices[1](1);
-              const double t448 = t447*vertices[3](2);
-              const double t449 = vertices[3](0)*t350;
-              const double t450 = t449*vertices[7](1);
-              const double t451 = t230*t450;
-              const double t452 = t444*t324;
-              const double t453 = vertices[1](1)*zeta;
-              const double t454 = vertices[0](0)*vertices[3](2);
-              const double t455 = t454*eta;
-              const double t457 = 2.0*t453*t455;
-              const double t458 = vertices[7](1)*vertices[1](2);
-              const double t459 = t458*xi;
-              const double t461 = vertices[0](0)*vertices[6](2);
-              const double t462 = t461*xi;
-              const double t463 = t377*t462;
-              const double t464 = vertices[2](0)*xi;
-              const double t465 = t464*vertices[0](2);
-              const double t466 = t377*t465;
-              const double t467 = t464*vertices[4](2);
-              const double t468 = t377*t467;
-              const double t469 = vertices[0](0)*vertices[4](1);
-              const double t470 = t469*vertices[3](2);
-              const double t471 = t427+t367*t65+t431+t433*t435+t440+t442+t446-t448+t451+t452+t457-t433*t459-t463-t466+t468-t470;
-              const double t474 = t355*vertices[2](1);
-              const double t475 = t323*t474;
-              const double t476 = vertices[0](1)*vertices[6](0);
-              const double t477 = t123*vertices[4](2);
-              const double t478 = t476*t477;
-              const double t479 = vertices[1](2)*t350;
-              const double t480 = vertices[5](0)*xi;
-              const double t481 = t480*vertices[0](1);
-              const double t482 = t479*t481;
-              const double t483 = vertices[0](0)*eta;
-              const double t484 = t483*zeta;
-              const double t485 = vertices[4](1)*t302;
-              const double t486 = t485*vertices[2](2);
-              const double t489 = vertices[4](0)*vertices[0](1);
-              const double t490 = t355*vertices[3](2);
-              const double t491 = t489*t490;
-              const double t492 = t309*vertices[4](2);
-              const double t493 = t355*vertices[2](2);
-              const double t494 = t489*t493;
-              const double t495 = vertices[2](0)*vertices[1](2);
-              const double t496 = t495*t485;
-              const double t497 = t464*vertices[4](1);
-              const double t499 = zeta*vertices[3](1);
-              const double t500 = t499*vertices[0](2);
-              const double t501 = t366*t500;
-              const double t502 = t303*eta;
-              const double t503 = t489*t502;
-              const double t504 = t309*vertices[3](2);
-              const double t505 = t483*t350;
-              const double t506 = t71*vertices[7](2);
-              const double t508 = vertices[0](1)*eta;
-              const double t509 = vertices[3](0)*vertices[4](2);
-              const double t510 = t509*xi;
-              const double t512 = 2.0*t508*t510;
-              const double t513 = vertices[3](0)*vertices[4](1);
-              const double t514 = t513*zeta;
-              const double t515 = t424*t514;
-              const double t516 = -t475-t478-t482+t484*t486-t351*t462-t491-t492+t494+t496+t394*t497-t501+t503+t504+t505*t506-t512-t515;
-              const double t517 = t330*xi;
-              const double t519 = 2.0*t508*t517;
-              const double t520 = vertices[3](1)*t302;
-              const double t521 = t520*vertices[1](2);
-              const double t523 = zeta*vertices[4](0);
-              const double t524 = t523*vertices[7](1);
-              const double t525 = t424*t524;
-              const double t526 = t520*vertices[0](2);
-              const double t528 = vertices[2](1)*t302;
-              const double t529 = t528*vertices[5](2);
-              const double t531 = t210*xi;
-              const double t533 = 2.0*t489*t531;
-              const double t534 = t230*t426;
-              const double t538 = 2.0*t508*zeta*t517;
-              const double t540 = t528*vertices[4](2);
-              const double t542 = vertices[7](0)*vertices[3](2);
-              const double t543 = t542*xi;
-              const double t544 = t443*t543;
-              const double t545 = t528*vertices[1](2);
-              const double t547 = t528*vertices[0](2);
-              const double t549 = t252*t489;
-              const double t550 = vertices[1](1)*t302;
-              const double t551 = t550*vertices[5](2);
-              const double t553 = t519-t413*t521-t525+t413*t526-t413*t529+t533-t534+t378*t465-t538+t505*t38+t413*t540-t544+t413*t545-t413*t547-t549+t413*t551;
-              const double t555 = t449*vertices[4](1);
-              const double t556 = t230*t555;
-              const double t557 = t550*vertices[4](2);
-              const double t559 = vertices[6](0)*eta;
-              const double t560 = t559*zeta;
-              const double t562 = t300*xi;
-              const double t564 = t230*zeta;
-              const double t566 = 2.0*t564*t497;
-              const double t568 = vertices[4](0)*vertices[2](1);
-              const double t569 = t568*xi;
-              const double t571 = 2.0*t564*t569;
-              const double t576 = t464*vertices[0](1);
-              const double t578 = t520*vertices[4](2);
-              const double t580 = t412*t350;
-              const double t584 = 2.0*t453*t353;
-              const double t585 = -t556-t413*t557-t560*t540-t378*t562+t566-t378*t467-t571-t560*t545+t560*t547-t560*t551+t560*t557-t394*t576-t413*t578+t580*t81+t560*t578+t584;
-              const double t586 = vertices[0](0)*vertices[3](1);
-              const double t587 = t586*vertices[4](2);
-              const double t588 = t489*vertices[3](2);
-              const double t589 = vertices[3](0)*vertices[2](1);
-              const double t590 = t589*zeta;
-              const double t591 = t233*xi;
-              const double t593 = 2.0*t590*t591;
-              const double t594 = t441*vertices[0](2);
-              const double t595 = vertices[0](0)*vertices[7](1);
-              const double t596 = t595*t187;
-              const double t597 = t302*vertices[7](1);
-              const double t598 = t597*zeta;
-              const double t599 = t495*t598;
-              const double t600 = xi*vertices[7](1);
-              const double t601 = t600*zeta;
-              const double t602 = t495*t601;
-              const double t603 = vertices[7](0)*t350;
-              const double t604 = t603*vertices[3](1);
-              const double t605 = t230*t604;
-              const double t606 = vertices[5](0)*vertices[0](2);
-              const double t607 = t606*t438;
-              const double t608 = t508*t350;
-              const double t609 = vertices[4](0)*vertices[2](2);
-              const double t610 = t609*xi;
-              const double t614 = vertices[0](1)*zeta;
-              const double t615 = t614*t517;
-              const double t616 = t302*vertices[6](1);
-              const double t617 = t616*zeta;
-              const double t618 = t330*t617;
-              const double t619 = t330*t598;
-              const double t620 = vertices[1](0)*eta;
-              const double t621 = t620*t79;
-              const double t622 = vertices[3](0)*vertices[5](2);
-              const double t623 = t622*xi;
-              const double t625 = t587+t588+t593-t594+t596+t599-t602-t605-t607+t608*t610+t560*t521-t560*t526+t615+t618-t619+t621-t351*t623;
-              const double t629 = t523*vertices[3](1);
-              const double t631 = 2.0*t230*t629;
-              const double t634 = 2.0*t413*t84;
-              const double t635 = vertices[5](0)*vertices[0](1);
-              const double t636 = t306*eta;
-              const double t637 = t635*t636;
-              const double t638 = vertices[7](0)*vertices[0](1);
-              const double t639 = t638*t490;
-              const double t640 = t495*t617;
-              const double t642 = 2.0*t413*t89;
-              const double t643 = t447*xi;
-              const double t645 = 2.0*t564*t643;
-              const double t646 = t424*t328;
-              const double t647 = t480*vertices[0](2);
-              const double t649 = 2.0*t453*t647;
-              const double t650 = vertices[0](0)*t350;
-              const double t651 = t650*vertices[7](1);
-              const double t652 = t230*t651;
-              const double t653 = t485*vertices[3](2);
-              const double t654 = t483*t653;
-              const double t655 = t429*vertices[0](1);
-              const double t656 = t424*t655;
-              const double t658 = 2.0*t413*t92;
-              const double t660 = 2.0*t413*t96;
-              const double t661 = t230*xi;
-              const double t663 = 2.0*t590*t661;
-              const double t664 = -t631+t560*t529+t634+t637+t639-t640+t642+t645-t646-t649-t652+t654-t656-t658-t660-t663;
-              const double t665 = t377*t562;
-              const double t666 = t437*t520;
-              const double t667 = t143*xi;
-              const double t669 = t255*xi;
-              const double t671 = 2.0*t489*t669;
-              const double t673 = 2.0*t230*t514;
-              const double t674 = vertices[1](0)*t350;
-              const double t675 = t674*t25;
-              const double t676 = t635*t493;
-              const double t677 = t230*t576;
-              const double t678 = t635*t502;
-              const double t679 = vertices[2](1)*t350;
-              const double t680 = t679*t509;
-              const double t681 = t377*t510;
-              const double t682 = t638*t493;
-              const double t683 = t523*vertices[0](1);
-              const double t685 = 2.0*t230*t683;
-              const double t687 = xi*vertices[4](1);
-              const double t688 = t687*zeta;
-              const double t690 = 2.0*t230*vertices[1](0)*t688;
-              const double t691 = t230*t497;
-              const double t692 = t296*eta;
-              const double t693 = t635*t692;
-              const double t694 = t665-t666-t580*t667-t671+t673+t675-t676+t677-t678-t680-t681-t682+t685-t690-t691+t693;
-              const double t696 = t222*t514;
-              const double t697 = vertices[6](2)*t340;
-              const double t698 = t697*t430;
-              const double t699 = t222*t426;
-              const double t700 = t18*t340;
-              const double t701 = vertices[7](0)*vertices[5](2);
-              const double t702 = t701*xi;
-              const double t704 = t222*t350;
-              const double t705 = vertices[1](0)*xi;
-              const double t706 = t705*vertices[4](1);
-              const double t708 = t508*vertices[4](0);
-              const double t710 = 2.0*t708*t669;
-              const double t711 = vertices[4](0)*t350;
-              const double t712 = t711*vertices[3](1);
-              const double t713 = t222*t712;
-              const double t714 = t711*vertices[0](1);
-              const double t715 = t222*t714;
-              const double t716 = t697*t524;
-              const double t717 = t603*vertices[3](2);
-              const double t718 = t140*t717;
-              const double t720 = vertices[6](0)*t340;
-              const double t721 = t720*zeta;
-              const double t724 = 2.0*t233*t569;
-              const double t725 = t323*xi;
-              const double t727 = vertices[2](0)*t350;
-              const double t728 = vertices[7](1)*vertices[3](2);
-              const double t729 = t727*t728;
-              const double t730 = vertices[0](0)*t340;
-              const double t731 = t730*t89;
-              const double t732 = -t696-t698+t699-t700*t702-t704*t706+t710-t713+t715+t716-t718+t560*t415+t721*t92-t724+t700*t725+t729+t731;
-              const double t733 = vertices[0](0)*vertices[5](1);
-              const double t734 = t733*xi;
-              const double t735 = t233*t734;
-              const double t736 = vertices[2](0)*zeta;
-              const double t737 = t736*t83;
-              const double t738 = t720*t86;
-              const double t739 = vertices[2](2)*t350;
-              const double t740 = t739*t384;
-              const double t741 = t377*t379;
-              const double t744 = t739*t391;
-              const double t746 = 2.0*t233*t576;
-              const double t747 = t252*xi;
-              const double t748 = t638*t747;
-              const double t750 = 2.0*t233*t497;
-              const double t751 = t469*zeta;
-              const double t753 = 2.0*t230*t751;
-              const double t754 = t233*t604;
-              const double t755 = vertices[3](0)*vertices[7](1);
-              const double t756 = t755*zeta;
-              const double t757 = t233*t756;
-              const double t759 = 2.0*t233*t683;
-              const double t760 = t736*t91;
-              const double t761 = -t735-t737+t738+t740-t741-t700*t517+t700*t623-t744-t746+t748+t750-t753+t754+t757-t759+t760;
-              const double t764 = t727*t25;
-              const double t765 = vertices[0](0)*vertices[6](1);
-              const double t766 = t765*xi;
-              const double t767 = t424*t766;
-              const double t768 = vertices[0](0)*vertices[2](1);
-              const double t769 = t768*xi;
-              const double t770 = t424*t769;
-              const double t771 = t233*t629;
-              const double t773 = t233*t555;
-              const double t774 = t393*t655;
-              const double t775 = t309*t165;
-              const double t776 = t233*t651;
-              const double t777 = t393*t514;
-              const double t778 = vertices[6](1)*t340;
-              const double t779 = zeta*vertices[0](0);
-              const double t780 = t779*vertices[3](2);
-              const double t781 = t778*t780;
-              const double t782 = vertices[3](1)*t350;
-              const double t783 = t782*vertices[7](2);
-              const double t784 = t559*t783;
-              const double t785 = t638*t669;
-              const double t786 = t476*t490;
-              const double t787 = t140*t350;
-              const double t788 = vertices[3](0)*vertices[7](2);
-              const double t789 = t788*xi;
-              const double t791 = t674*t728;
-              const double t792 = vertices[1](0)*zeta;
-              const double t793 = t792*t91;
-              const double t794 = -t764-t767+t770+3.0*t771+t773+t774+t775+t776+t777-t781-t784+t785-t786-t787*t789-t791-t793;
-              const double t795 = t233*t450;
-              const double t796 = t300*t598;
-              const double t797 = t300*t617;
-              const double t798 = t782*vertices[4](2);
-              const double t799 = t559*t798;
-              const double t800 = t476*t493;
-              const double t801 = t674*t35;
-              const double t802 = t635*t490;
-              const double t803 = t230*t756;
-              const double t804 = t768*t297;
-              const double t805 = t412*t26;
-              const double t806 = t358*xi;
-              const double t809 = 2.0*t413*t81;
-              const double t810 = t156*t350;
-              const double t812 = t156*zeta;
-              const double t814 = 2.0*t812*t467;
-              const double t816 = 2.0*t300*t601;
-              const double t817 = t191*zeta;
-              const double t818 = t300*t817;
-              const double t819 = -t795+t796-t797+t799+t800-t801+t802-t803+t804+t805-t608*t806-t809+t810*t806-t814-t816+t818;
-              const double t821 = t252*t340;
-              const double t822 = t705*vertices[3](1);
-              const double t824 = vertices[5](1)*t340;
-              const double t825 = t824*zeta;
-              const double t826 = t395*vertices[4](2);
-              const double t828 = t290*zeta;
-              const double t831 = vertices[0](2)*vertices[6](0);
-              const double t832 = t831*t325;
-              const double t833 = t705*vertices[7](1);
-              const double t835 = t479*t638;
-              const double t836 = vertices[7](0)*t340;
-              const double t837 = t836*zeta;
-              const double t838 = t100*xi;
-              const double t840 = t429*vertices[4](2);
-              const double t841 = t778*t840;
-              const double t843 = t412*vertices[0](1);
-              const double t844 = t739*t843;
-              const double t846 = t230*t350;
-              const double t848 = t429*vertices[0](2);
-              const double t849 = t778*t848;
-              const double t850 = t509*zeta;
-              const double t851 = t778*t850;
-              const double t852 = vertices[4](0)*vertices[7](1);
-              const double t853 = t852*eta;
-              const double t854 = t255*t853;
-              const double t855 = -t821*t822-t825*t826+t828*t545-t828*t547+t832+t821*t833+t835+t837*t838+t841+t580*t421+t844-t580*t65+t846*t706-t849-t851-t854;
-              const double t857 = t425*vertices[0](2);
-              const double t858 = t778*t857;
-              const double t860 = vertices[2](0)*vertices[0](2);
-              const double t861 = t860*t601;
-              const double t864 = vertices[1](0)*vertices[7](1);
-              const double t865 = t864*t210;
-              const double t866 = t860*t617;
-              const double t867 = t233*t481;
-              const double t868 = t429*vertices[3](1);
-              const double t869 = t233*t868;
-              const double t870 = t449*vertices[7](2);
-              const double t871 = t140*t870;
-              const double t872 = t337*t204;
-              const double t873 = t140*t780;
-              const double t874 = t230*t712;
-              const double t875 = t449*vertices[4](2);
-              const double t876 = t140*t875;
-              const double t877 = t230*t714;
-              const double t878 = t337*t198;
-              const double t879 = -t560*t419+t858-t846*t833+t861+t580*t368-t837*t42+t865+t866+t867-t869+t871+t872+t873+t874-t876-t877-t878;
-              const double t884 = t559*t26;
-              const double t885 = t679*eta;
-              const double t887 = vertices[0](0)*vertices[7](2);
-              const double t888 = t887*zeta;
-              const double t889 = t778*t888;
-              const double t891 = t222*t651;
-              const double t893 = vertices[0](1)*t350;
-              const double t894 = vertices[7](0)*vertices[2](2);
-              const double t895 = t894*xi;
-              const double t896 = t893*t895;
-              const double t897 = t330*t485;
-              const double t898 = t697*t514;
-              const double t899 = t893*t725;
-              const double t900 = t697*t655;
-              const double t901 = t222*t604;
-              const double t903 = t255*t586;
-              const double t906 = t884+t885*t623+t889+t721*t81+t891-t721*t84+t896-t897+t898-t899+t900+t901+t704*t833+t903-t885*t353+t885*t462;
-              const double t907 = t697*t426;
-              const double t908 = vertices[1](0)*vertices[5](1);
-              const double t909 = t908*zeta;
-              const double t913 = t893*t806;
-              const double t914 = t222*t450;
-              const double t915 = t222*t555;
-              const double t917 = t302*vertices[5](2);
-              const double t918 = t360*t917;
-              const double t919 = t393*t524;
-              const double t920 = t358*t321;
-              const double t921 = t412*t86;
-              const double t922 = t290*t547;
-              const double t923 = vertices[7](0)*vertices[1](1);
-              const double t924 = t923*t187;
-              const double t925 = t233*t714;
-              const double t926 = t650*vertices[4](1);
-              const double t927 = t222*t926;
-              const double t928 = -t907+t909*t502-t721*t89+t608*t725+t913-t914+t915-t608*t895+t918+t919+t920-t921+t922+t924+t925-t927;
-              const double t930 = vertices[7](1)*t350;
-              const double t931 = t930*vertices[3](2);
-              const double t932 = t620*t931;
-              const double t933 = t412*t500;
-              const double t935 = 2.0*t413*t72;
-              const double t936 = t341*t342;
-              const double t937 = t414*vertices[2](2);
-              const double t938 = t366*t937;
-              const double t940 = 2.0*t413*t74;
-              const double t941 = t341*t91;
-              const double t942 = t520*vertices[5](2);
-              const double t944 = t341*t386;
-              const double t945 = t363*vertices[4](1);
-              const double t946 = t444*t945;
-              const double t947 = t705*vertices[4](2);
-              const double t949 = 2.0*t812*t947;
-              const double t950 = t559*t350;
-              const double t952 = t824*t840;
-              const double t953 = t233*t712;
-              const double t954 = t252*t822;
-              const double t955 = t366*t114;
-              const double t956 = t932+t933+t935+t936+t938-t940-t941+t413*t942-t944+t946+t949-t950*t84-t952-t953-t954-t955;
-              const double t957 = t559*t931;
-              const double t958 = vertices[2](0)*vertices[1](1);
-              const double t959 = t958*t162;
-              const double t960 = t252*t481;
-              const double t961 = t44*xi;
-              const double t963 = vertices[7](0)*vertices[2](1);
-              const double t964 = t963*xi;
-              const double t966 = t252*t843;
-              const double t967 = t923*xi;
-              const double t969 = t697*zeta;
-              const double t970 = t480*vertices[3](1);
-              const double t972 = t480*vertices[7](1);
-              const double t975 = vertices[6](2)*xi;
-              const double t976 = t975*zeta;
-              const double t977 = t586*t976;
-              const double t978 = t824*t848;
-              const double t979 = vertices[3](0)*eta;
-              const double t980 = t979*vertices[4](1);
-              const double t982 = 2.0*t252*t980;
-              const double t983 = t444*t364;
-              const double t984 = vertices[7](0)*vertices[4](1);
-              const double t985 = t393*t984;
-              const double t986 = t824*t850;
-              const double t987 = t957-t959-t960-t721*t961+t704*t964+t966-t704*t967-t969*t970+t969*t972-t828*t521+t977+t978+t982-t983+t985+t986;
-              const double t991 = t252*t734;
-              const double t992 = t309*t297;
-              const double t993 = t824*t857;
-              const double t994 = t156*t870;
-              const double t996 = t252*t384;
-              const double t997 = t334*xi;
-              const double t998 = t252*t997;
-              const double t1000 = 2.0*t812*t510;
-              const double t1001 = t15*vertices[7](2);
-              const double t1004 = t979*vertices[0](1);
-              const double t1006 = 2.0*t252*t1004;
-              const double t1007 = t432*vertices[3](1);
-              const double t1008 = t252*t1007;
-              const double t1009 = t156*t875;
-              const double t1010 = t730*vertices[3](1);
-              const double t1011 = t252*t1010;
-              const double t1012 = t730*vertices[7](1);
-              const double t1013 = t252*t1012;
-              const double t1014 = t950*t96+t991+t992-t993-t994+t721*t106-t996+t998+t1000-t950*t1001+t828*t526-t1006+t1008+t1009-t1011+t1013;
-              const double t1016 = 2.0*t812*t517;
-              const double t1019 = t412*vertices[4](1);
-              const double t1020 = t252*t1019;
-              const double t1021 = t824*t888;
-              const double t1022 = t739*t396;
-              const double t1024 = 2.0*t828*t96;
-              const double t1025 = t252*t708;
-              const double t1026 = t638*t210;
-              const double t1027 = vertices[4](0)*vertices[3](2);
-              const double t1028 = t614*t1027;
-              const double t1029 = vertices[0](0)*vertices[2](2);
-              const double t1030 = t1029*xi;
-              const double t1032 = 2.0*t812*t1030;
-              const double t1034 = t290*t83;
-              const double t1035 = t290*t350;
-              const double t1038 = t290*t91;
-              const double t1039 = -t1016+t580*t57-t580*t13-t1020-t1021-t1022+t1024+t1025+t1026-t1028-t1032-t821*t384-t1034-t1035*t74+t821*t997+t1038;
-              const double t1041 = t290*t25;
-              const double t1042 = t739*t734;
-              const double t1043 = t334*t187;
-              const double t1044 = 2.0*t1043;
-              const double t1045 = vertices[7](0)*vertices[5](1);
-              const double t1046 = t1045*xi;
-              const double t1049 = t156*t947;
-              const double t1050 = t78*xi;
-              const double t1054 = t341*t83;
-              const double t1055 = t395*vertices[3](1);
-              const double t1056 = t739*t1055;
-              const double t1057 = t156*t465;
-              const double t1058 = t739*eta;
-              const double t1060 = t252*t853;
-              const double t1063 = t1041-t1042-t1044+t821*t1046-t821*t967-t1049-t1035*t1050+t950*t506-t950*t72+t1054+t1056-t1057-t1058*t766+t1060-t721*t343+t1058*t734;
-              const double t1064 = t35*xi;
-              const double t1067 = t559*t500;
-              const double t1069 = t290*t521;
-              const double t1070 = t290*t114;
-              const double t1071 = t290*t526;
-              const double t1074 = t341*t105;
-              const double t1075 = vertices[4](0)*vertices[6](1);
-              const double t1076 = t1075*xi;
-              const double t1077 = t424*t1076;
-              const double t1078 = t341*t35;
-              const double t1079 = t156*t467;
-              const double t1080 = t341*t114;
-              const double t1081 = t156*t510;
-              const double t1082 = t788*zeta;
-              const double t1083 = t156*t1082;
-              const double t1085 = 2.0*t156*t850;
-              const double t1086 = -t950*t1064+t950*t74+t1067-t721*t435+t1069-t1070-t1071+t1058*t391-t1058*t384-t1074+t1077-t1078+t1079+t1080-t1081+t1083-t1085;
-              const double t1090 = t393*t426;
-              const double t1091 = t424*t569;
-              const double t1092 = t156*t517;
-              const double t1093 = t831*t945;
-              const double t1094 = t230*t926;
-              const double t1096 = t923*t189;
-              const double t1098 = t395*vertices[0](2);
-              const double t1099 = t824*t1098;
-              const double t1100 = t824*t826;
-              const double t1102 = t559*t86;
-              const double t1103 = t290*t545;
-              const double t1104 = t831*t364;
-              const double t1106 = t156*t610;
-              const double t1107 = -t1090-t1091+t1092-t1093+t1094+t721*t387-t1096+t787*t610-t1099+t1100+t721*t459-t1102-t1103+t1104-t846*t964-t1106;
-              const double t1109 = t341*t44;
-              const double t1110 = t156*t806;
-              const double t1111 = t424*zeta;
-              const double t1114 = t156*t1030;
-              const double t1115 = t444*t409;
-              const double t1116 = t893*vertices[7](2);
-              const double t1117 = t559*t1116;
-              const double t1119 = t893*vertices[4](2);
-              const double t1120 = t559*t1119;
-              const double t1123 = 2.0*t444*t325;
-              const double t1124 = t393*t430;
-              const double t1125 = t603*vertices[0](1);
-              const double t1126 = t233*t1125;
-              const double t1127 = t412*vertices[3](1);
-              const double t1128 = t739*t1127;
-              const double t1129 = t341*t961;
-              const double t1130 = t846*t967+t1109+t1110+t1111*t569+t1111*t766+t1114+t1115+t1117-t1111*t769-t1120-t1111*t1076-t1123-t1124-t1126-t1128-t1129;
-              const double t1132 = t300*t485;
-              const double t1133 = vertices[4](0)*vertices[5](1);
-              const double t1134 = t1133*eta;
-              const double t1136 = 2.0*t1134*t669;
-              const double t1137 = t156*t717;
-              const double t1138 = t341*t838;
-              const double t1139 = t393*t629;
-              const double t1140 = t499*vertices[0](0);
-              const double t1142 = 2.0*t1140*t311;
-              const double t1143 = t290*t783;
-              const double t1144 = t341*t106;
-              const double t1145 = t424*t576;
-              const double t1146 = t363*vertices[4](2);
-              const double t1147 = t768*t1146;
-              const double t1148 = t489*t176;
-              const double t1149 = t424*t497;
-              const double t1150 = t302*vertices[3](2);  
-              const double t1151 = t635*t1150;
-              const double t1152 = t464*vertices[7](1);
-              const double t1154 = t424*t396;
-              const double t1156 = t1132-t1136+t1137+t1138-t1139-t1142+t1143+t1144-t1145+t1147+t1148+t1149-t1151+t846*t1152+t1154-t560*t942;
-              const double t1157 = t424*t398;
-              const double t1159 = t778*zeta;
-              const double t1160 = t480*vertices[3](2);
-              const double t1162 = t302*vertices[5](1);
-              const double t1163 = t300*t1162;
-              const double t1164 = t454*xi;
-              const double t1167 = t302*vertices[2](2);
-              const double t1168 = t635*t1167;
-              const double t1171 = t341*zeta;
-              const double t1173 = t362*t356;
-              const double t1176 = t705*vertices[7](2);
-              const double t1178 = t705*vertices[3](2);
-              const double t1180 = t975*eta;
-              const double t1181 = t441*t1180;
-              const double t1182 = t523*vertices[3](2);
-              const double t1183 = t140*t1182;
-              const double t1184 = -t1157+t382*t766+t1159*t1160-t1163+t1159*t1164-t382*t734+t1168-t787*t895+t787*t725+t1171*t961-t1173-t1171*t838-t787*t806+t1159*t1176-t1159*t1178+t1181-t1183;
-              const double t1188 = t290*t798;
-              const double t1189 = t424*t984;
-              const double t1190 = t140*t857;
-              const double t1191 = t523*vertices[0](2);
-              const double t1192 = t140*t1191;
-              const double t1193 = vertices[5](0)*vertices[1](2);
-              const double t1194 = t183*vertices[3](1);
-              const double t1196 = 2.0*t1193*t1194;
-              const double t1197 = t183*vertices[0](1);
-              const double t1199 = 2.0*t1193*t1197;
-              const double t1200 = t860*t1162;
-              const double t1201 = t362*t1197;
-              const double t1202 = vertices[0](0)*vertices[4](2);
-              const double t1203 = t1202*zeta;
-              const double t1204 = t140*t1203;
-              const double t1205 = t230*t513;
-              const double t1206 = t480*vertices[7](2);
-              const double t1211 = t362*t1194;
-              const double t1212 = -t1171*t106-t1188-t1189-t1190+t1192-t1196+t1199+t1200-t1201-t1204-t1205-t1159*t1206+t1171*t42-t821*t972-t810*t610+t1211;
-              const double t1213 = vertices[7](1)*t340;
-              const double t1214 = t1213*zeta;
-              const double t1216 = t489*t1150;
-              const double t1218 = t334*t198;
-              const double t1219 = 2.0*t1218;
-              const double t1220 = t424*t595;
-              const double t1222 = t334*t196;
-              const double t1224 = 2.0*t1134*t747;
-              const double t1225 = t230*t769;
-              const double t1227 = t324*zeta;
-              const double t1229 = 2.0*t1227*t623;
-              const double t1230 = t424*t852;
-              const double t1232 = t483*vertices[4](1);
-              const double t1233 = t252*t1232;
-              const double t1234 = t489*t1167;
-              const double t1235 = t156*t780;
-              const double t1236 = -t1214*t1030+t1216+t1035*t1001-t1219-t1220-t1035*t96+t1222+t1224-t1225-t1035*t506-t1229+t1230+t1035*t72-t1233-t1234-t1235;
-              const double t1238 = t739*t481;
-              const double t1240 = 2.0*t828*t89;
-              const double t1241 = t334*t204;
-              const double t1242 = t255*t769;
-              const double t1243 = t739*t970;
-              const double t1244 = t586*eta;
-              const double t1246 = 2.0*t255*t1244;
-              const double t1250 = 2.0*t489*t692;
-              const double t1251 = t864*t747;
-              const double t1252 = vertices[1](0)*vertices[6](1);
-              const double t1253 = t1252*t490;
-              const double t1254 = t362*t945;
-              const double t1255 = t212*xi;
-              const double t1256 = t864*t1255;
-              const double t1257 = t453*t300;
-              const double t1258 = t290*vertices[3](1);
-              const double t1260 = 2.0*t1258*t297;
-              const double t1261 = t1252*t493;
-              const double t1262 = t1238+t1240+t1241+t1242-t1243-t1246+t1035*t1064+t1171*t343-t1250+t1251-t1253+t1254+t1256+t1257+t1260+t1261;
-              const double t1263 = t337*t692;
-              const double t1264 = t489*t165;
-              const double t1265 = t824*t462;
-              const double t1266 = t337*t1180;
-              const double t1268 = 2.0*t453*t1202;
-              const double t1269 = t489*t1180;
-              const double t1271 = t443*t623;
-              const double t1272 = t443*t542;
-              const double t1273 = t174*eta;
-              const double t1275 = 2.0*t337*t1273;
-              const double t1277 = 2.0*t337*t311;
-              const double t1279 = 2.0*t1258*t345;
-              const double t1280 = t479*t417;
-              const double t1281 = t443*t462;
-              const double t1282 = t864*t493;
-              const double t1283 = t864*t490;
-              const double t1284 = t443*t353;
-              const double t1285 = t1263+t1264+t1265-t1266+t1268+t1269+t821*t970+t1271+t1272-t1275+t1277-t1279+t1280+t1281-t1282+t1283-t1284;
-              const double t1291 = t393*t417;
-              const double t1292 = t393*t595;
-              const double t1293 = t728*xi;
-              const double t1294 = t727*t1293;
-              const double t1296 = 2.0*t156*t1182;
-              const double t1298 = 2.0*t290*t26;
-              const double t1299 = t393*t586;
-              const double t1300 = vertices[3](0)*vertices[6](2);
-              const double t1301 = t1300*xi;
-              const double t1302 = t443*t1301;
-              const double t1303 = t230*t655;
-              const double t1305 = 2.0*t156*t1191;
-              const double t1306 = t424*t629;
-              const double t1307 = t429*vertices[1](1);
-              const double t1309 = 2.0*t1307*t661;
-              const double t1310 = t377*t380;
-              const double t1311 = t424*t1140;
-              const double t1313 = 2.0*t156*t1203;
-              const double t1314 = t156*t857;
-              const double t1315 = t479*t513;
-              const double t1316 = t1291+t1292-t1294+t1296-t1298-t1299-t1302-t1303-t1305+t1306-t1309+t1310-t1311+t1313+t1314-t1315;
-              const double t1317 = t230*t1125;
-              const double t1318 = t595*zeta;
-              const double t1319 = t424*t1318;
-              const double t1320 = t638*t187;
-              const double t1322 = t328*t187;
-              const double t1323 = t377*t445;
-              const double t1325 = t252*t586;
-              const double t1326 = t479*t755;
-              const double t1327 = t606*t528;
-              const double t1328 = t233*t469;
-              const double t1330 = t393*t1318;
-              const double t1332 = t222*t629;
-              const double t1334 = t1317+t1319-t1320-t846*t643+t1322-t1323-t825*t462-t1325+t1326-t1327-t1328+t846*t569-t1330-t1171*t387+t1332-t846*t497;
-              const double t1338 = t328*t204;
-              const double t1340 = t290*t500;
-              const double t1342 = t230*t1140;
-              const double t1343 = t328*t196;
-              const double t1346 = 2.0*t328*t198;
-              const double t1347 = t697*t1318;
-              const double t1351 = t697*t1140;
-              const double t1352 = t393*t1140;
-              const double t1353 = t825*t1030+t1171*t84-t1338-t1171*t92-t1340-t704*t569+t1342-t1343+t704*t643+t1346-t1347+t810*t895-t810*t725+t969*t822+t1351+t1352;
-              const double t1355 = t697*t629;
-              const double t1356 = t290*t1116;
-              const double t1357 = t824*t780;
-              const double t1358 = t222*t751;
-              const double t1359 = t606*t520;
-              const double t1360 = t222*t683;
-              const double t1361 = t328*t176;
-              const double t1362 = t222*t1140;
-              const double t1363 = t222*t1125;
-              const double t1364 = t341*t86;
-              const double t1365 = vertices[2](0)*vertices[0](1);
-              const double t1366 = t1365*t198;
-              const double t1368 = t290*t1119;
-              const double t1369 = t290*t128;
-              const double t1370 = t635*t174;
-              const double t1371 = -t969*t833-t1355-t1356+t1357+t1358+t1359-t1360-t1361-t1362-t1363-t1364-t1366+t704*t497+t1368+t1369+t1370;
-              const double t1374 = t479*t595;
-              const double t1375 = t424*t513;
-              const double t1376 = t424*t638;
-              const double t1377 = t230*t328;
-              const double t1378 = t489*t179;
-              const double t1379 = vertices[1](0)*t340;
-              const double t1380 = t30*vertices[7](2);
-              const double t1381 = t1379*t1380;
-              const double t1382 = t323*t508;
-              const double t1384 = t1379*t67;
-              const double t1386 = t620*zeta;
-              const double t1388 = 2.0*t1386*t65;
-              const double t1389 = t1379*t500;
-              const double t1390 = t930*vertices[0](2);
-              const double t1391 = t620*t1390;
-              const double t1392 = t341*t84;
-              const double t1393 = t8*vertices[4](2);
-              const double t1394 = t1379*t1393;
-              const double t1396 = -t1374+t1375+t1376+t1377+t1378+t1381+t1382+t1058*t970+t1384+t1258*t307+t1388-t1389-t1391-t1392-t1394-t1058*t481;
-              const double t1398 = 2.0*t1386*t11;
-              const double t1400 = 2.0*t1386*t16;
-              const double t1401 = t739*t708;
-              const double t1402 = t309*t196;
-              const double t1403 = t441*eta;
-              const double t1405 = 2.0*t1403*t747;
-              const double t1406 = t341*t92;
-              const double t1407 = t864*eta;
-              const double t1409 = 2.0*t1407*t531;
-              const double t1410 = t18*t1027;
-              const double t1412 = 2.0*t1407*t747;
-              const double t1413 = t18*t437;
-              const double t1414 = t330*t324;
-              const double t1415 = 2.0*t1414;
-              const double t1416 = t358*t15;
-              const double t1417 = t290*t79;
-              const double t1418 = t1252*eta;
-              const double t1420 = t736*t106;
-              const double t1421 = t736*t13;
-              const double t1422 = t1398+t1400-t1401-t1402+t1405+t1406+t1409-t1410-t1412+t1413+t1415+t1416-t1417+t1418*t490-t1420+t1421;
-              const double t1424 = t292*t8;
-              const double t1425 = t292*t5;
-              const double t1427 = 2.0*t736*t108;
-              const double t1428 = t424*t586;
-              const double t1429 = t18*t300;
-              const double t1430 = t736*t110;
-              const double t1431 = t18*t1202;
-              const double t1432 = t432*vertices[7](1);
-              const double t1433 = t252*t1432;
-              const double t1434 = xi*vertices[0](1);
-              const double t1435 = t495*t1434;
-              const double t1436 = t736*t112;
-              const double t1437 = t736*t115;
-              const double t1438 = t679*t542;
-              const double t1439 = t393*t852;
-              const double t1440 = t1162*vertices[1](2);
-              const double t1441 = t736*t1440;
-              const double t1443 = 2.0*t736*t117;
-              const double t1444 = vertices[7](0)*vertices[3](1);
-              const double t1445 = t739*t1444;
-              const double t1446 = t1424+t1425-t1427+t1428-t1429-t1430-t1431-t1433+t1435-t1436+t1437-t1438-t1439+t1441+t1443+t1445;
-              const double t1447 = t736*vertices[0](1);
-              const double t1449 = 2.0*t1447*t692;
-              const double t1450 = t1162*vertices[0](2);
-              const double t1451 = t736*t1450;
-              const double t1453 = t739*t595;
-              const double t1454 = t290*t84;
-              const double t1456 = 2.0*t290*t86;
-              const double t1458 = 2.0*t1447*t1273;
-              const double t1460 = t736*t38;
-              const double t1461 = t739*t513;
-              const double t1462 = t736*t45;
-              const double t1464 = 2.0*t328*t297;
-              const double t1465 = t736*t52;
-              const double t1466 = t736*t57;
-              const double t1467 = t349*t437;
-              const double t1469 = 2.0*t349*t300;
-              const double t1471 = 2.0*t736*t60;
-              const double t1472 = t1449-t1451+t1058*t396+t1453+t1454+t1456-t1458-t1058*t1055+t1460+t1461+t1462+t1464+t1465-t1466-t1467+t1469-t1471;
-              const double t1476 = t349*t1202;
-              const double t1477 = t739*t755;
-              const double t1478 = t620*t350;
-              const double t1480 = t736*t69;
-              const double t1481 = t736*t65;
-              const double t1482 = t328*t976;
-              const double t1483 = t252*t328;
-              const double t1485 = vertices[4](1)*t350;
-              const double t1486 = t1485*vertices[3](2);
-              const double t1487 = t620*t1486;
-              const double t1489 = 2.0*t1386*t13;
-              const double t1490 = t290*t89;
-              const double t1491 = t252*t513;
-              const double t1492 = t1485*vertices[0](2);
-              const double t1493 = t620*t1492;
-              const double t1494 = t1386*t106;
-              const double t1496 = t476*t531;
-              const double t1497 = t1379*t31;
-              const double t1498 = t1476-t1477-t1478*t1293-t1480+t1481-t1482+t1483+t1478*t343-t1487+t1489-t1490-t1491+t1493-4.0*t1494+t1496-t1497;
-              const double t1500 = t393*t328;
-              const double t1501 = t1379*t36;
-              const double t1502 = t377*t454;
-              const double t1503 = t635*t531;
-              const double t1505 = 2.0*t489*t174;
-              const double t1506 = t453*t1027;
-              const double t1507 = 2.0*t1506;
-              const double t1508 = t290*t96;
-              const double t1509 = t1162*vertices[3](2);
-              const double t1511 = t393*t769;
-              const double t1513 = 2.0*t453*t437;
-              const double t1515 = 2.0*t864*t531;
-              const double t1517 = 2.0*t792*t57;
-              const double t1518 = t792*t45;
-              const double t1519 = t1193*t528;
-              const double t1520 = t792*t653;
-              const double t1521 = -t505*t72+t1500-t1501+t1502-t1503-t1505+t1507-t1508-t1386*t1509-t1511-t1513-t1515+t1517-t1518+t1519-t1520;
-              const double t1523 = t302*vertices[4](2);
-              const double t1524 = t1365*t1523;
-              const double t1526 = 2.0*t792*t60;
-              const double t1528 = 2.0*t792*t65;
-              const double t1529 = vertices[0](1)*t340;
-              const double t1530 = t1529*zeta;
-              const double t1532 = t792*t16;
-              const double t1533 = t792*t69;
-              const double t1535 = 2.0*t792*t11;
-              const double t1536 = t292*t15;
-              const double t1538 = t792*t486;
-              const double t1539 = t792*vertices[0](1);
-              const double t1541 = 2.0*t1539*t1273;
-              const double t1542 = t1193*t520;
-              const double t1544 = 2.0*t1386*t57;
-              const double t1545 = t424*t417;
-              const double t1546 = t1379*t421;
-              const double t1548 = t1524+t1526-t1528+t1530*t702-t1532+t1533-t1535-t1536-t1530*t725+t1538+t1541-t1542-t1544-t1545+t1546-t367*t81;
-              const double t1549 = vertices[5](0)*vertices[2](2);
-              const double t1550 = t1549*zeta;
-              const double t1551 = t438*eta;
-              const double t1553 = 2.0*t1550*t1551;
-              const double t1554 = t650*t38;
-              const double t1555 = t1379*t115;
-              const double t1556 = t495*t687;
-              const double t1557 = t1379*t120;
-              const double t1561 = 2.0*t620*t42;
-              const double t1562 = t366*zeta;
-              const double t1564 = t363*vertices[5](2);
-              const double t1565 = t638*t1564;
-              const double t1566 = t638*t1146;
-              const double t1567 = t330*t30;
-              const double t1568 = 2.0*t1567;
-              const double t1569 = t330*t687;
-              const double t1570 = 2.0*t1569;
-              const double t1571 = t620*t57;
-              const double t1572 = t620*t11;
-              const double t1573 = t620*t65;
-              const double t1575 = 2.0*t620*t16;
-              const double t1576 = -t1553-t1554+t1555-t1556-t1557-t1407*t490+t1407*t493-t1561-t1562*t526+t1565-t1566+t1568+t1570+t1571-t1572-t1573-t1575;
-              const double t1580 = t330*t5;
-              const double t1581 = t330*t8;
-              const double t1582 = t674*t1293;
-              const double t1584 = 2.0*t330*t508;
-              const double t1585 = t674*t343;
-              const double t1586 = t324*t517;
-              const double t1588 = t638*t661;
-              const double t1590 = 2.0*t792*t13;
-              const double t1591 = t323*t324;
-              const double t1593 = 2.0*t324*t562;
-              const double t1594 = t792*t106;
-              const double t1596 = t792*t108;
-              const double t1598 = t792*t115;
-              const double t1600 = 2.0*t792*t117;
-              const double t1602 = 2.0*t638*t477;
-              const double t1603 = -t1562*t545-t1580-t1581+t1582-t1584-t1585-3.0*t1586-t1588-t1590-t1591+t1593+3.0*t1594+3.0*t1596-t1598-t1600+t1602;
-              const double t1604 = t958*t198;
-              const double t1606 = t358*t438;
-              const double t1607 = 2.0*t1606;
-              const double t1608 = t638*t591;
-              const double t1609 = t1162*vertices[2](2);
-              const double t1610 = t792*t1609;
-              const double t1611 = t792*t1509;
-              const double t1612 = t620*t13;
-              const double t1613 = t334*t162;
-              const double t1614 = t358*t51;
-              const double t1615 = t476*t1564;
-              const double t1616 = t620*t106;
-              const double t1619 = 2.0*t620*t103;
-              const double t1622 = 2.0*t358*t614;
-              const double t1624 = 2.0*t1227*t353;
-              const double t1625 = t324*t465;
-              const double t1626 = t1604+t1562*t547-t1607-t1608-t1610+t1611-t1612+t1613+t1614-t1615+3.0*t1616-t1619+t1035*t84+t1622+t1624-t1625;
-              const double t1628 = t358*t499;
-              const double t1629 = 2.0*t1628;
-              const double t1630 = t620*t1509;
-              const double t1632 = t620*t1609;
-              const double t1633 = t476*t1146;
-              const double t1634 = t620*t653;
-              const double t1635 = vertices[5](0)*vertices[1](1);
-              const double t1636 = t1635*t162;
-              const double t1637 = t620*t486;
-              const double t1638 = t328*t1564;
-              const double t1639 = t736*vertices[5](1);
-              const double t1641 = t824*t1030;
-              const double t1643 = t739*t489;
-              const double t1645 = t614*vertices[3](2);
-              const double t1646 = t1379*t1645;
-              const double t1647 = t739*t417;
-              const double t1648 = -t1629+t1630-t1258*t304-t1632+t1633-t1634+t1636+t1637-t1638+t1639*t636-t1641+t1386*t653+t1643-t1386*t486+t1646-t1647;
-              const double t1649 = t328*t1146;
-              const double t1650 = t328*t304;
-              const double t1651 = t334*t206;
-              const double t1652 = 2.0*t1651;
-              const double t1653 = t412*vertices[5](1);
-              const double t1655 = 2.0*t1653*t747;
-              const double t1656 = t252*t469;
-              const double t1657 = t1379*zeta;
-              const double t1659 = t1193*t1434;
-              const double t1661 = t923*t210;
-              const double t1663 = t358*t520;
-              const double t1665 = 2.0*t1653*t669;
-              const double t1666 = t328*t307;
-              const double t1668 = t429*vertices[3](2);
-              const double t1669 = t156*t1668;
-              const double t1670 = t323*t499;
-              const double t1671 = t765*t490;
-              const double t1672 = t1649-t1650-t1652-t1655+t1656+t1657*t1064-t1659-t1657*t421-t1661-t1657*t115+t1663+t1665+t1666+t1657*t120-t1669+t1670+t1671;
-              const double t1677 = t765*t493;
-              const double t1678 = t595*t490;
-              const double t1679 = t595*t493;
-              const double t1680 = t792*vertices[2](1);
-              const double t1683 = t733*zeta;
-              const double t1685 = t1529*t517;
-              const double t1686 = t309*t179;
-              const double t1688 = 2.0*t1683*t692;
-              const double t1690 = t469*t1150;
-              const double t1692 = t469*t165;
-              const double t1694 = t5*vertices[7](2);
-              const double t1695 = t730*t1694;
-              const double t1697 = -t1677-t1678+t1679+t1680*t1146-t708*t304-t1683*t502-t1685+t1686+t1688+t1683*t636-t1690+t751*t502-t1692+t1530*t517-t1695-t751*t636;
-              const double t1698 = t1529*t702;
-              const double t1699 = t469*t1167;
-              const double t1700 = t469*t176;
-              const double t1701 = t768*eta;
-              const double t1703 = t1529*t725;
-              const double t1704 = t469*t179;
-              const double t1705 = t18*t509;
-              const double t1706 = t730*t13;
-              const double t1707 = t674*t10;
-              const double t1709 = vertices[3](0)*t340;
-              const double t1710 = t1709*vertices[0](1);
-              const double t1711 = t252*t1710;
-              const double t1713 = t730*t81;
-              const double t1714 = t328*t917;
-              const double t1715 = t730*t506;
-              const double t1717 = -t1698+t1699-t1700+t1701*t304+t1703-t1704+t1705+t1706-t1707-t433*t81+t1711-t969*t1046-t1713+t1714+t1715+t969*t967;
-              const double t1720 = t730*t110;
-              const double t1721 = t979*vertices[7](1);
-              const double t1722 = t739*t1721;
-              const double t1723 = t447*t162;
-              const double t1724 = t674*t106;
-              const double t1725 = t768*t477;
-              const double t1726 = t836*vertices[4](1);
-              const double t1727 = t252*t1726;
-              const double t1728 = t1562*t89;
-              const double t1730 = t441*t747;
-              const double t1731 = t765*t477;
-              const double t1733 = 2.0*t233*t751;
-              const double t1734 = t417*eta;
-              const double t1735 = t739*t1734;
-              const double t1736 = t309*t692;
-              const double t1737 = t358*t528;
-              const double t1738 = t1365*t1564;
-              const double t1739 = t733*t502;
-              const double t1740 = t433*t89-t1720+t1722-t1723-t1724-t1725+t1727-4.0*t1728-t1730+t1731+t1733+t1735-t1736-t1737+t1738+t1739;
-              const double t1741 = t328*t1523;
-              const double t1743 = 2.0*t1562*t92;
-              const double t1744 = t733*t636;
-              const double t1745 = t733*t692;
-              const double t1746 = t1365*t1146;
-              const double t1749 = t730*zeta;
-              const double t1751 = t469*t502;
-              const double t1753 = t469*t636;
-              const double t1754 = t1365*t304;
-              const double t1755 = t447*t179;
-              const double t1756 = t252*t970;
-              const double t1758 = t1379*t1064;
-              const double t1759 = -t1741+t1743-t1744-t1745-t1746-t1418*t493+t1386*t1609+t1749*t110-t1751-t1749*t506+t1753+t1754-t1755+t1756+t1749*t1694-t1758;
-              const double t1763 = t1365*t297;
-              const double t1766 = 2.0*t1539*t311;
-              const double t1768 = 2.0*t252*t1734;
-              const double t1769 = t1365*t917;
-              const double t1770 = t1365*t307;
-              const double t1771 = t679*t437;
-              const double t1772 = vertices[4](0)*vertices[7](2);
-              const double t1773 = t377*t1772;
-              const double t1774 = vertices[1](0)*vertices[2](1);
-              const double t1775 = t1774*t162;
-              const double t1776 = t727*t105;
-              const double t1777 = t727*t10;
-              const double t1778 = t727*t342;
-              const double t1779 = t366*t128;
-              const double t1780 = t1379*t105;
-              const double t1781 = t1379*t35;
-              const double t1782 = -t1749*t13-t1763+t367*t667-t1766-t1768-t1769-t1770-t1771+t1773+t1775-t1776+t1777-t1778-t1779+t1780+t1781;
-              const double t1783 = t568*eta;
-              const double t1785 = vertices[2](0)*t302;
-              const double t1786 = t1785*vertices[1](2);
-              const double t1787 = t156*t1786;
-              const double t1788 = t1379*t114;
-              const double t1789 = t377*t1027;
-              const double t1790 = t1379*t44;
-              const double t1791 = t1379*t342;
-              const double t1792 = t1379*t91;
-              const double t1793 = t443*t887;
-              const double t1794 = t864*zeta;
-              const double t1796 = t443*t1202;
-              const double t1797 = t443*t444;
-              const double t1799 = 2.0*t1783*t297;
-              const double t1800 = t447*t490;
-              const double t1801 = t1529*t623;
-              const double t1802 = t447*t493;
-              const double t1803 = t447*t502;
-              const double t1804 = -t1783*t304+t1787-t1788-t1789-t1790-t1791+t1792+t1793+t1794*t1146-t1796-t1797+t1799+t1800+t1801-t1802-t1803;
-              const double t1806 = t447*t636;
-              const double t1808 = t447*t531;
-              const double t1810 = t1379*t386;
-              const double t1811 = t674*t105;
-              const double t1812 = t1635*t1167;
-              const double t1813 = t674*t342;
-              const double t1814 = t447*t747;
-              const double t1815 = t366*vertices[1](1);
-              const double t1817 = t733*t174;
-              const double t1819 = 2.0*t1815*t297;
-              const double t1820 = vertices[1](1)*vertices[6](0);
-              const double t1821 = t1820*t477;
-              const double t1822 = t1635*t1150;
-              const double t1823 = t323*t364;
-              const double t1824 = t469*t210;
-              const double t1826 = 2.0*t447*t692;
-              const double t1827 = t1806+t1783*t307-3.0*t1808+t1810+t1811-t1812+t1813+t1814+t1815*t304-t1817-t1819+t1821+t1822+t1823+t1824+t1826;
-              const double t1830 = 2.0*t469*t174;
-              const double t1831 = t469*t168;
-              const double t1833 = t727*t35;
-              const double t1835 = 2.0*t469*t669;
-              const double t1836 = t595*t747;
-              const double t1837 = t443*t1027;
-              const double t1839 = 2.0*t595*t531;
-              const double t1840 = t309*t174;
-              const double t1841 = t595*t669;
-              const double t1842 = t733*t1150;
-              const double t1843 = t733*t1167;
-              const double t1846 = 2.0*t252*vertices[1](0)*t1551;
-              const double t1847 = t595*eta;
-              const double t1849 = 2.0*t1847*t747;
-              const double t1851 = t679*t444;
-              const double t1852 = -t1815*t307+t1830+t1831-t505*t42+t1833+t1835-t1836-t1837+t1839-t1840-t1841+t1842-t1843+t1846+t1849+t378*t826+t1851;
-              const double t1856 = t1774*t917;
-              const double t1857 = t1774*t1523;
-              const double t1859 = t765*eta;
-              const double t1861 = t432*t435;
-              const double t1863 = t736*t114;
-              const double t1864 = t366*t91;
-              const double t1865 = t736*t105;
-              const double t1866 = t377*t888;
-              const double t1867 = t447*t1150;
-              const double t1869 = 2.0*t483*t106;
-              const double t1871 = 2.0*t483*t110;
-              const double t1872 = t736*t10;
-              const double t1873 = t620*t10;
-              const double t1874 = t483*t1509;
-              const double t1875 = -t1856+t1857-t378*t1098-t1859*t490-t1861+t1859*t493-t1863+t1864+t1865+t1866-t1867-t1869+t1871-t1872+t1873-t1874;
-              const double t1876 = t412*vertices[4](2);
-              const double t1877 = t18*t1876;
-              const double t1878 = t18*t454;
-              const double t1879 = t432*t459;
-              const double t1881 = t792*t114;
-              const double t1882 = t483*t1609;
-              const double t1883 = t366*t36;
-              const double t1884 = t483*t486;
-              const double t1885 = vertices[2](0)*vertices[7](1);
-              const double t1886 = t1885*zeta;
-              const double t1888 = t412*vertices[0](2);
-              const double t1889 = t18*t1888;
-              const double t1890 = t330*t1162;
-              const double t1891 = t908*t174;
-              const double t1892 = t441*t210;
-              const double t1893 = 2.0*t1892;
-              const double t1895 = 2.0*t441*t212;
-              const double t1896 = t441*t174;
-              const double t1897 = 2.0*t1896;
-              const double t1898 = t425*t340;
-              const double t1900 = t1877+t1878+t1879-t1847*t493+t1881+t1882-t1883-t1884+t1886*t1564-t1889+t1890+t1891-t1893+t1895-t1897-t1898*t838;
-              const double t1902 = t979*vertices[4](2);
-              const double t1904 = 2.0*t18*t1902;
-              const double t1905 = t979*vertices[0](2);
-              const double t1907 = 2.0*t18*t1905;
-              const double t1908 = t441*t168;
-              const double t1909 = 2.0*t1908;
-              const double t1911 = t337*t165;
-              const double t1912 = t337*t174;
-              const double t1914 = 2.0*t337*t168;
-              const double t1915 = t483*t42;
-              const double t1916 = t483*t38;
-              const double t1917 = t337*t179;
-              const double t1918 = t650*t42;
-              const double t1919 = t908*t1150;
-              const double t1920 = t908*t1167;
-              const double t1922 = vertices[7](1)*vertices[2](2)*xi;
-              const double t1924 = t18*t517;
-              const double t1925 = t18*t623;
-              const double t1926 = -t1904+t1907-t1909+t1847*t490-t1911+t1912+t1914+t1915+t1916-t1917+t1918-t1919+t1920+t505*t1922-t1924+t1925;
-              const double t1927 = t18*t806;
-              const double t1930 = 2.0*t484*t106;
-              const double t1931 = t739*t638;
-              const double t1933 = t441*t1150;
-              const double t1934 = t441*t1167;
-              const double t1935 = t887*eta;
-              const double t1936 = t18*t1935;
-              const double t1937 = t1027*xi;
-              const double t1938 = t443*t1937;
-              const double t1939 = t18*t1164;
-              const double t1940 = t441*t179;
-              const double t1942 = 2.0*t300*t687;
-              const double t1943 = t441*t165;
-              const double t1944 = t864*t189;
-              const double t1945 = t123*vertices[0](2);
-              const double t1946 = t1820*t1945;
-              const double t1947 = t908*t162;
-              const double t1948 = t739*t980;
-              const double t1949 = -t1927+t1898*t42+t1930-t1931-t505*t459+t1933-t1934+t1936+t1938-t1939+t1940-t1942+t1943+t1944-t1946-t1947-t1948;
-              const double t1952 = t449*eta;
-              const double t1955 = 2.0*t360*t189;
-              const double t1956 = t679*t1027;
-              const double t1958 = 2.0*t292*t30;
-              const double t1959 = t337*t196;
-              const double t1961 = t864*t212;
-              const double t1962 = t864*t187;
-              const double t1964 = t441*t162;
-              const double t1966 = t1774*t297;
-              const double t1968 = t324*t300;
-              const double t1970 = t499*t437;
-              const double t1971 = t1952*t1001-t1955+t1956-t1958+t1959-t1952*t96-t1961-t1962-t1952*t506+t1964-t1111*t396-t1966-t351*t1937-t1968+t1111*t398+t1970;
-              const double t1973 = 2.0*t756*t661;
-              const double t1975 = 2.0*t349*t465;
-              const double t1976 = vertices[4](0)*t302;
-              const double t1977 = t1976*vertices[1](2);
-              const double t1978 = t18*t1977;
-              const double t1980 = 2.0*t252*t1244;
-              const double t1981 = t309*t204;
-              const double t1984 = 2.0*t756*t477;
-              const double t1986 = 2.0*t337*t345;
-              const double t1987 = t727*eta;
-              const double t1989 = t252*t1847;
-              const double t1990 = vertices[5](0)*t302;
-              const double t1991 = t1990*vertices[0](2);
-              const double t1992 = t18*t1991;
-              const double t1993 = t334*t917;
-              const double t1995 = t334*t1523;
-              const double t1996 = t958*t917;
-              const double t1997 = t1976*vertices[0](2);
-              const double t1998 = t18*t1997;
-              const double t1999 = t1973+t1975+t1978+t1980-t1981+t969*t384-t1984+t1986+t1987*t84-t1989+t1992-t1993+t1657*t838+t1995+t1996-t1998;
-              const double t2001 = t958*t1523;
-              const double t2002 = t679*t1937;
-              const double t2003 = t650*t1922;
-              const double t2004 = t779*t69;
-              const double t2005 = t779*t45;
-              const double t2006 = t923*t212;
-              const double t2007 = t779*t110;
-              const double t2008 = t650*t459;
-              const double t2009 = t779*t13;
-              const double t2010 = t1635*t174;
-              const double t2011 = t349*zeta;
-              const double t2013 = 2.0*t2011*t465;
-              const double t2014 = t1379*t106;
-              const double t2016 = 2.0*t292*t59;
-              const double t2017 = t292*t51;
-              const double t2018 = t414*vertices[3](2);
-              const double t2020 = t768*t198;
-              const double t2021 = -t2001-t2002-t2003-t2004+t2005+t2006+t2007+t2008+t2009-t2010-t2013-t2014+t2016-t2017+t1562*t2018+t2020;
-              const double t2022 = t425*eta;
-              const double t2023 = t2022*t72;
-              const double t2025 = t358*t59;
-              const double t2026 = 2.0*t2025;
-              const double t2027 = t360*t187;
-              const double t2028 = 2.0*t2027;
-              const double t2029 = t360*t204;
-              const double t2030 = t230*t417;
-              const double t2032 = 2.0*t779*t106;
-              const double t2033 = t377*t850;
-              const double t2034 = t360*t196;
-              const double t2035 = t377*t840;
-              const double t2036 = t360*t198;
-              const double t2037 = 2.0*t2036;
-              const double t2038 = t360*t206;
-              const double t2039 = 2.0*t2038;
-              const double t2040 = t779*t108;
-              const double t2041 = t377*t848;
-              const double t2042 = t360*t162;
-              const double t2044 = 2.0*t2022*t74;
-              const double t2045 = t779*t1509;
-              const double t2046 = t447*t165;
-              const double t2047 = -4.0*t2023-t2026+t2028-t2029+t2030-t2032-t2033-t2034+t2035+t2037+t2039-t2040-t2041-t2042+t2044-t2045-t2046;
-              const double t2054 = t779*t653;
-              const double t2055 = t779*t1609;
-              const double t2056 = t447*t174;
-              const double t2057 = 2.0*t2056;
-              const double t2059 = 2.0*t514*t692;
-              const double t2060 = t290*t11;
-              const double t2061 = t377*t857;
-              const double t2062 = t1774*t198;
-              const double t2064 = 2.0*t484*t110;
-              const double t2065 = t779*t486;
-              const double t2066 = t679*t887;
-              const double t2067 = t736*t25;
-              const double t2068 = t727*t78;
-              const double t2069 = t727*t83;
-              const double t2070 = t620*t25;
-              const double t2071 = t349*t870;
-              const double t2073 = t2054+t2055+t2057+t2059+t2060+t2061-t2062-t2064-t2065-t2066+t2067-t2068+t2069-t2070+t2071+t484*t1509;
-              const double t2075 = 2.0*t2011*t623;
-              const double t2076 = t1379*t83;
-              const double t2077 = t679*t1202;
-              const double t2079 = 2.0*t792*t25;
-              const double t2083 = t449*t1001;
-              const double t2084 = t674*t78;
-              const double t2085 = t674*t83;
-              const double t2086 = t595*t210;
-              const double t2087 = t309*t198;
-              const double t2088 = t479*t469;
-              const double t2089 = t349*t875;
-              const double t2090 = t586*t917;
-              const double t2091 = t586*t1523;
-              const double t2092 = t2075-t2076+t2077-t2079-t484*t653-t484*t1609+t394*t1076-t2083+t2084-t2085-t2086+t2087+t2088-t2089-t2090+t2091;
-              const double t2094 = t349*t1027;
-              const double t2095 = 2.0*t2094;
-              const double t2096 = t768*t917;
-              const double t2098 = 2.0*t1232*t669;
-              const double t2099 = t768*t1523;
-              const double t2101 = 2.0*t1847*t531;
-              const double t2102 = t449*t96;
-              const double t2104 = 2.0*t2011*t562;
-              const double t2105 = t586*t187;
-              const double t2106 = t586*t204;
-              const double t2108 = t586*t196;
-              const double t2110 = 2.0*t708*t297;
-              const double t2111 = t360*t1523;
-              const double t2112 = t860*t687;
-              const double t2114 = 2.0*t349*t562;
-              const double t2115 = t736*t340;
-              const double t2117 = t2095+t2096-t2098-t2099-t2101+t2102+t2104-t2105+t2106+t1952*t72+t2108+t2110-t2111+t2112-t2114+t2115*t961;
-              const double t2119 = t736*t419;
-              const double t2120 = t736*t415;
-              const double t2123 = 2.0*t349*t467;
-              const double t2124 = t736*vertices[6](1);
-              const double t2127 = t485*vertices[1](2);
-              const double t2129 = t377*t826;
-              const double t2130 = t363*vertices[0](2);
-              const double t2132 = t363*vertices[1](2);
-              const double t2135 = t377*t1098;
-              const double t2136 = t377*t444;
-              const double t2138 = 2.0*t349*t610;
-              const double t2140 = -t2115*t106-t2119+t2120-t1987*t368-t2123-t2124*t1564+t2124*t1146-t2022*t2127-t2129-t2124*t2130+t2124*t2132+t1987*t371+t2135+t2136+t2138+t1987*t13;
-              const double t2145 = t437*xi;
-              const double t2146 = t349*t2145;
-              const double t2147 = t362*t325;
-              const double t2148 = t1252*t1564;
-              const double t2150 = t449*t72;
-              const double t2151 = t1252*t1146;
-              const double t2152 = t360*t1564;
-              const double t2153 = t360*t1146;
-              const double t2155 = 2.0*t756*t1945;
-              const double t2161 = -t1987*t57+t2115*t343+t2146-t2147-t2148+t1987*t1064-t2150+t2151-t2152+t2153+t2155-t394*t569-t969*t997-t756*t1564-t1111*t497+t756*t1146;
-              const double t2162 = t156*t300;
-              const double t2166 = t156*t1202;
-              const double t2168 = t824*t454;
-              const double t2170 = t736*vertices[3](1);
-              const double t2172 = 2.0*t2170*t477;
-              const double t2173 = t727*t1050;
-              const double t2176 = 2.0*t2170*t591;
-              const double t2177 = t437*t15;
-              const double t2179 = t362*t123*vertices[0](1);
-              const double t2181 = 2.0*t2170*t1945;
-              const double t2183 = 2.0*t736*t76;
-              const double t2184 = -t2162+t1111*t576+t756*t2132-t756*t2130-t2166-t704*t1152-t2168-t2115*t387-t2172+t2173-t2115*t459-t2176-t2177+t2179+t2181+t2183;
-              const double t2186 = t736*t81;
-              const double t2187 = t736*eta;
-              const double t2189 = 2.0*t2187*t72;
-              const double t2190 = t736*t84;
-              const double t2192 = 2.0*t828*t106;
-              const double t2194 = t736*t89;
-              const double t2195 = t230*t469;
-              const double t2196 = t736*t92;
-              const double t2197 = t727*t81;
-              const double t2198 = t727*t667;
-              const double t2201 = 2.0*t620*t26;
-              const double t2202 = t586*t206;
-              const double t2203 = t727*t84;
-              const double t2204 = t360*t304;
-              const double t2205 = t360*t307;
-              const double t2206 = -t2186+t2189+t2190+t2192+t1035*t459+t2194+t2195-t2196+t2197-t2198+t1987*t65+t2201-t2202-t2203-t2204+t2205;
-              const double t2207 = t917*zeta;
-              const double t2208 = t360*t2207;
-              const double t2210 = t1523*zeta;
-              const double t2211 = t360*t2210;
-              const double t2212 = t360*t661;
-              const double t2213 = t360*t477;
-              const double t2216 = 2.0*t360*t1945;
-              const double t2218 = 2.0*t360*t297;
-              const double t2219 = t425*t72;
-              const double t2221 = t1774*t1564;
-              const double t2222 = t1774*t1146;
-              const double t2223 = t196*zeta;
-              const double t2225 = 2.0*t360*t2223;
-              const double t2227 = 2.0*t586*t198;
-              const double t2229 = 2.0*t425*t74;
-              const double t2230 = t349*t1082;
-              const double t2231 = t360*t976;
-              const double t2233 = t360*t345;
-              const double t2235 = -t2208-t1987*t74+t2211+t2212-3.0*t2213+t2216+t2218+3.0*t2219+t2221-t2222+t2225-t2227-t2229-t2230-t2231-t1171*t120-3.0*t2233;
-              const double t2239 = vertices[5](0)*vertices[7](1);
-              const double t2240 = t2239*eta;
-              const double t2242 = 2.0*t2240*t1255;
-              const double t2243 = t349*t623;
-              const double t2244 = t736*t551;
-              const double t2245 = t736*t557;
-              const double t2247 = t51*vertices[3](2);
-              const double t2248 = t727*t2247;
-              const double t2249 = t349*t510;
-              const double t2251 = t355*vertices[1](2);
-              const double t2253 = t792*t96;
-              const double t2254 = t674*t1050;
-              const double t2256 = 2.0*t1815*t747;
-              const double t2257 = t674*t81;
-              const double t2258 = t674*t667;
-              const double t2259 = t674*t84;
-              const double t2261 = 2.0*t469*t692;
-              const double t2262 = t469*t1180;
-              const double t2263 = t2242-t2243-t2244+t2245-t2240*t493-t2248+3.0*t2249-t853*t2251+t2253-t2254-t2256-t2257+t2258+t2259+t2261-t2262;
-              const double t2264 = t727*t112;
-              const double t2265 = t1252*zeta;
-              const double t2268 = t453*t465;
-              const double t2270 = 2.0*t453*t623;
-              const double t2272 = 2.0*t1734*t297;
-              const double t2273 = t792*vertices[3](1);
-              const double t2277 = 2.0*t2273*t661;
-              const double t2278 = t453*t1876;
-              const double t2279 = t2273*t477;
-              const double t2281 = t620*t783;
-              const double t2284 = 2.0*t2273*t1945;
-              const double t2285 = t453*t1902;
-              const double t2287 = t366*t2018;
-              const double t2288 = -t2264-t2265*t1146+t2265*t1564+t2268-t2270-t2272-t2273*t1146+t2273*t1564-t2277-t2278+4.0*t2279-t2281-t1680*t1564-t2284+3.0*t2285-t2287;
-              const double t2290 = t508*vertices[4](2);
-              const double t2291 = t727*t2290;
-              const double t2292 = t360*eta;
-              const double t2294 = 2.0*t2292*t297;
-              const double t2295 = t550*vertices[2](2);
-              const double t2297 = t792*t529;
-              const double t2299 = 2.0*t1734*t2223;
-              const double t2301 = t792*t540;
-              const double t2303 = t1379*t86;
-              const double t2304 = t550*vertices[3](2);
-              const double t2307 = t453*t562;
-              const double t2310 = t366*t521;
-              const double t2311 = t620*t798;
-              const double t2312 = t2291-t2294-t413*t2295+t2297+t2299-t1657*t84-t2301+t1657*t92+t2303-t1562*t2304+t560*t2018-t2307-t1478*t84+t1478*t81-t2310+t2311;
-              const double t2315 = t366*t526;
-              const double t2317 = 2.0*t413*t65;
-              const double t2320 = t1379*t92;
-              const double t2321 = t1379*t84;
-              const double t2323 = 2.0*t2170*t661;
-              const double t2324 = t366*t545;
-              const double t2325 = t366*t547;
-              const double t2327 = t341*t500;
-              const double t2328 = t586*t1146;
-              const double t2329 = vertices[4](1)*t340;
-              const double t2330 = t2329*t702;
-              const double t2332 = t1478*t1050-t1478*t667+t2315+t2317+t2292*t304-t2292*t307-t2320+t2321+t2323+t2324-t2325+t2115*t435+t2327-t2328+t2330+t1318*t1564;
-              const double t2338 = 2.0*t595*t477;
-              const double t2339 = t1193*t438;
-              const double t2340 = t377*t1030;
-              const double t2342 = 2.0*t1318*t661;
-              const double t2343 = t432*t81;
-              const double t2345 = 2.0*t1318*t477;
-              const double t2346 = t730*t459;
-              const double t2347 = t730*t435;
-              const double t2348 = t483*t72;
-              const double t2349 = t432*t89;
-              const double t2351 = 2.0*t751*t692;
-              const double t2352 = t650*t1001;
-              const double t2353 = t650*t506;
-              const double t2354 = t650*t96;
-              const double t2355 = -t394*t766-t1318*t1146-t2338+t2339+t2340-t2342+t2343+t2345-t2346+t2347-t2348-t2349-t2351+t2352-t2353-t2354;
-              const double t2358 = t650*t72;
-              const double t2359 = t230*t586;
-              const double t2361 = 2.0*t1701*t297;
-              const double t2363 = vertices[3](1)*t340;
-              const double t2364 = t2363*vertices[4](2);
-              const double t2365 = t736*t2364;
-              const double t2366 = t309*eta;
-              const double t2368 = 2.0*t2366*t345;
-              const double t2369 = t233*zeta;
-              const double t2371 = 2.0*t2369*t734;
-              const double t2374 = 2.0*t2369*t576;
-              const double t2376 = t483*t128;
-              const double t2377 = t768*t304;
-              const double t2378 = t366*t79;
-              const double t2379 = t727*t76;
-              const double t2380 = -t2115*t92+t2115*t89+t2358-t2359-t2361-t1701*t307-t2365+t2368+t2371+t1749*t459+t2374-t1749*t435+t2376-t2377+t2378-t2379;
-              const double t2382 = t366*t81;
-              const double t2383 = t768*t307;
-              const double t2385 = 2.0*t309*t345;
-              const double t2386 = t765*t531;
-              const double t2388 = t59*vertices[7](2);
-              const double t2389 = t727*t2388;
-              const double t2390 = t453*t1030;
-              const double t2391 = t595*t1564;
-              const double t2392 = t595*t1146;
-              const double t2394 = t595*t591;
-              const double t2395 = t366*t89;
-              const double t2399 = 2.0*t330*t601;
-              const double t2400 = t586*t176;
-              const double t2401 = t330*t817;
-              const double t2402 = -t2382+t2383-t2385-t2386-t1987*t1050+t2389-t2390-t2391+t2392-t505*t1001+t2394+3.0*t2395+t505*t96+t2399+t2400-t2401;
-              const double t2403 = t792*t76;
-              const double t2406 = t792*t92;
-              const double t2409 = 2.0*t366*t92;
-              const double t2410 = t779*t540;
-              const double t2411 = t923*t1255;
-              const double t2412 = t437*t528;
-              const double t2413 = t739*t766;
-              const double t2418 = 2.0*t323*t1194;
-              const double t2419 = t377*t300;
-              const double t2420 = t586*t1564;
-              const double t2421 = t1820*t490;
-              const double t2423 = -3.0*t2403+t1987*t667+t2406-t1987*t81-t2409+t2410-t2411+t2412+t2413-t1244*t304+t1244*t307+t950*t1050-t2418-t2419+t2420+t2421-t2022*t551;
-              const double t2429 = t1820*t493;
-              const double t2431 = t1635*t490;
-              const double t2432 = t449*t506;
-              const double t2434 = 2.0*t756*t591;
-              const double t2437 = 2.0*t586*t297;
-              const double t2439 = 2.0*t586*t345;
-              const double t2440 = t586*t2223;
-              const double t2441 = t679*t2145;
-              const double t2443 = 2.0*t1680*t1273;
-              const double t2446 = 2.0*t447*t1255;
-              const double t2449 = t1562*t521-t2429+t708*t307-t2431+t2432-t2434+t2022*t557-t2437+t2439-t2440+t2441-t2443+t1749*t81+t2446+t2022*t415-t2022*t419;
-              const double t2450 = t597*eta;
-              const double t2451 = t358*t2450;
-              const double t2453 = t616*eta;
-              const double t2454 = t358*t2453;
-              const double t2456 = t1635*t493;
-              const double t2457 = t425*t2290;
-              const double t2458 = t586*t307;
-              const double t2459 = t586*t304;
-              const double t2461 = t586*t2207;
-              const double t2462 = t586*t2210;
-              const double t2463 = t1635*t502;
-              const double t2464 = t1635*t692;
-              const double t2466 = 2.0*t586*t477;
-              const double t2468 = t377*t509;
-              const double t2469 = t2451-t1749*t89-t2454-t1987*t421+t2456-t2457-t2458+t2459-t2115*t81+t2461-t2462+t2463-t2464+t2466+t1734*t304+t2468;
-              const double t2472 = t1635*t636;
-              const double t2474 = 2.0*t586*t591;
-              const double t2475 = t768*t1564;
-              const double t2476 = t292*t817;
-              const double t2477 = t765*t1146;
-              const double t2478 = t765*t1564;
-              const double t2480 = t191*vertices[4](2);
-              const double t2482 = t390*zeta;
-              const double t2485 = t499*eta;
-              const double t2487 = 2.0*t2485*t610;
-              const double t2489 = t393*t1076;
-              const double t2492 = -t1734*t307-t2472-t2474-t2475+t2476-t2477+t2478+t394*t769-t1657*t2480+t2482*t1564+t1657*t371+t2487-t1478*t11-t2489-t1447*t502-t1530*t623;
-              const double t2494 = t736*vertices[1](1);
-              const double t2497 = 2.0*t2494*t692;
-              const double t2500 = t1990*vertices[1](2);
-              const double t2501 = t18*t2500;
-              const double t2503 = 2.0*t2494*t1273;
-              const double t2504 = t727*t11;
-              const double t2505 = t736*t2127;
-              const double t2507 = t485*vertices[0](2);
-              const double t2508 = t736*t2507;
-              const double t2510 = 2.0*t1639*t692;
-              const double t2513 = 2.0*t1639*t1273;
-              const double t2514 = t908*t502;
-              const double t2515 = t908*t692;
-              const double t2516 = t1447*t636-t2494*t636-t2497+t2494*t502-t2482*t1146-t2501+t2503-t2504-t2505-t1639*t502+t2508+t2510-t378*t1030-t2513-t2514+t2515;
-              const double t2519 = t489*t636;
-              const double t2521 = t908*t636;
-              const double t2522 = t441*t502;
-              const double t2523 = t923*t490;
-              const double t2524 = t441*t636;
-              const double t2526 = 2.0*t1774*t477;
-              const double t2527 = t768*zeta;
-              const double t2529 = t1252*t1945;
-              const double t2530 = t309*t1180;
-              const double t2531 = t290*t931;
-              const double t2532 = t779*t89;
-              const double t2534 = 2.0*t309*t311;
-              const double t2535 = t233*t926;
-              const double t2536 = t765*zeta;
-              const double t2539 = -t2519-t2482*t2132+t2521+t2522-t2523-t2524+t2526+t2527*t1564+t2529+t2530-t2531-t2532-t2534-t2535-t2536*t1564+t2536*t1146;
-              const double t2541 = t893*t610;
-              const double t2543 = 2.0*t1140*t477;
-              const double t2547 = 2.0*t638*t531;
-              const double t2549 = 2.0*t1140*t591;
-              const double t2550 = t230*t489;
-              const double t2551 = t362*t474;
-              const double t2555 = t779*t76;
-              const double t2556 = t290*t2018;
-              const double t2557 = t290*t2295;
-              const double t2558 = t483*t79;
-              const double t2559 = -t1140*t1564-t2541-t2543+t1140*t1146+t2482*t2130-t2547+t2549-t2550+t2551-t580*t371+t2115*t84-t2527*t1146+t2555+t2556+t2557-t2558;
-              const double t2562 = 2.0*t923*t531;
-              const double t2563 = t923*t493;
-              const double t2564 = t18*xi;
-              const double t2565 = t323*t2564;
-              const double t2566 = t341*t42;
-              const double t2567 = t923*t747;
-              const double t2570 = 2.0*t1244*t297;
-              const double t2572 = 2.0*t400*t345;
-              const double t2573 = t779*t529;
-              const double t2574 = t324*vertices[0](2);
-              const double t2575 = t736*t2574;
-              const double t2576 = t782*eta;
-              const double t2583 = t2562+t2563+t2565-t2566-t2567+t400*t304+t2570+t2572-t2573+t2575-t2576*t610-t2115*t110+t2115*t506+t2187*t2127+t1987*t11-t2187*t2507;
-              const double t2584 = t334*zeta;
-              const double t2587 = 2.0*t2584*t692;
-              const double t2588 = t736*t2290;
-              const double t2589 = t499*t610;
-              const double t2590 = t425*t2507;
-              const double t2591 = t425*t2127;
-              const double t2593 = t383*zeta;
-              const double t2596 = 2.0*t2593*t692;
-              const double t2598 = t425*t2574;
-              const double t2601 = 2.0*t590*t477;
-              const double t2604 = t432*t1694;
-              const double t2606 = -t2584*t502+t2587-t2588-t2589-t2590+t2591+t2584*t636+t2593*t502-t2596-t2593*t636+t2598+t2022*t2507+t2601-t426*t636+t426*t502+t2604-t1898*t96;
-              const double t2610 = t824*t1772;
-              const double t2611 = t432*t13;
-              const double t2615 = t499*t806;
-              const double t2617 = t432*t506;
-              const double t2618 = t425*t10;
-              const double t2619 = t1075*eta;
-              const double t2620 = t355*vertices[0](2);
-              const double t2622 = t432*t110;
-              const double t2623 = t1252*t477;
-              const double t2624 = t323*t614;
-              const double t2625 = t425*t551;
-              const double t2626 = t366*t2295;
-              const double t2627 = t366*t2304;
-              const double t2629 = 2.0*t499*t2145;
-              const double t2630 = -t2610-t2611+t1898*t16-t1898*t371+t1898*t2480+3.0*t2615-t2617-t2618-t2619*t2620+t2622-t2623-t2624+t2625-t2626+t2627-t2629;
-              const double t2631 = t444*t499;
-              const double t2632 = t425*t557;
-              const double t2633 = t739*t1232;
-              const double t2634 = t393*t766;
-              const double t2635 = t499*t1030;
-              const double t2637 = 2.0*t1680*t477;
-              const double t2640 = 2.0*t233*vertices[5](0)*t1197;
-              const double t2641 = t393*t569;
-              const double t2642 = t425*t415;
-              const double t2643 = t499*t2500;
-              const double t2644 = t674*t11;
-              const double t2646 = 2.0*t909*t692;
-              const double t2647 = t499*t1997;
-              const double t2648 = t441*zeta;
-              const double t2651 = t499*t1991;
-              const double t2652 = -t2631-t2632+t2633+t2634+t2635-t2637-t2640+t2641-t2642+t2643+t2644-t2646+t2647-t2648*t502-t909*t636-t2651;
-              const double t2655 = t1379*t96;
-              const double t2657 = t377*t887;
-              const double t2658 = t1379*t16;
-              const double t2659 = t499*t1977;
-              const double t2660 = t1379*t371;
-              const double t2661 = t1379*t2480;
-              const double t2662 = t736*vertices[4](1);
-              const double t2665 = t425*t419;
-              const double t2666 = t727*t106;
-              const double t2669 = t156*t437;
-              const double t2670 = t425*t25;
-              const double t2671 = t2648*t636-t2655+t1478*t106-t2657+t2658-t2659-t2660+t2661+t2662*t502-t2662*t636+t2665+t2666+t1657*t96-t1657*t16+t2669+t2670;
-              const double t2674 = t679*t1902;
-              const double t2677 = t1709*vertices[4](2);
-              const double t2678 = t18*t2677;
-              const double t2679 = t1709*vertices[0](2);
-              const double t2680 = t18*t2679;
-              const double t2682 = 2.0*t853*t747;
-              const double t2684 = 2.0*t853*t531;
-              const double t2687 = 2.0*t853*t669;
-              const double t2689 = 2.0*t853*t1255;
-              const double t2692 = t366*t13;
-              const double t2694 = t979*vertices[7](2);
-              const double t2695 = t679*t2694;
-              const double t2696 = -t2187*t415+t1478*t74+t2674-t1952*t1922-t1952*t38+t2678-t2680-t2682+t2684+t1952*t459+t2687-t2689+t2619*t490-t2619*t493+t2692+t2619*t2251-t2695;
-              const double t2699 = t824*t1027;
-              const double t2700 = t366*t110;
-              const double t2702 = t366*t120;
-              const double t2705 = 2.0*t366*t115;
-              const double t2708 = t18*eta;
-              const double t2710 = 2.0*t2708*t806;
-              const double t2713 = t730*vertices[7](2);
-              const double t2714 = t18*t2713;
-              const double t2717 = t464*vertices[7](2);
-              const double t2720 = t425*t16;
-              const double t2721 = t2699-3.0*t2700-t2702-t853*t490+t2705+t853*t493-t2115*t1694+t2710+t2115*t13-t1987*t106-t2714-t514*t502+t514*t636+t787*t2717+t2187*t419+t2720;
-              const double t2725 = 2.0*t2187*t65;
-              const double t2726 = t2363*vertices[0](2);
-              const double t2727 = t736*t2726;
-              const double t2728 = t290*t105;
-              const double t2729 = t727*t108;
-              const double t2730 = t443*t788;
-              const double t2731 = t727*t2574;
-              const double t2733 = t483*vertices[4](2);
-              const double t2734 = t679*t2733;
-              const double t2735 = t679*t1935;
-              const double t2736 = t2329*vertices[3](2);
-              const double t2737 = t736*t2736;
-              const double t2738 = t1529*vertices[3](2);
-              const double t2739 = t736*t2738;
-              const double t2740 = t1529*vertices[7](2);
-              const double t2741 = t736*t2740;
-              const double t2743 = t782*t806;
-              const double t2744 = t2576*t895+t1987*t1293-t2725+t2727+t2728+t2729-t2730-t2731-t1987*t343-t2734+t2735+t2737-t2739+t2741-t2187*t1440-t2743;
-              const double t2747 = t479*t391;
-              const double t2749 = t679*t1888;
-              const double t2750 = t499*t340;
-              const double t2754 = 2.0*t2187*t38;
-              const double t2755 = t292*zeta;
-              const double t2757 = 2.0*t2755*t314;
-              const double t2758 = t2329*vertices[7](2);
-              const double t2759 = t736*t2758;
-              const double t2760 = t679*t1098;
-              const double t2761 = t1213*vertices[0](2);
-              const double t2762 = t736*t2761;
-              const double t2763 = t1027*eta;
-              const double t2764 = t679*t2763;
-              const double t2766 = 2.0*t2187*t57;
-              const double t2767 = t366*vertices[0](2);
-              const double t2768 = t679*t2767;
-              const double t2770 = 2.0*t2022*t42;
-              const double t2772 = -t2115*t1064+t2747+t2187*t1450-t2749-t2750*t462+t2115*t115-t2754-t2757-t2759+t2760-t2762-t2764+t2766+t2768-t2770+t413*t2304;
-              const double t2774 = t727*t52;
-              const double t2775 = t1213*vertices[4](2);
-              const double t2776 = t736*t2775;
-              const double t2777 = t432*vertices[7](2);
-              const double t2778 = t18*t2777;
-              const double t2779 = t324*t353;
-              const double t2782 = t836*vertices[0](2);
-              const double t2783 = t18*t2782;
-              const double t2785 = t432*vertices[3](2);
-              const double t2786 = t18*t2785;
-              const double t2788 = t2329*t725;
-              const double t2791 = t425*t96;
-              const double t2792 = t2022*t38;
-              const double t2795 = t2750*t1030+t2774+t2776+t2778-t2779+t2022*t1440-t2022*t1450+t2783+t1898*t421-t2786-t885*t1301-t2788-t1898*t120+t1214*t462-t2791+4.0*t2792+t2576*t806;
-              const double t2801 = t2329*t623;
-              const double t2803 = 2.0*t2022*t11;
-              const double t2804 = t2329*t517;
-              const double t2805 = t449*t42;
-              const double t2807 = 2.0*t2022*t16;
-              const double t2808 = t449*t1922;
-              const double t2809 = t449*t38;
-              const double t2810 = t449*t459;
-              const double t2811 = t358*vertices[3](1);
-              const double t2813 = t425*t120;
-              const double t2816 = t324*t623;
-              const double t2817 = t366*t57;
-              const double t2819 = -t2801-t2803+t2804-t2805-t2807+t2808+t2809-t2810+t2811+t885*t1937-t2813+t853*t2620+t825*t1098+t2816-t2817+t2187*t551;
-              const double t2820 = t366*t65;
-              const double t2821 = t366*t16;
-              const double t2822 = t782*t610;
-              const double t2823 = t366*t67;
-              const double t2824 = t412*vertices[3](2);
-              const double t2825 = t679*t2824;
-              const double t2828 = 2.0*t2708*t353;
-              const double t2830 = t836*vertices[4](2);
-              const double t2831 = t18*t2830;
-              const double t2832 = t156*t509;
-              const double t2834 = t324*t1786;
-              const double t2838 = t479*t766;
-              const double t2839 = t2820+t2821+t2822+t2823+t2825+t1952*t42+t2828-t885*t2145-t2831+t2832-t2187*t557-t2834+t1657*t106+t700*t1206-t1657*t42-t2838;
-              const double t2841 = t1379*t838;
-              const double t2842 = t727*t368;
-              const double t2843 = t479*t734;
-              const double t2844 = t727*t371;
-              const double t2846 = t727*t13;
-              const double t2847 = t727*t57;
-              const double t2848 = t727*t1064;
-              const double t2850 = 2.0*t1886*t1945;
-              const double t2851 = t727*t421;
-              const double t2852 = t727*t65;
-              const double t2853 = vertices[4](0)*vertices[6](2);
-              const double t2854 = t2853*xi;
-              const double t2856 = t1785*vertices[0](2);
-              const double t2857 = t324*t2856;
-              const double t2859 = t727*t74;
-              const double t2861 = -t2841+t2842+t2843-t2844-t700*t1160-t2846+t2847-t2848-t2850+t2851-t2852+t2750*t2854+t2857-t700*t1164+t2859-t1886*t1146;
-              const double t2862 = t412*t1645;
-              const double t2866 = t824*t379;
-              const double t2868 = 2.0*t1886*t477;
-              const double t2870 = 2.0*t1886*t661;
-              const double t2873 = 2.0*t1886*t591;
-              const double t2874 = t887*xi;
-              const double t2876 = t736*t72;
-              const double t2882 = -t2862-t2750*t610-t1886*t2132+t1886*t2130+t2866+t2868-t2870-t2576*t725+t2873+t700*t2874-t2876-t885*t543+t700*t1937-t1657*t961+t382*t481-t382*t970;
-              const double t2885 = t443*t509;
-              const double t2889 = t864*t1564;
-              const double t2890 = t864*t1146;
-              const double t2891 = t864*t661;
-              const double t2893 = 2.0*t864*t477;
-              const double t2896 = 2.0*t2662*t1273;
-              const double t2898 = 2.0*t2662*t692;
-              const double t2900 = t1774*t307;
-              const double t2901 = t1252*t531;
-              const double t2902 = t508*t467;
-              const double t2903 = t1252*t1255;
-              const double t2904 = t2885-t885*t1098-t885*t1160-t382*t396+t2889-t2890-t2891+t2893+t382*t1055+t2896-t2898+t885*t647-t2900+t2901+t2902-t2903;
-              const double t2905 = t412*t31;
-              const double t2906 = t864*t1945;
-              const double t2907 = t1772*xi;
-              const double t2909 = t337*t297;
-              const double t2910 = t508*t806;
-              const double t2912 = 2.0*t441*t692;
-              const double t2913 = t337*t976;
-              const double t2914 = t1774*t304;
-              const double t2915 = t479*t384;
-              const double t2916 = t782*t895;
-              const double t2917 = t425*t1440;
-              const double t2919 = 2.0*t426*t692;
-              const double t2920 = t425*t1450;
-              const double t2922 = 2.0*t426*t311;
-              const double t2923 = t425*t38;
-              const double t2925 = t412*t103;
-              const double t2926 = t2905-t2906-t700*t2907-t2909-t2910-t2912+t2913+t2914-t2915-t2916-t2917-t2919+t2920+t2922-3.0*t2923-t2925;
-              const double t2928 = t425*t42;
-              const double t2929 = t782*t725;
-              const double t2930 = t425*t45;
-              const double t2931 = t499*t647;
-              const double t2932 = t425*t57;
-              const double t2933 = t425*t52;
-              const double t2934 = t425*t65;
-              const double t2936 = 2.0*t425*t11;
-              const double t2937 = t425*t69;
-              const double t2943 = t824*t380;
-              const double t2944 = t18*t2733;
-              const double t2945 = t2928+t2929-t2930+t2931-t2932-t2933+t2934+t2936+t2937-t721*t506-t560*t2127+t721*t110-t950*t11+t560*t2507-t2943+t2944;
-              const double t2946 = t559*t1645;
-              const double t2948 = t559*t31;
-              const double t2949 = t824*t445;
-              const double t2951 = t824*t510;
-              const double t2952 = t824*t562;
-              const double t2954 = t824*t444;
-              const double t2957 = t360*vertices[0](2);
-              const double t2962 = 2.0*t1794*t477;
-              const double t2964 = 2.0*t1794*t661;
-              const double t2965 = -t2946-t837*t16+t2948+t2949-t560*t2304+t2951-t2952+t885*t445-t2954-t413*t2018+t560*t2295+t2957+t413*t937-t413*t2507+t413*t2127-t2962+t2964;
-              const double t2969 = t453*t454;
-              const double t2970 = t324*t350;
-              const double t2972 = t730*vertices[3](2);
-              const double t2973 = t18*t2972;
-              const double t2974 = t674*t368;
-              const double t2975 = t674*t371;
-              const double t2976 = t674*t57;
-              const double t2977 = t674*t13;
-              const double t2978 = t395*vertices[3](2);
-              const double t2980 = t674*t1064;
-              const double t2982 = t674*t421;
-              const double t2983 = t674*t65;
-              const double t2987 = t674*t74;
-              const double t2988 = -t2969+t2970*t623+t2973-t2974+t2975-t2976+t2977+t885*t2978+t2980-t837*t2480-t2982+t2983-t2970*t353+t2970*t462-t1794*t1564-t2987;
-              const double t2989 = t1379*t42;
-              const double t2990 = t1774*eta;
-              const double t2993 = 2.0*t2648*t692;
-              const double t2994 = t620*t74;
-              const double t2997 = 2.0*t2990*t297;
-              const double t2998 = t2329*zeta;
-              const double t3001 = t1379*t343;
-              const double t3002 = t337*eta;
-              const double t3004 = 2.0*t3002*t345;
-              const double t3006 = t650*vertices[7](2);
-              const double t3007 = t140*t3006;
-              const double t3008 = t290*t10;
-              const double t3012 = t2989-t2990*t304+t2993+t2994-t700*t1176+t2997-t2998*t702+t2990*t307+t3001-t3004+t2998*t725-t3007-t3008+t1478*t368-t1478*t371-t1478*t13;
-              const double t3022 = t18*t2767;
-              const double t3024 = t739*t469;
-              const double t3026 = t620*t1119;
-              const double t3027 = t620*t1116;
-              const double t3028 = t437*t2453;
-              const double t3029 = t620*t128;
-              const double t3030 = t2998*t623-t1657*t343+t1478*t57-t1478*t1064-t2998*t517+t1478*t421+t700*t1178+t837*t371-t3022-t1478*t65-t3024+t1657*t387-t3026+t3027+t3028-t3029;
-              const double t3031 = vertices[3](0)*t302;
-              const double t3032 = t3031*vertices[0](2);
-              const double t3033 = t324*t3032;
-              const double t3034 = t3031*vertices[1](2);
-              const double t3035 = t324*t3034;
-              const double t3037 = 2.0*t18*t2763;
-              const double t3039 = 2.0*t413*t42;
-              const double t3041 = 2.0*t413*t13;
-              const double t3043 = 2.0*t413*t57;
-              const double t3045 = 2.0*t413*t106;
-              const double t3047 = 2.0*t413*t110;
-              const double t3049 = 2.0*t413*t115;
-              const double t3051 = 2.0*t413*t120;
-              const double t3053 = t679*t1160;
-              const double t3058 = t679*t647;
-              const double t3059 = -t3033+t3035+t3037+t3039+t3041-t3043-t3045-t3047+t3049-t3051-t413*t1509+t3053+t413*t1609+t825*t380+t825*t562-t825*t445-t3058;
-              const double t3064 = t1379*t387;
-              const double t3065 = t495*t1162;
-              const double t3070 = t1193*t2450;
-              const double t3074 = t18*t1160;
-              const double t3075 = t323*t945;
-              const double t3076 = t568*zeta;
-              const double t3078 = 2.0*t3076*t1273;
-              const double t3080 = -t413*t1440-t825*t510-t3064-t3065+t413*t1450+t413*t653-t810*t2717-t413*t486-t3070-t433*t1694+t1562*t2295+t433*t13-t3074-t3075-t3078-t1562*t937;
-              const double t3083 = t366*t1645;
-              const double t3084 = t393*t497;
-              const double t3085 = t393*t576;
-              const double t3088 = t341*t16;
-              const double t3089 = t341*t96;
-              const double t3090 = t824*t465;
-              const double t3091 = t341*t371;
-              const double t3092 = t341*t2480;
-              const double t3093 = t824*t467;
-              const double t3094 = t290*t2304;
-              const double t3095 = t290*t937;
-              const double t3096 = t1772*eta;
-              const double t3097 = t18*t3096;
-              const double t3098 = -t433*t110+t433*t506+t3083-t3084+t3085-t1035*t106+t810*t467-t3088+t3089+t3090+t3091-t3092-t3093-t3094-t3095-t3097;
-              const double t3100 = t290*vertices[6](1);
-              const double t3102 = t393*t396;
-              const double t3106 = t18*t1937;
-              const double t3113 = t290*t1645;
-              const double t3114 = t733*eta;
-              const double t3116 = 2.0*t3114*t345;
-              const double t3118 = t393*t398;
-              const double t3119 = t3100*t2620-t3102+t1035*t11+t721*t1694-t721*t13+t3106-t1171*t96+t950*t106+t1171*t16+t837*t96-t1171*t371+t1171*t2480+t3113-t3116+t828*t2304+t3118;
-              const double t3123 = t559*t103;
-              const double t3125 = t290*t1390;
-              const double t3126 = t341*t1393;
-              const double t3128 = 2.0*t828*t16;
-              const double t3130 = 2.0*t828*t11;
-              const double t3131 = t290*vertices[4](1);
-              const double t3133 = 2.0*t3131*t747;
-              const double t3135 = 2.0*t2240*t531;
-              const double t3137 = 2.0*t3131*t669;
-              const double t3139 = 2.0*t2240*t747;
-              const double t3141 = 2.0*t2240*t669;
-              const double t3142 = t860*t485;
-              const double t3143 = t341*t31;
-              const double t3144 = t447*t1180;
-              const double t3145 = -t828*t2295-t828*t2018-t560*t937-t3123+t828*t937+t3125+t3126-t3128-t3130-t3133-t3135+t3137+t3139-t3141-t3142+t3143-t3144;
-              const double t3150 = t337*vertices[3](2);
-              const double t3151 = t341*t36;
-              const double t3152 = t341*t1645;
-              const double t3155 = 2.0*t828*t110;
-              const double t3157 = 2.0*t2527*t1273;
-              const double t3160 = 2.0*t828*t120;
-              const double t3164 = t447*t1167;
-              const double t3165 = t290*t1486;
-              const double t3166 = t290*t1492;
-              const double t3168 = t720*t1645;
-              const double t3169 = -t3150+t3151-t3152+t378*t445-t3155+t3157-t1171*t1064+t3160+t1171*t421-t1035*t343+t1171*t115+t3164+t3165-t3166-t787*t467+t3168;
-              const double t3170 = t720*t500;
-              const double t3171 = t720*t67;
-              const double t3172 = t720*t1380;
-              const double t3173 = t51*xi;
-              const double t3175 = 2.0*t358*t3173;
-              const double t3176 = t720*t1393;
-              const double t3177 = t559*t1390;
-              const double t3182 = t140*t850;
-              const double t3184 = 2.0*t334*t297;
-              const double t3185 = t1193*t2453;
-              const double t3186 = t559*t1492;
-              const double t3187 = t720*t31;
-              const double t3188 = t720*t36;
-              const double t3189 = -t3170+t3171+t3172-t3175-t3176-t3177+t1035*t42-t1035*t38+t1035*t1293-t1035*t1922+t3182-t3184+t3185+t3186-t3187-t3188;
-              const double t3200 = t679*t543;
-              const double t3202 = 2.0*t413*t11;
-              const double t3203 = t334*t976;
-              const double t3206 = 2.0*t413*t16;
-              const double t3209 = -t560*t1609+t560*t1509-t560*t1450+t560*t1440-t810*t510-t560*t653+t560*t486+t721*t1064-t721*t115+t3200+t3202+t3203-t950*t42+t3206+t950*t38-t950*t1293;
-              const double t3210 = t679*t2978;
-              const double t3213 = t679*t445;
-              const double t3221 = 2.0*t413*t38;
-              const double t3223 = t1202*xi;
-              const double t3228 = -t3210-t825*t465+t825*t467-t3213+t950*t1922-t950*t459+t950*t343-t810*t2874-t837*t421+t837*t120-t3221+t787*t2874-t787*t3223+t1159*t702-t1159*t725-t1159*t623;
-              const double t3232 = 2.0*t1562*t57;
-              const double t3233 = t1820*t531;
-              const double t3235 = 2.0*t1562*t65;
-              const double t3236 = t824*t509;
-              const double t3238 = 2.0*t1562*t13;
-              const double t3240 = 2.0*t309*t168;
-              const double t3242 = t1562*t110;
-              const double t3245 = 2.0*t1562*t115;
-              const double t3248 = t290*t38;
-              const double t3249 = t290*t42;
-              const double t3250 = t290*t67;
-              const double t3253 = t3232-t3233-t3235-t3236-t3238-t3240+t1159*t517+4.0*t3242-t3245-t2240*t2620+t2240*t2251-t3248+t3249-t3250-t3100*t2251+t3100*t493;
-              const double t3254 = t290*t16;
-              const double t3255 = t1820*t1255;
-              const double t3258 = t437*t2450;
-              const double t3259 = t559*t1486;
-              const double t3261 = 2.0*t1635*t531;
-              const double t3262 = t437*vertices[3](1);
-              const double t3263 = t679*t788;
-              const double t3265 = 2.0*t290*t31;
-              const double t3266 = vertices[5](0)*vertices[2](1);
-              const double t3267 = t3266*zeta;
-              const double t3269 = 2.0*t3267*t1273;
-              const double t3271 = 2.0*t290*t103;
-              const double t3272 = t290*t106;
-              const double t3273 = t290*t120;
-              const double t3274 = t290*t110;
-              const double t3275 = t341*t1064;
-              const double t3276 = t3254+t3255-t3100*t490+t378*t462-t3258-t3259+t3261-t3262+t3263-t3265+t3269+t3271-t3272-t3273+t3274+t3275;
-              const double t3278 = t341*t115;
-              const double t3279 = t341*t421;
-              const double t3280 = t341*t120;
-              const double t3281 = t341*t1380;
-              const double t3283 = t341*t67;
-              const double t3284 = t349*t3006;
-              const double t3289 = t650*vertices[4](2);
-              const double t3290 = t156*t3289;
-              const double t3291 = t156*t3006;
-              const double t3292 = t349*t3289;
-              const double t3293 = t711*vertices[0](2);
-              const double t3294 = t156*t3293;
-              const double t3295 = t711*vertices[3](2);
-              const double t3296 = t156*t3295;
-              const double t3297 = -t3278-t3279+t3280-t3281+t2240*t490-t3283-t3284-t787*t1176+t787*t947-t825*t610+t825*t2854-t3290+t3291+t3292+t3294-t3296;
-              const double t3298 = t603*vertices[0](2);
-              const double t3299 = t156*t3298;
-              const double t3302 = t824*t1182;
-              const double t3303 = t523*vertices[7](2);
-              const double t3304 = t824*t3303;
-              const double t3306 = t824*t2854;
-              const double t3307 = t156*t888;
-              const double t3308 = t824*t610;
-              const double t3309 = t156*t3223;
-              const double t3310 = t156*t3034;
-              const double t3311 = t156*t3032;
-              const double t3312 = t437*t51;
-              const double t3314 = t156*t848;
-              const double t3315 = t156*t2856;
-              const double t3317 = 2.0*t349*t1203;
-              const double t3318 = -t3299+t810*t1176-t810*t947-t3302+t3304+t810*t789-t3306-t3307+t3308+t3309-t3310+t3311-t3312-t2970*t1301+t3314-t3315-t3317;
-              const double t3322 = t51*t350;
-              const double t3325 = t739*t1847;
-              const double t3329 = 2.0*t349*t1191;
-              const double t3331 = t836*vertices[0](1);
-              const double t3332 = t252*t3331;
-              const double t3333 = t479*t1444;
-              const double t3334 = t831*t1194;
-              const double t3337 = 2.0*t349*t857;
-              const double t3342 = -t3322*t462-t3322*t623-t3325+t3322*t353+t787*t510+t3329-t378*t2854-t3332-t3333-t3334-t1214*t2854-t3337+t1214*t610-t1159*t2874+t3322*t1301+t1159*t2907;
-              const double t3345 = t140*t3289;
-              const double t3346 = t140*t3298;
-              const double t3347 = t140*t3293;
-              const double t3348 = t140*t3295;
-              const double t3349 = t778*t3303;
-              const double t3350 = t792*t120;
-              const double t3351 = t778*t1182;
-              const double t3352 = t349*t1182;
-              const double t3355 = t606*t2450;
-              const double t3359 = t1709*vertices[4](1);
-              const double t3360 = t252*t3359;
-              const double t3361 = t378*t610-t1159*t1937+t3345+t3346-t3347+t3348-t3349+t3350+t3351-3.0*t3352+t351*t1098+t3355+t810*t3223+t351*t1160-t351*t647-t3360;
-              const double t3363 = t606*t2453;
-              const double t3364 = t443*t647;
-              const double t3365 = t377*t2854;
-              const double t3366 = t377*t610;
-              const double t3367 = t606*t3173;
-              const double t3368 = t679*t1301;
-              const double t3371 = t18*t353;
-              const double t3372 = t443*t1098;
-              const double t3374 = 2.0*t437*t3173;
-              const double t3375 = t443*t1160;
-              const double t3376 = t18*t647;
-              const double t3377 = t349*t3295;
-              const double t3378 = t349*t3293;
-              const double t3379 = t230*t868;
-              const double t3380 = -t3363+t3364+t3365-t3366-t3367+t3368-t351*t2978+t351*t2145-t3371-t3372+t3374-t3375+t3376+t3377-t3378+t3379;
-              const double t3381 = t377*t3303;
-              const double t3382 = t824*t300;
-              const double t3384 = 2.0*t2011*t353;
-              const double t3386 = 2.0*t1815*t1255;
-              const double t3387 = t437*t321;
-              const double t3388 = t479*t489;
-              const double t3390 = t377*t1182;
-              const double t3391 = t443*t2978;
-              const double t3393 = 2.0*t18*t455;
-              const double t3394 = t18*t1178;
-              const double t3395 = t334*t304;
-              const double t3396 = t334*t307;
-              const double t3398 = 2.0*t2011*t647;
-              const double t3399 = t453*t3096;
-              const double t3400 = t1379*t961;
-              const double t3401 = t230*t643;
-              const double t3402 = -t3381+t3382-t3384-t3386-t3387-t3388+t351*t1301+t3390+t3391-t3393+t3394+t3395-t3396+t3398+t3399+t3400-t3401;
-              const double t3405 = t233*t489;
-              const double t3406 = t349*t717;
-              const double t3407 = t349*t3298;
-              const double t3408 = t323*t409;
-              const double t3410 = t255*t328;
-              const double t3411 = t1820*t1146;
-              const double t3412 = t156*t454;
-              const double t3413 = t727*t343;
-              const double t3414 = t447*vertices[0](2);
-              const double t3416 = t334*t1564;
-              const double t3417 = t444*t474;
-              const double t3418 = t377*t780;
-              const double t3419 = t444*t356;
-              const double t3420 = t334*t1146;
-              const double t3421 = t3405-t3406+t3407-t3408+t351*t543-t3410-t3411+t3412+t3413+t3414-t351*t445+t3416+t3417-t3418-t3419-t3420;
-              const double t3423 = 2.0*t923*t477;
-              const double t3424 = t443*t437;
-              const double t3425 = t923*t1945;
-              const double t3426 = t444*t2564;
-              const double t3427 = t1820*t1564;
-              const double t3428 = t156*t1027;
-              const double t3430 = 2.0*t444*t1194;
-              const double t3431 = t831*t356;
-              const double t3432 = t923*t1146;
-              const double t3433 = t923*t661;
-              const double t3434 = t309*t976;
-              const double t3435 = t831*t474;
-              const double t3436 = t595*t661;
-              const double t3437 = t923*t1564;
-              const double t3438 = t334*vertices[4](2);
-              const double t3439 = t443*t2145;
-              const double t3440 = -t3423+t3424+t3425-t3426+t3427-t3428+t3430+t3431+t3432+t3433-t3434-t3435+t3436-t3437+t3438-t3439;
-              const double t3442 = t230*t1318;
-              const double t3443 = t429*vertices[2](1);
-              const double t3445 = 2.0*t3443*t591;
-              const double t3446 = t393*t513;
-              const double t3447 = t349*t353;
-              const double t3448 = t425*t112;
-              const double t3449 = t393*t638;
-              const double t3450 = t679*t353;
-              const double t3452 = 2.0*t255*t1004;
-              const double t3453 = t679*t623;
-              const double t3454 = t230*t706;
-              const double t3456 = 2.0*t3443*t661;
-              const double t3457 = t255*t1019;
-              const double t3458 = t679*t462;
-              const double t3459 = t958*t1146;
-              const double t3461 = 2.0*t255*t384;
-              const double t3462 = t958*t304;
-              const double t3463 = t3442-t3445-t3446+t3447+t3448-t3449+t3450+t3452-t3453+t3454+t3456+t3457-t3458+t3459+t3461-t3462;
-              const double t3464 = t349*t1668;
-              const double t3465 = t958*t297;
-              const double t3466 = t230*t569;
-              const double t3468 = t958*t1564;
-              const double t3469 = t255*t980;
-              const double t3472 = 2.0*t255*t734;
-              const double t3473 = t255*t576;
-              const double t3474 = t958*t307;
-              const double t3475 = t824*t887;
-              const double t3476 = t860*t598;
-              const double t3477 = t479*t1055;
-              const double t3478 = t349*t647;
-              const double t3479 = t479*t396;
-              const double t3480 = t1193*t3173;
-              const double t3481 = t412*vertices[1](1);
-              const double t3483 = 2.0*t3481*t747;
-              const double t3484 = t479*t970;
-              const double t3485 = t3464+t3465+t3466+t378*t510-t3468-3.0*t3469-t3472-t3473+t3474+t3475-t3476-t3477-t3478+t3479+t3480+t3483+t3484;
-      double s1 = t761+t664+t625+t2021+t2839+t1184+t1371+t2312+t471+t2926+t1212+t516+t1107+t1039+t1236+t1576+t1827+t2861+t2047+t1396+t2402+t879+t3253+t3209+t553+t1422+t585+t2380+t2332+t906+t1262+t1086+t1063+t1130+t987+t1852+t2073+t819+t2882+t1285+t732+t1446+t2355+t956+t1697+t2988+t694+t1472+t3228+t2559+t2092+t3361+t1949+t1626+t2904+t3012+t794+t3030+t1498+t3059+t3080+t1648+t2117+t855;
-              const double t3492 = s1+t3421+t1521+t2423+t2140+t2630+t2161+t3276+t1548+t3098+t2945+t1672+t928+t1316+t333+t374+t1334+t2184+t2965+t2235+t2449+t1156+t3297+t1875+t2539+t2206+t1926+t1717+t3440+t3318+t1740+t3145+t1759+t2606+t2469+t2583+t1782+t1804+t2263+t1999+t1971+t2492+t423+t3463+t1014+t3342+t3485+t2288+t2516+t1603+t2671+t2721+t2652+t3119+t2696+t1900+t1353+t3402+t3380+t2744+t2772+t2795+t3189+t3169+t2819;
-              const double t3493 = 1/t3492;
-              const double t3495 = -t12-t13-t16+t26+t31-t36+t415-t942+t578+t521-t526;
-              const double t3496 = t529-t540-t545+t547-t551+t557+t38-t42-t45-t52+t57;
-              const double t3498 = t60-t65+t67+t69-t72+t75-t76+t79+t81-t85-t86;
-              const double t3499 = -t89+t93+t96-t419-t103+t107+t108+t110+t112-t116-t117;
-              const double t3502 = 2.0*t175;
-              const double t3503 = t120+t125-t126-t128-t133+t134+t164-t166+t169-t3502-t177;
-              const double t3504 = 2.0*t178;
-              const double t3505 = 2.0*t182;
-              const double t3507 = t3504-t180+t181-t3505+t184-t185+2.0*t186-t188+t190+t192+t193;
-              const double t3510 = 2.0*t201;
-              const double t3511 = -t194-t195-t197+2.0*t199+t200-t3510+t203+t205-t207-t208+t209;
-              const double t3514 = 2.0*t219;
-              const double t3516 = -t211+t213-t214+2.0*t215+2.0*t216-t217+t218-t3514+t220-2.0*t221+t237;
-              const double t3520 = t302*vertices[1](2);
-              const double t3522 = t302*vertices[0](2);
-              const double t3525 = -t238-t241-t2304+t2295+t2018-t2127-t937+t2507-t8*t3520+t8*t3522+t616*t255;
-              const double t3531 = vertices[2](2)*eta;
-              const double t3538 = -t8*t1150+t8*t1167+t414*t165-t414*t222-t414*t168+t414*t3531-t550*t165+t550*t222+t550*t168-t550*t3531-t616*t212;
-              const double t3551 = -t1162*t210+t1162*t252-t1162*t255+t1162*t212+t1162*t165-t1162*t222-t1162*t168+t1162*t3531+t485*t210-t485*t252+t485*t255;
-              const double t3562 = -t485*t212-t485*t165+t485*t222+t485*t168-t485*t3531+t616*t210-t616*t252-t528*t189-t105+t520*t204-t520*t279;
-              const double t3565 = vertices[5](2)*zeta;
-              const double t3574 = t520*t3565-t520*t206-t528*t230+t528*t233-t261+t114+t1509+t616*t230-t616*t187-t616*t233+t616*t189;
-              const double t3581 = t520*t230-t520*t187-t520*t233+t10+t520*t189+t265-t25-t91-t1609-t51*t917+t51*t1523;
-              const double t3592 = t51*t3520-t51*t3522-t271-t1450-t528*t204+t528*t279-t528*t3565+t528*t206+t550*t204-t550*t279+t550*t3565;
-              const double t3599 = -t550*t206-t414*t204+t83+t414*t279-t414*t3565+t414*t206+t1440+t486-t653+t276+t528*t187;
-              const double t3604 = t3492*t3492;
-              const double t3605 = 1/t3604;
-              const double t3606 = (t3495+t3496+t3498+t3499+t3503+t3507+t3511+t3516+t3525+t3538+t3551+t3562+t3574+t3581+t3592+t3599)*t3605;
-              const double t3607 = 2.0*t291;
-              const double t3611 = 2.0*t606*t321;
-              const double t3612 = vertices[5](0)*vertices[3](1);
-              const double t3615 = 2.0*t831*t2564;
-              const double t3617 = -t3607+t293+t299-2.0*t301-t320+t424*t768-t3611+t479*t3612-t327-t3615+2.0*t329;
-              const double t3618 = 2.0*t331;
-              const double t3621 = t40*zeta;
-              const double t3623 = t1379*vertices[7](1);
-              const double t3625 = t674*vertices[7](1);
-              const double t3627 = t674*vertices[4](1);
-              const double t3629 = t447*zeta;
-              const double t3632 = t3618-t332+t309*vertices[2](2)+t335-t338-t330*vertices[5](1)-t339+t720*t3621+t252*t3623-t230*t3625-t222*t3627+2.0*t230*t3629;
-              const double t3643 = t469*vertices[2](2);
-              const double t3647 = t358*vertices[2](1)+t292*vertices[5](1)-2.0*t230*t3076-2.0*t348-t447*vertices[2](2)+t495*vertices[0](1)-t1193*vertices[0](1)-t495*vertices[4](1)-t3643-t292*vertices[2](1)+t441*vertices[2](2)-t908*vertices[0](2);
-              const double t3650 = t733*vertices[3](2);
-              const double t3651 = 2.0*t361;
-              const double t3656 = vertices[6](1)*t350;
-              const double t3657 = t3656*vertices[0](2);
-              const double t3659 = t337*vertices[5](2)+t1774*vertices[0](2)-t3650+t359+t3651+t908*vertices[3](2)-t337*vertices[2](2)-t252*t383-2.0*t370+t403-t418-t620*t3657;
-              const double t3665 = t3656*vertices[3](2);
-              const double t3671 = 2.0*t442;
-              const double t3672 = 2.0*t448;
-              const double t3673 = t230*t568-2.0*t255*t733-t427+t620*t3665-t431-t341*t19-2.0*t1635*t179-t255*t1365-t440-t3671+t3672;
-              const double t3681 = t18*vertices[0](2);
-              const double t3683 = t147*vertices[4](2);
-              const double t3687 = -t451-2.0*t452-t457+2.0*t2990*t976+2.0*t620*t152+2.0*t470+2.0*t478+t341*t3681+t341*t3683-t341*t149+t492+t252*t733;
-              const double t3691 = t635*vertices[3](2);
-              const double t3693 = t768*vertices[4](2);
-              const double t3697 = vertices[6](1)*vertices[3](2);
-              const double t3699 = 2.0*t501+t252*t334+t3691+t1193*vertices[3](1)+t3693-t360*vertices[5](2)-t1774*vertices[4](2)-t504+t958*vertices[4](2)-t674*t3697+t512+t515;
-              const double t3702 = t893*vertices[5](2);
-              const double t3707 = t444*t18;
-              const double t3711 = vertices[5](1)*t350;
-              const double t3712 = t3711*vertices[3](2);
-              const double t3714 = 2.0*t560*t49-t620*t3702+t525-t533-t720*t29+t230*t441-t1379*t4-t3707+t556-2.0*t828*t49-t230*t447-t620*t3712;
-              const double t3718 = t437*t140;
-              const double t3719 = t3711*vertices[0](2);
-              const double t3721 = t893*vertices[6](2);
-              const double t3723 = t443*vertices[7](2);
-              const double t3725 = t443*vertices[4](2);
-              const double t3732 = vertices[6](0)*vertices[3](1);
-              const double t3734 = -t3718+t620*t3719+t620*t3721+t559*t3723-t559*t3725-2.0*t736*t285-2.0*t587-2.0*t588+t594-2.0*t596-t479*t3732;
-              const double t3735 = 2.0*t602;
-              const double t3738 = t453*vertices[3](2);
-              const double t3740 = vertices[6](0)*t350;
-              const double t3741 = t3740*vertices[0](1);
-              const double t3745 = vertices[5](0)*t350;
-              const double t3746 = t3745*vertices[0](1);
-              const double t3748 = t3745*vertices[3](1);
-              const double t3750 = 2.0*t621;
-              const double t3753 = t3735+t720*t9+t605+2.0*t607+t720*t3738-t233*t3741+2.0*t792*t285+t233*t3746-t233*t3748-t3750+t631+2.0*t736*t54;
-              const double t3759 = t679*vertices[4](2);
-              const double t3762 = t1709*vertices[1](1);
-              const double t3764 = t1709*vertices[5](1);
-              const double t3766 = 2.0*t255*t383-2.0*t1774*t976-t634+t559*t3759+t479*t476-t642+t252*t3762-t252*t3764+t646+t652+t656+t658;
-              const double t3768 = 2.0*t635*t1180;
-              const double t3769 = 2.0*t677;
-              const double t3770 = t860*t5;
-              const double t3772 = t3740*vertices[3](1);
-              const double t3775 = 2.0*t476*t747;
-              const double t3776 = 2.0*t693;
-              const double t3777 = vertices[5](0)*zeta;
-              const double t3778 = t3777*vertices[0](2);
-              const double t3781 = t660-t673+t3768-t675+t3769+2.0*t3770+t680+t233*t3772-t685+t3775-t3776+2.0*t349*t3778;
-              const double t3784 = t64*eta;
-              const double t3787 = t352*zeta;
-              const double t3793 = t1029*eta;
-              const double t3796 = -2.0*t736*t3784-2.0*t349*t3787+t698-t674*t98+t713-t715-t716-2.0*t362*t409+t718+t724+2.0*t453*t3793;
-              const double t3798 = t429*vertices[2](2);
-              const double t3801 = 2.0*t748;
-              const double t3803 = t324*vertices[1](2);
-              const double t3806 = -t729+t737-t738+t741+t674*t64+2.0*t349*t3798-t3801-t750-t720*t278+t753-t754-2.0*t736*t3803;
-              const double t3808 = 2.0*t757;
-              const double t3810 = -t3808+t759-t760+t764-4.0*t771-t773-t774-t775-t776-t777+t781+t784;
-              const double t3815 = t476*t187;
-              const double t3816 = t679*vertices[7](2);
-              const double t3818 = t156*vertices[0](2);
-              const double t3821 = 2.0*t803;
-              const double t3822 = 2.0*t804;
-              const double t3823 = -2.0*t495*t817-2.0*t255*t1701+t791-t3815+t793-t559*t3816+2.0*t736*t3818+t795-t799+t801+t3821-t3822;
-              const double t3829 = t377*vertices[7](2);
-              const double t3832 = t1213*vertices[1](2);
-              const double t3837 = t383*eta;
-              const double t3839 = t20*eta;
-              const double t3842 = -2.0*t805+t809+t736*t3829+t816-2.0*t818-t736*t3832-2.0*t495*t5-2.0*t832-t835-t739*t3837+2.0*t736*t3839;
-              const double t3843 = t377*vertices[3](2);
-              const double t3846 = 2.0*t854;
-              const double t3847 = t824*vertices[3](2);
-              const double t3849 = t1213*vertices[5](2);
-              const double t3851 = 2.0*t861;
-              const double t3854 = -t736*t3843-t841-t844+t727*t3784+t849+t851+t3846+t736*t3847-t858+t736*t3849-t3851+2.0*t362*t2564;
-              const double t3856 = 2.0*t865;
-              const double t3857 = 2.0*t869;
-              const double t3861 = t390*eta;
-              const double t3863 = -t3856+t3857-t871-t872+2.0*t2187*t23-t674*t273-t874+t876+t877+t739*t3861-t889-t891;
-              const double t3864 = t290*vertices[3](2);
-              const double t3867 = t461*zeta;
-              const double t3871 = 2.0*t920;
-              const double t3872 = -t898-t900-t901-t903+2.0*t18*t3864+t377*t3867+t907-2.0*t2187*t6+t914-t915-t919-t3871;
-              const double t3876 = 2.0*t924;
-              const double t3878 = 2.0*t921-t3876-t925+t927-t932-2.0*t933-t935-t936+t940+t941+t944;
-              const double t3882 = 2.0*t960;
-              const double t3883 = vertices[6](1)*vertices[0](2);
-              const double t3885 = 2.0*t966;
-              const double t3888 = t952+t953+2.0*t290*t49+2.0*t955-t957-t3882+t674*t3883-t3885-2.0*t977-t978-t982+t1193*t51;
-              const double t3890 = 2.0*t991;
-              const double t3891 = t140*vertices[3](2);
-              const double t3895 = -t985-t986+t3890+t993-t727*t3891+t994+t1006-t1008-t1009+t727*t142+t727*t157+t1011;
-              const double t3896 = 2.0*t1020;
-              const double t3899 = t3777*vertices[3](2);
-              const double t3903 = t341*vertices[7](1);
-              const double t3906 = -t1013+t1016+t3896+t674*t284-t727*t3818+t1021+t778*t3899-2.0*t1026+2.0*t1028-t1032-t252*t3903-t727*t284;
-              const double t3911 = 3.0*t1043;
-              const double t3912 = 2.0*t1057;
-              const double t3913 = 2.0*t1060;
-              const double t3914 = t609*zeta;
-              const double t3917 = t1029*zeta;
-              const double t3920 = -t479*t765+t1034-t1041+t3911-t1054-t3912-t3913+2.0*t156*t3914-2.0*t156*t3917+t1074+t1078;
-              const double t3922 = t711*vertices[2](2);
-              const double t3924 = 2.0*t1083;
-              const double t3926 = 2.0*t1092;
-              const double t3928 = t824*vertices[7](2);
-              const double t3930 = -t156*t609-t156*t3922-t1080-t3924+t1085-t824*t831+t1090-t3926-t1094+t479*t733+t1096-t736*t3928;
-              const double t3932 = 2.0*t1114;
-              const double t3933 = 2.0*t1115;
-              const double t3935 = t736*vertices[0](2);
-              const double t3937 = t836*vertices[5](2);
-              const double t3939 = -t1109+t3932-t3933-t1117+t1120+t1123+t1124+t1379*t3+t1126+t1128+t377*t3935-t18*t3937;
-              const double t3940 = t836*vertices[1](2);
-              const double t3942 = t1709*vertices[5](2);
-              const double t3945 = t711*vertices[1](2);
-              const double t3947 = t622*eta;
-              const double t3952 = vertices[1](0)*vertices[4](2);
-              const double t3953 = t3952*zeta;
-              const double t3957 = -t1137+t18*t3940+t1139-t1143+t18*t3942-t393*t768+t156*t3945-2.0*t18*t3947-t1379*t100+t140*t3922+2.0*t156*t3953+t727*t3697;
-              const double t3960 = 2.0*t1181;
-              const double t3961 = t330*zeta;
-              const double t3964 = t461*eta;
-              const double t3966 = t736*vertices[4](2);
-              const double t3969 = t352*eta;
-              const double t3971 = 2.0*t1211;
-              const double t3972 = vertices[6](0)*zeta;
-              const double t3973 = t3972*vertices[4](2);
-              const double t3975 = -t3960-2.0*t156*t3961+t1188+t1189+t1196+t679*t3964+t1205-2.0*t156*t3966-t679*t3969-t3971-t824*t3973;
-              const double t3977 = 2.0*t1222;
-              const double t3979 = 2.0*t1225;
-              const double t3982 = 2.0*t1241;
-              const double t3983 = t603*vertices[2](2);
-              const double t3985 = t1219+t679*t3947+t1220-t3977+t727*t273-t3979+t156*t1029-t1230-t727*t3883-t1240-t3982+t156*t3983;
-              const double t3987 = t603*vertices[1](2);
-              const double t3989 = t358*zeta;
-              const double t3992 = t3745*vertices[0](2);
-              const double t3994 = 2.0*t1251;
-              const double t3995 = t2853*zeta;
-              const double t3999 = -t156*t3987+t1246-2.0*t156*t3989-t349*t3992+t1250-t3994-t1257-t1260-t377*t3995-2.0*t1264-t1268-2.0*t1269;
-              const double t4006 = 2.0*t1303;
-              const double t4007 = -t1272+2.0*t958*t976-t1280+t958*t204-t679*t461-2.0*t792*t146-t1291-t1292-t1296+t1298+t1299+t4006;
-              const double t4015 = t3777*vertices[0](1);
-              const double t4018 = t412*vertices[5](2);
-              const double t4021 = t412*vertices[1](2);
-              const double t4024 = 2.0*t1820*t661+t1305-2.0*t233*t4015-t1306+2.0*t18*t4018+t1309+t1311-t1313+t1315-2.0*t18*t4021-t1317;
-              const double t4027 = t1709*vertices[1](2);
-              const double t4032 = t650*vertices[6](2);
-              const double t4035 = -t1319+2.0*t1320-2.0*t1322+t1325-t1326+t1328-t18*t4027+t1330+t727*t98-2.0*t792*t41-t349*t4032-t377*t860;
-              const double t4039 = t650*vertices[5](2);
-              const double t4043 = t330*eta;
-              const double t4046 = 2.0*t1338+2.0*t1343-t1346+t1347+t349*t4039-2.0*t958*t661-t1351-t1352+t1355+t1356-t1357+2.0*t18*t4043;
-              const double t4047 = t449*vertices[5](2);
-              const double t4050 = vertices[2](0)*vertices[4](2);
-              const double t4053 = 2.0*t1369;
-              const double t4055 = t1363-t349*t4047+t1364+2.0*t1366+t377*t4050-t1368-t377*t3966-t4053-2.0*t1370+t1374-t1375-t1376;
-              const double t4059 = t425*t64;
-              const double t4060 = vertices[5](0)*vertices[3](2);
-              const double t4062 = vertices[6](0)*vertices[3](2);
-              const double t4066 = -2.0*t1378+t4059-t1381-t1382-t443*t4060+t443*t4062-t443*t831-t1384+t1389+t1391+t377*t2853;
-              const double t4075 = t443*t606+t1394+t1252*t210-t1252*t212-t1379*t3681+t377*t3914-t679*t4062-t447*t222-t377*t609+t1401-t1405-t1409;
-              const double t4077 = 3.0*t1414;
-              const double t4078 = 2.0*t1416;
-              const double t4079 = 2.0*t1417;
-              const double t4081 = 2.0*t1436;
-              const double t4082 = t1410+t1412-t4077-t4078+t4079-t1424-t1379*t3683+t1427-t1428+t1429+t1433+t4081;
-              const double t4087 = 2.0*t1460;
-              const double t4088 = t1438+t1439+t441*t222-t1443-t1445-t1449-t1453-t1456+t1379*t149-2.0*t909*t1180-t4087-t1461;
-              const double t4093 = vertices[2](0)*vertices[4](1);
-              const double t4095 = 2.0*t1462;
-              const double t4097 = 2.0*t1465;
-              const double t4098 = 2.0*t1466;
-              const double t4099 = -t1820*t210-t393*t4093-t4095-t479*t383-t1464-t4097-t4098+t1467-t1469+t1471-t1476;
-              const double t4104 = 2.0*t1480;
-              const double t4105 = 2.0*t1481;
-              const double t4107 = t449*vertices[6](2);
-              const double t4109 = 2.0*t1490;
-              const double t4110 = t1477+t337*t279+2.0*t1635*t210+t1820*t212+t4104+t4105+2.0*t1482-t1483+t1487-t1489+t349*t4107+t4109;
-              const double t4112 = 2.0*t1494;
-              const double t4113 = t3740*vertices[0](2);
-              const double t4116 = t3740*vertices[3](2);
-              const double t4120 = t1491-t1493+t4112+t349*t4113-2.0*t1496+t1497-t349*t4116+t679*t1300-t1500-t864*t230+t1501-t1502;
-              const double t4122 = 3.0*t1506;
-              const double t4124 = t3745*vertices[3](2);
-              const double t4127 = 2.0*t1518;
-              const double t4130 = 2.0*t1533;
-              const double t4131 = 2.0*t1503+t1505-t4122+t1513+t1515+t1379*t19+t349*t4124-t736*t20+t4127-t1526-2.0*t1820*t747-t4130;
-              const double t4134 = vertices[1](0)*vertices[3](2);
-              const double t4135 = t4134*eta;
-              const double t4142 = t437*vertices[2](1);
-              const double t4143 = 2.0*t1556;
-              const double t4149 = -2.0*t18*t4135+2.0*t1639*t1180+t1545+2.0*t1635*t747-t4142+t4143-2.0*t309*t3531+t1561-t923*t252+t453*t860+t377*t831;
-              const double t4152 = 3.0*t1567;
-              const double t4153 = 2.0*t1580;
-              const double t4155 = t366*vertices[1](2);
-              const double t4158 = 2.0*t1581;
-              const double t4159 = 2.0*t1586;
-              const double t4160 = 2.0*t1588;
-              const double t4163 = -2.0*t736*t157-t4152-t1570+t4153+t309*t222+2.0*t18*t4155+t4158+t1584+t4159+t4160+t1590+2.0*t908*t1180;
-              const double t4165 = 2.0*t1591;
-              const double t4166 = 2.0*t1594;
-              const double t4167 = t499*t606;
-              const double t4168 = t508*t4050;
-              const double t4169 = t341*vertices[3](2);
-              const double t4172 = t341*vertices[7](2);
-              const double t4174 = t425*t273;
-              const double t4175 = 2.0*t1604;
-              const double t4176 = t4165-t1593-t4166+t4167+t4168-t18*t4169-4.0*t1596+t1600+t18*t4172-t4174-t1602-t4175;
-              const double t4179 = 2.0*t1612;
-              const double t4180 = 2.0*t1614;
-              const double t4181 = 2.0*t1616;
-              const double t4187 = 3.0*t1628;
-              const double t4188 = t1607-2.0*t736*t153+t4179-t4180-t4181+t1619+t679*t4060+t679*t831-2.0*t2494*t1180-t1622+2.0*t1625+t4187;
-              const double t4196 = t1379*vertices[3](2);
-              const double t4198 = t1379*vertices[7](2);
-              const double t4200 = 3.0*t1651;
-              const double t4201 = 2.0*t1661;
-              const double t4202 = -t679*t606-t18*t4060-t1643+t479*t390+t18*t4196-t1646-t18*t4198+t1647+t4200+t1655+t4201;
-              const double t4205 = 2.0*t1669;
-              const double t4206 = 2.0*t1670;
-              const double t4207 = vertices[6](1)*vertices[4](2);
-              const double t4212 = 2.0*t765*t661;
-              const double t4215 = 2.0*t736*t155-t1665+t4205-t4206+t1379*t4207-t18*t358-t18*t330-t1688+t4212+2.0*t1692+2.0*t1704-t1705;
-              const double t4223 = 2.0*t1728;
-              const double t4224 = 2.0*t1730;
-              const double t4225 = t1707-t393*t3076-t1711-t1379*t3883+t393*t568-t1722+t362*t508-t362*t324+2.0*t1725-t1727+t4223+t4224;
-              const double t4229 = vertices[6](0)*vertices[4](2);
-              const double t4234 = 2.0*t1745;
-              const double t4236 = t366*t119;
-              const double t4238 = -2.0*t1731-2.0*t349*t3914-t1733-t377*t4229-2.0*t349*t4050-t349*t622-t1735-t1743+t4234+t393*t765-t4236-t330*t147;
-              const double t4241 = 2.0*t1755;
-              const double t4242 = 2.0*t1763;
-              const double t4243 = t366*t274;
-              const double t4248 = t4241+t4242+t1768+t4243+2.0*t736*t41+t1771-t1773+t447*t252+t334*vertices[5](2)+t1776-t1777;
-              const double t4252 = 2.0*t768*t976;
-              const double t4258 = t1252*t189+t1778+2.0*t1779-t1780+t4252-t1635*t165+t1820*t187-t1781-t958*vertices[0](2)+t1788+t1789-2.0*t1635*t1180;
-              const double t4270 = t908*t165-t393*t1075+t1790-t1379*t275+t1791-t1792+t292*t147-t1793-2.0*t453*t622-t453*t1029+2.0*t233*t1683+t393*t2527;
-              const double t4278 = 2.0*t1808;
-              const double t4280 = -t393*t2536+t1796+t1797-t1799+t18*t622+2.0*t349*t860-t1820*t189+2.0*t349*t609+t4278-t1810-t1811+t1379*t274;
-              const double t4286 = 2.0*t1814;
-              const double t4287 = t622*zeta;
-              const double t4291 = 2.0*t1821;
-              const double t4293 = t1075*zeta;
-              const double t4295 = -t1813-2.0*t349*t3935-t4286+2.0*t349*t4287+2.0*t1817+t1819-t4291-2.0*t1824+t393*t4293-t1826-t1830;
-              const double t4298 = t3972*vertices[0](2);
-              const double t4300 = 2.0*t1836;
-              const double t4301 = t489*t222;
-              const double t4302 = t635*t210;
-              const double t4303 = -2.0*t1831+t377*t3973-t1833-t377*t4298+t4300+t1837-t1839-t1849-t1851+t4301-t4302+t1863;
-              const double t4306 = t559*vertices[0](1);
-              const double t4308 = t768*t204;
-              const double t4309 = 2.0*t1877;
-              const double t4310 = t476*t210;
-              const double t4312 = -2.0*t1864-t1865-t1866+t1869+t739*t4306-t1873+t4308-t4309-t1878-t1881+t4310+t443*t622;
-              const double t4313 = t328*t279;
-              const double t4315 = 2.0*t1889;
-              const double t4316 = 2.0*t1891;
-              const double t4317 = 3.0*t1892;
-              const double t4319 = 2.0*t476*t661;
-              const double t4320 = 3.0*t1908;
-              const double t4321 = -t4313+2.0*t1883+t4315-t4316+t4317-t1895+t1897+t1904-t4319-t1907+t4320+t1911;
-              const double t4327 = 2.0*t1927;
-              const double t4328 = 2.0*t1936;
-              const double t4329 = t586*t279;
-              const double t4330 = 2.0*t1940;
-              const double t4331 = 2.0*t1943;
-              const double t4332 = -t1914-2.0*t1915+2.0*t233*t1447+t4327-t1930+t1931-t4328+t4329-t4330+t1942-t4331-t1944;
-              const double t4333 = t586*t3565;
-              const double t4334 = t638*t230;
-              const double t4335 = t1365*t204;
-              const double t4337 = 2.0*t1365*t976;
-              const double t4343 = -t4333+t1948-t4334-t4335-t4337+t1955+2.0*t1774*t187-t1956+t1958-2.0*t252*t1258+t1961-t1252*t187;
-              const double t4345 = 2.0*t1962;
-              const double t4346 = 2.0*t1966;
-              const double t4350 = t559*vertices[3](1);
-              const double t4353 = 2.0*t1989;
-              const double t4354 = t4345+t4346+2.0*t1968-2.0*t1970+t290*t3725-t1973-t739*t4350-t739*t733-t1980+t1981+t1984+t4353;
-              const double t4360 = 2.0*t2010;
-              const double t4361 = t100*zeta;
-              const double t4366 = 2.0*t2004-2.0*t2005-t2006-2.0*t453*t4018-2.0*t2009+t4360-t341*t4361-t2016+t2017+t341*t100-t443*t1300-t443*t352;
-              const double t4374 = 2.0*t2023;
-              const double t4375 = 3.0*t2025;
-              const double t4376 = 3.0*t2027;
-              const double t4377 = 2.0*t2029;
-              const double t4378 = 2.0*t2034;
-              const double t4379 = -2.0*t2020+t4374+t4375-t4376+t4377-t2030+t2032+t2033+t4378-t2035-t2037;
-              const double t4380 = 3.0*t2038;
-              const double t4383 = 2.0*t2046;
-              const double t4385 = 2.0*t2062;
-              const double t4386 = -t4380+2.0*t2040+t2041-t739*t400-t2044+t4383-t2057-t2059+t739*t1258-t2061+t4385+t2066;
-              const double t4389 = t2068-t2069+t2070-t2071-t2075+t2076-t2077+t2079-t2084+t2085+2.0*t2086-t2088;
-              const double t4390 = 3.0*t2094;
-              const double t4395 = t674*vertices[7](2);
-              const double t4397 = t674*vertices[4](2);
-              const double t4401 = t2089-t4390+t2101+t443*t461+2.0*t2105-2.0*t2106-2.0*t2108-t2110+t156*t4395-t156*t4397-2.0*t2112-t140*t4395;
-              const double t4411 = t831*t499;
-              const double t4415 = t2123+t824*t3995+t140*t4397-2.0*t1680*t661+t792*t275-t2136-t2138+2.0*t792*t160-t4411-t824*t2853+2.0*t736*t56;
-              const double t4416 = t768*t196;
-              const double t4418 = 2.0*t2147;
-              const double t4419 = t782*vertices[6](2);
-              const double t4421 = t8*vertices[5](2);
-              const double t4423 = t782*vertices[5](2);
-              const double t4433 = 2.0*t4416+t4418-t620*t4419-t720*t4421+t620*t4423-2.0*t792*t56-t2155+t341*t4-t290*t3759+t290*t3816-t290*t3723+2.0*t2265*t661;
-              const double t4437 = t88*zeta;
-              const double t4446 = t2166+t2168+2.0*t292*t138+2.0*t290*t4437+2.0*t2177+2.0*t290*t19+t824*t3966-t2183-t824*t3935-t2189-t2195-t290*t88;
-              const double t4448 = t429*vertices[5](2);
-              const double t4457 = 2.0*t2527*t477;
-              const double t4458 = t469*t222;
-              const double t4459 = t765*t210;
-              const double t4460 = t720*t145+t778*t4448-t720*t4437-t290*t275+t736*t88-t2201+2.0*t2202+t674*t143-t674*t55-t4457-t4458-t4459;
-              const double t4464 = t595*t230;
-              const double t4467 = 2.0*t2212;
-              const double t4468 = 2.0*t2213;
-              const double t4470 = 2.0*t2536*t477;
-              const double t4471 = 2.0*t2219;
-              const double t4476 = t4464-2.0*t290*t62-t4467+t4468+t4470-t2218-t4471+2.0*t828*t62+t824*t609+t824*t860-t2225;
-              const double t4477 = t464*vertices[1](2);
-              const double t4480 = 2.0*t2230;
-              const double t4481 = 2.0*t2231;
-              const double t4482 = 2.0*t2233;
-              const double t4483 = 2.0*t2243;
-              const double t4485 = 2.0*t2249;
-              const double t4486 = 2.0*t2253;
-              const double t4487 = t2227+t2229+2.0*t156*t4477+t4480+t4481+t4482-t2242+t4483-t824*t3914+t2248-t4485-t4486;
-              const double t4490 = 2.0*t469*t747;
-              const double t4491 = t860*vertices[4](1);
-              const double t4493 = t727*vertices[7](2);
-              const double t4497 = 2.0*t2278;
-              const double t4498 = t2256-t4490+t4491-t2261+2.0*t2262+t2264+t2270-t156*t4493+t2272+t2277-2.0*t560*t23+t4497;
-              const double t4499 = 2.0*t2279;
-              const double t4501 = t727*vertices[4](2);
-              const double t4505 = t429*vertices[1](2);
-              const double t4509 = -t4499+t2281-4.0*t2285+t156*t4501-t2291+t2294-t824*t4050-t393*t1447-t2303-t778*t4505-2.0*t560*t62-t2311;
-              const double t4516 = t300*vertices[5](1);
-              const double t4517 = t334*eta;
-              const double t4519 = 2.0*t4517*t976;
-              const double t4525 = -t778*t4287+2.0*t560*t160-t2317+t778*t3961+t4516+t4519+t140*t4493-t140*t4501+t341*t119+t290*t274+t290*t154;
-              const double t4526 = t650*vertices[6](1);
-              const double t4530 = t650*vertices[5](1);
-              const double t4537 = 2.0*t2339;
-              const double t4538 = t233*t4526-t290*t119-t341*t98-t233*t4530+t290*t3-t290*t1+t358*t140-t292*t140+t290*t20-t2327+t2338-t4537;
-              const double t4540 = t3972*vertices[0](1);
-              const double t4543 = t559*vertices[3](2);
-              const double t4545 = t489*vertices[2](2);
-              const double t4546 = t290*vertices[0](2);
-              const double t4551 = t2342+t393*t4540-t2345+t1635*vertices[0](2)+t2351+t679*t4543+t4545+t2361+t679*t4546+t2365+t824*t4298+2.0*t18*t3969;
-              const double t4558 = t449*vertices[5](1);
-              const double t4560 = t1300*eta;
-              const double t4562 = 2.0*t2395;
-              const double t4564 = -2.0*t2376+2.0*t958*t196-t341*t3-2.0*t2378+t2379+2.0*t2386+t233*t4558-t2389-t679*t4560-t4562+t393*t2662-t2399;
-              const double t4569 = 2.0*t2401;
-              const double t4572 = t559*vertices[0](2);
-              const double t4575 = t1365*vertices[4](2);
-              const double t4576 = t1365*t196;
-              const double t4578 = t3972*vertices[4](1);
-              const double t4581 = 2.0*t1232*t747;
-              const double t4582 = t4569+4.0*t2403-t1635*vertices[3](2)-t679*t4572-t679*t3864-t4575+t2409-2.0*t4576-t393*t4578+t4581+t2418;
-              const double t4586 = 2.0*t483*t13;
-              const double t4589 = t930*vertices[1](2);
-              const double t4591 = t119*zeta;
-              const double t4594 = t2363*vertices[5](2);
-              const double t4598 = t2419+t1379*t4361-t1774*t204-t4586+2.0*t290*t29+t290*t4589-t341*t4591+t2434-t727*t137+t2437-t736*t4594-2.0*t290*t152;
-              const double t4602 = t2363*vertices[1](2);
-              const double t4606 = t143*eta;
-              const double t4612 = t480*vertices[1](2);
-              const double t4615 = 2.0*t2464;
-              const double t4617 = -t2439+2.0*t2440-t309*vertices[5](2)+t736*t4602-2.0*t295*t976+t727*t4606-t727*t56-2.0*t252*t4517+2.0*t2457-2.0*t18*t4612+t4615-t377*t3917;
-              const double t4620 = t449*vertices[6](1);
-              const double t4623 = 2.0*t484*t13;
-              const double t4625 = 2.0*t3076*t1180;
-              const double t4628 = t606*vertices[3](1);
-              const double t4632 = 2.0*t252*t3837-t2466-t2468-t233*t4620+t4623+t4625+2.0*t156*t4505-t4628+t2497-2.0*t156*t3798-t2510-t824*t1029;
-              const double t4637 = 2.0*t2515;
-              const double t4638 = t606*t15;
-              const double t4640 = t324*t860;
-              const double t4645 = t328*vertices[5](2);
-              const double t4646 = 2.0*t317*t976-t4637-t2526-2.0*t4638-t4640+t2531+t2535-2.0*t290*t21-t792*t274-t441*t252-t4645;
-              const double t4653 = 2.0*t2565;
-              const double t4654 = 2.0*t2567;
-              const double t4656 = 2.0*t1447*t1180;
-              const double t4657 = 2.0*t1386*t130+t2543+t2547-2.0*t1418*t747+t2550-2.0*t2555+2.0*t2558-t2562-t4653+t4654-t2570+t4656;
-              const double t4660 = 2.0*t736*t11;
-              const double t4663 = 2.0*t2265*t477;
-              const double t4667 = 2.0*t2615;
-              const double t4671 = 2.0*t2623;
-              const double t4672 = t4660-t2587+t2596-2.0*t2598-t4663-2.0*t290*t3738+t2610-t140*t3983-t4667+2.0*t2618+2.0*t290*t4591+t4671;
-              const double t4676 = t792*vertices[3](2);
-              const double t4680 = vertices[1](0)*vertices[7](2);
-              const double t4681 = t4680*zeta;
-              const double t4683 = vertices[5](0)*vertices[7](2);
-              const double t4684 = t4683*zeta;
-              const double t4686 = t2624+t2629+2.0*t2631+t140*t3987-t140*t3945-t2633-t778*t4676+2.0*t3100*t747+t2637+t778*t4681+t2646-t778*t4684;
-              const double t4693 = t341*vertices[3](1);
-              const double t4696 = t635*t179;
-              const double t4700 = 2.0*t751*t1180;
-              const double t4702 = 2.0*t2292*t976;
-              const double t4703 = -2.0*t3100*t669+t2657+t824*t3917+t252*t4693-t824*t3867+2.0*t4696-t2669-2.0*t2670-t4700-t2674-t4702;
-              const double t4707 = 2.0*t2648*t1180;
-              const double t4708 = 2.0*t2700;
-              const double t4710 = -t2678+2.0*t290*t2+t2680+t2682-t2684-t2687+t2689+t4707+t2695-t2699+t4708+2.0*t2702;
-              const double t4715 = 2.0*t2124*t477;
-              const double t4717 = 2.0*t2124*t1945;
-              const double t4720 = 2.0*t779*t96;
-              const double t4724 = 2.0*t1140*t661;
-              const double t4726 = 2.0*t290*t158-t2705+t4715-t4717-t2710+t393*t1365+t4720+t334*t279-t727*t64+t2714-t4724+t341*t99;
-              const double t4730 = 2.0*t1244*t976;
-              const double t4732 = 2.0*t1418*t531;
-              const double t4733 = t638*t252;
-              const double t4735 = 2.0*t736*t74;
-              const double t4736 = -2.0*t290*t9+t4730+t4732+t4733-t2725-t2727-t2728-t2729+t2730-t4735+t2731+t2734;
-              const double t4740 = 2.0*t2662*t1180;
-              const double t4743 = vertices[6](0)*vertices[4](1);
-              const double t4746 = 2.0*t2187*t11;
-              const double t4748 = 2.0*t426*t1180;
-              const double t4749 = -t2735-t2737+t2739-t2741-t4740-2.0*t560*t130+t393*t4743-t4746+t2749+t2754-t4748;
-              const double t4752 = 2.0*t2022*t57;
-              const double t4754 = 2.0*t2022*t65;
-              const double t4756 = t2759+t2762+t341*t275-t4752+t2764+t2766-t2768+t4754-t2774-t341*t274-t2776-t2778;
-              const double t4759 = 2.0*t2482*t477;
-              const double t4763 = 2.0*t2482*t1945;
-              const double t4764 = 2.0*t2792;
-              const double t4768 = 2.0*t1562*t120;
-              const double t4770 = 2.0*t2811;
-              const double t4772 = 2.0*t586*t661;
-              const double t4773 = -t4759-t2783+t2786+2.0*t1193*t321+t4763-t4764-2.0*t290*t3681+t2803-t4768-t341*t4207-t4770+t4772;
-              const double t4777 = 2.0*t1859*t531;
-              const double t4784 = 2.0*t560*t42;
-              const double t4785 = t341*t3883-2.0*t2821-t4777-2.0*t2823-t2825-2.0*t290*t4+t2828+t2831-t2832-2.0*t453*t606+t4784+t2850;
-              const double t4792 = 2.0*t560*t57;
-              const double t4796 = 2.0*t560*t13;
-              const double t4797 = 2.0*t2876;
-              const double t4800 = -t4792+2.0*t2862-t393*t476+t4796-t2866-t2868+t2870-t2873+t4797+2.0*t453*t352-t2885;
-              const double t4802 = 2.0*t560*t106;
-              const double t4804 = 2.0*t2891;
-              const double t4806 = 2.0*t560*t110;
-              const double t4807 = t1485*vertices[2](2);
-              const double t4809 = 2.0*t2901;
-              const double t4811 = t1485*vertices[1](2);
-              const double t4815 = -t4802-t495*t8+t4804-t2893-t4806+t2898+t290*t4807-t4809-2.0*t2902-t290*t4811-2.0*t2905+t739*t383;
-              const double t4818 = 2.0*t560*t115;
-              const double t4820 = 2.0*t560*t120;
-              const double t4822 = 2.0*t1734*t976;
-              const double t4823 = 2.0*t2923;
-              const double t4825 = t635*t165;
-              const double t4827 = 2.0*t2187*t74;
-              const double t4830 = t930*vertices[2](2);
-              const double t4832 = t4818+t2912-t4820+t2919-t4822+t4823+2.0*t2925+t4825+t4827+2.0*t2930-2.0*t2931-t290*t4830;
-              const double t4839 = 2.0*t1258*t976;
-              const double t4841 = 2.0*t560*t81;
-              const double t4844 = 2.0*t560*t84;
-              const double t4846 = 2.0*t560*t89;
-              const double t4847 = 2.0*t2932+2.0*t2933-t739*t390-2.0*t2934-t2936-2.0*t2937+t4839-t4841-t349*t606+t4844+t4846+t2954;
-              const double t4852 = 2.0*t560*t92;
-              const double t4855 = 2.0*t828*t92;
-              const double t4857 = 2.0*t156*t562;
-              const double t4858 = -t2957+t349*t352-t4852+t2962-t2964+t2969-t2973+t18*t606+t4855+t4857-t2993;
-              const double t4863 = 2.0*t290*t115;
-              const double t4865 = 2.0*t560*t11;
-              const double t4867 = 2.0*t560*t16;
-              const double t4869 = 2.0*t828*t115;
-              const double t4871 = -t18*t352-t323*t156-t2997+t18*t4134+t4863+t3007+t3008+t4865+t4867-t4869-t377*t461+t3024;
-              const double t4873 = 2.0*t3029;
-              const double t4875 = 2.0*t560*t38;
-              const double t4877 = 2.0*t2527*t1180;
-              const double t4878 = t3026-t3027+t4873-t4875-t3037-t3039-t3041+t3043+t3045+t3047-t4877-t3049;
-              const double t4880 = 2.0*t3100*t1255;
-              const double t4881 = t606*t51;
-              const double t4883 = 2.0*t560*t72;
-              const double t4886 = 2.0*t400*t976;
-              const double t4890 = 2.0*t560*t74;
-              const double t4892 = 2.0*t514*t1180;
-              const double t4894 = 2.0*t2619*t531;
-              const double t4896 = 2.0*t290*t92;
-              const double t4897 = t3051+t4880-t4881+t4883+t323*t18-t4886-2.0*t3083+t739*t765-t4890+t4892+t4894-t4896;
-              const double t4901 = 2.0*t3097;
-              const double t4903 = 2.0*t2619*t1255;
-              const double t4906 = 2.0*t560*t96;
-              const double t4910 = t4901-t4903+t377*t1029-t4906-t3125-t3126-t3128-2.0*t736*t23-t424*t4540+t3135-t3139;
-              const double t4912 = 2.0*t3144;
-              const double t4913 = t3141+t559*t4811-t3143+t4912+t3150-t3151+t3152+t3155+t3160-t3165+t3166-t3168;
-              const double t4917 = 2.0*t3100*t531;
-              const double t4919 = t3170-t3171-t3172+t3175+t559*t4830+t3176+t3177+t3184-t4917-t3186-t559*t4589+t3187;
-              const double t4921 = 2.0*t708*t976;
-              const double t4925 = 2.0*t560*t65;
-              const double t4926 = 2.0*t3203;
-              const double t4928 = 2.0*t3837*t976;
-              const double t4930 = 2.0*t18*t2145;
-              const double t4932 = 2.0*t508*t623;
-              const double t4934 = 2.0*t489*t747;
-              const double t4935 = t3188+t4921+2.0*t1774*t661+t4925-t3202-t4926-t3206-t4928-t4930-t4932+t4934+t3221;
-              const double t4941 = 2.0*t765*t747;
-              const double t4942 = 2.0*t3233;
-              const double t4943 = 2.0*t3242;
-              const double t4944 = 2.0*t3250;
-              const double t4945 = 2.0*t3254;
-              const double t4949 = 2.0*t252*t2292-t4941+t4942+t3236+t3240-t4943+t3245+t4944+t4945-2.0*t2124*t661-t424*t2662;
-              const double t4958 = t727*vertices[7](1);
-              const double t4961 = t697*t2593+t424*t4578-2.0*t1252*t661+2.0*t2124*t591-t697*t2584+t424*t1447-t222*t4958+t3259-t3261+2.0*t3262-t3263+t3265;
-              const double t4963 = 2.0*t3273;
-              const double t4964 = 2.0*t3274;
-              const double t4971 = t1379*vertices[3](1);
-              const double t4977 = -t3271-t4963-t4964-2.0*t736*t102+t3281+t3283+2.0*t1252*t747+t3284+2.0*t620*t278-t252*t4971+2.0*t620*t4-2.0*t620*t158;
-              const double t4978 = t711*vertices[2](1);
-              const double t4980 = t603*vertices[2](1);
-              const double t4982 = t603*vertices[1](1);
-              const double t4990 = -t222*t4978-t230*t4980-t222*t4982+t230*t3627+t3290-t3291-t3292+2.0*t620*t3681-2.0*t620*t34+t1379*t4591-t3294+t3296;
-              const double t5002 = 2.0*t3307;
-              const double t5006 = 2.0*t733*t1180;
-              const double t5007 = t3299-2.0*t792*t130-t1379*t99-2.0*t620*t130+t3302-t3304-2.0*t792*t159+t5002+t697*t1307+2.0*t3312-t5006;
-              const double t5008 = 2.0*t3314;
-              const double t5009 = t429*vertices[5](1);
-              const double t5017 = t3777*vertices[3](1);
-              const double t5019 = t2239*zeta;
-              const double t5021 = -t5008+t3317-t697*t5009+2.0*t736*t6+t3325+2.0*t620*t150-t3329+t222*t4980-t559*t4807-t697*t5017+t697*t5019+t3332;
-              const double t5028 = 2.0*t831*t409;
-              const double t5033 = t836*vertices[5](1);
-              const double t5035 = t3333-t739*t1859+t424*t3076+t739*t3114+t424*t2536+t5028-t424*t2527-t424*t4293+2.0*t3334+t230*t4982+t3337+t252*t5033;
-              const double t5039 = t727*vertices[4](1);
-              const double t5042 = t711*vertices[1](1);
-              const double t5045 = -t3345-t3346-t697*t1794+t697*t2273+t230*t4958-t230*t5039+t230*t4978+t222*t5042-t230*t5042+t3347-t3348+t3349;
-              const double t5049 = t836*vertices[1](1);
-              const double t5059 = 2.0*t860*t817;
-              const double t5061 = -t3351+4.0*t3352-t252*t5049+2.0*t230*t2662-2.0*t230*t2648+t230*t1365-t424*t765-t479*t635+t5059+t3360+t222*t3625;
-              const double t5064 = 2.0*t3367;
-              const double t5066 = 2.0*t3371;
-              const double t5071 = 2.0*t3376;
-              const double t5073 = 2.0*t560*t6+t5064+t156*t4050-t5066+t824*t4229-t156*t860+t156*t358-t3374-t156*t3952+t5071+t156*t330-t3377;
-              const double t5075 = 2.0*t3379;
-              const double t5077 = t140*zeta;
-              const double t5079 = 2.0*t5077*t353;
-              const double t5080 = 2.0*t3399;
-              const double t5081 = t3378-t5075+t3381-t3382+2.0*t3387+t3388-t3390-t5079+t3393-t5080-t3405+t3406;
-              const double t5082 = 2.0*t3408;
-              const double t5085 = 2.0*t5077*t1030;
-              const double t5087 = 2.0*t5077*t806;
-              const double t5089 = 2.0*t5077*t610;
-              const double t5091 = 2.0*t5077*t517;
-              const double t5092 = -t3407+t5082+t3410+t824*t461-t3414+t3418+t3423-t3424+t5085+t5087-t5089-t5091;
-              const double t5096 = 2.0*t3426;
-              const double t5098 = 2.0*t5077*t623;
-              const double t5100 = 2.0*t3433;
-              const double t5101 = 2.0*t3436;
-              const double t5102 = 2.0*t3438;
-              const double t5103 = 2.0*t3442;
-              const double t5104 = t5096+t5098-t309*t279+t3428-t3430-t5100-t5101-t5102-t5103+t3445+t3446;
-              const double t5105 = t586*vertices[5](2);
-              const double t5108 = 2.0*t3457;
-              const double t5110 = 2.0*t3464;
-              const double t5111 = 2.0*t3465;
-              const double t5113 = t5105-2.0*t3448+t3449+t222*t5039-t3452-t3456-t5108-t3461+t923*t230-t5110-t5111+4.0*t3469;
-              const double t5116 = 2.0*t1562*t16;
-              const double t5120 = 2.0*t3629*t1180;
-              const double t5128 = t779*t284;
-              const double t5129 = t5116+t679*t352-t3475-t679*t622-t5120+t727*t55+t360*t230+2.0*t360*t3565-t360*t279-t727*t143-t736*t55+t5128;
-              const double t5134 = t595*t252;
-              const double t5135 = t483*t3;
-              const double t5136 = t733*t179;
-              const double t5138 = t733*t165;
-              const double t5139 = t765*t187;
-              const double t5140 = t768*t187;
-              const double t5146 = -2.0*t1774*t196+2.0*t908*t179-t5134+t5135-2.0*t5136-t5138+t5139-t5140+t252*t3612+2.0*t792*t273-t1379*t119+t1379*t98;
-              const double t5165 = -2.0*t792*t64-t620*t64+t620*t273-2.0*t620*t3-2.0*t792*t284-2.0*t620*t274-t620*t284+t792*t119+t736*t284-t736*t273+t736*t1-t736*t154;
-              const double t5167 = t300*t147;
-              const double t5182 = t736*t64+t5167+2.0*t337*t3531-t337*t222+t864*t252+2.0*t1193*t15+t424*t4093-t424*t1365+2.0*t1193*t614-t424*t4743-2.0*t1193*t499+t424*t476;
-              const double t5193 = t444*t156;
-              const double t5196 = -t739*t476-t739*t3612+t255*t768+t739*t635-t230*t768+t362*t499-t362*t614-t424*t568-t252*t360+t5193-t252*t635+t424*t1075;
-              const double t5198 = t860*t8;
-              const double t5199 = t831*t324;
-              const double t5209 = 2.0*t3480;
-              const double t5211 = 2.0*t3114*t976;
-              const double t5212 = t739*t3732+t5198+t5199+t233*t635+2.0*t233*t4093-2.0*t233*t1365-t233*t733-2.0*t233*t568-t230*t4093-t5209+t5211-t3483;
-      s1 = t5104+t4354+t3734+t4366+t3617+t5073+t4446+t5081+t4672+t3999+t3632+t4379+t3766+t4460+t3647+t4386+t3806+t4476+t5092+t5212+t4389+t3810+t4487+t3659+t3823+t4871+t4401+t5165+t4509+t4007+t3854+t5113+t4538+t3673+t4800+t3863+t4415+t3872+t3878+t4188+t3687+t4343+t4149+t4564+t4686+t3699+t3895+t5061+t5129+t4433+t3714+t3906+t4897+t4703+t4024+t4120+t4035+t5146+t4832+t3930+t4202+t4163+t4598+t4046;
-              const double t5219 = s1+t4710+t3753+t4498+t3939+t4055+t4525+t4258+t3781+t4726+t3796+t3957+t3975+t4131+t4332+t4551+t4632+t3842+t5182+t4066+t4176+t4736+t4847+t5196+t3985+t4075+t4582+t4082+t3888+t4815+t4749+t4088+t4646+t3920+t4099+t4858+t4756+t4110+t4657+t4215+t4773+t4617+t4225+t4238+t4878+t4785+t4248+t4270+t4280+t4295+t4303+t4312+t4321+t4910+t4913+t4919+t4935+t4949+t4961+t4977+t4990+t5007+t5021+t5035+t5045;
-              const double t5223 = 2.0*t395*t230;
-              const double t5224 = t464*vertices[5](2);
-              const double t5226 = t3972*vertices[3](2);
-              const double t5227 = t4683*eta;
-              const double t5228 = vertices[2](0)*vertices[7](2);
-              const double t5229 = t5228*zeta;
-              const double t5230 = t559*vertices[4](2);
-              const double t5231 = t1300*zeta;
-              const double t5232 = vertices[2](0)*eta;
-              const double t5233 = t5232*vertices[4](2);
-              const double t5234 = t5232*vertices[0](2);
-              const double t5235 = t5223-t3867+2.0*t5224-t5226+t4298-t5227+t3964-t3793+t5229+t5230-t4572+t3787+t4018+t5231-t4287-t5233+t5234+t3899-t3778;
-              const double t5236 = t609*eta;
-              const double t5237 = t2853*eta;
-              const double t5238 = 2.0*t947;
-              const double t5239 = t480*vertices[2](2);
-              const double t5241 = 2.0*t353;
-              const double t5242 = 2.0*t4612;
-              const double t5243 = 2.0*t465;
-              const double t5244 = 2.0*t3223;
-              const double t5245 = 2.0*t888;
-              const double t5246 = 2.0*t1905;
-              const double t5247 = 2.0*t1902;
-              const double t5248 = t5236-t5237+t5238-2.0*t5239+t5241-t352-t3989+t4505+t5242+t3953+t5243+t4050-t5244+t5245+t4043+t3914-t5246+t4134+t5247;
-              const double t5250 = 2.0*t1888;
-              const double t5251 = 2.0*t1876;
-              const double t5252 = 2.0*t517;
-              const double t5253 = 2.0*t510;
-              const double t5255 = 2.0*t1082;
-              const double t5257 = 2.0*t562;
-              const double t5258 = 2.0*t1935;
-              const double t5259 = 2.0*t806;
-              const double t5261 = 2.0*t1164;
-              const double t5262 = 2.0*t4477;
-              const double t5263 = 2.0*t1030;
-              const double t5264 = 2.0*t455;
-              const double t5265 = t5250+t606-t5251+t5252+t5253-2.0*t623-t5255-2.0*t467-t5257-t5258-t5259+2.0*t610+t5261-t3947-t5262-t5263-t4681+t5264-t4021;
-              const double t5266 = vertices[1](0)*vertices[2](2);
-              const double t5267 = t5266*xi;
-              const double t5269 = 2.0*t647;
-              const double t5271 = t4680*eta;
-              const double t5272 = t395*t255;
-              const double t5273 = 2.0*t5272;
-              const double t5274 = t290*t179;
-              const double t5275 = 2.0*t5274;
-              const double t5276 = 2.0*t1668;
-              const double t5277 = t429*t162;
-              const double t5278 = 2.0*t5277;
-              const double t5279 = t395*t233;
-              const double t5280 = 2.0*t5279;
-              const double t5281 = t429*t179;
-              const double t5282 = 2.0*t5281;
-              const double t5283 = t429*t176;
-              const double t5284 = 2.0*t5283;
-              const double t5285 = t480*t165;
-              const double t5286 = 2.0*t5285;
-              const double t5287 = 2.0*t1202;
-              const double t5288 = 2.0*t437;
-              const double t5290 = 2.0*t454*t123;
-              const double t5291 = t461*t123;
-              const double t5292 = 2.0*t5291;
-              const double t5293 = t480*t168;
-              const double t5294 = 2.0*t5293;
-              const double t5295 = 2.0*t5267-t4135-t5269-2.0*t1178+t5271+t5273+t5275+t5276+t3864-t3966+t5278-t5280+t5282-t5284+t5286+t5287-t5288-t5290-t5292-t5294;
-              const double t5298 = t429*t174;
-              const double t5299 = t1029*t123;
-              const double t5300 = vertices[1](0)*vertices[5](2);
-              const double t5301 = t5300*xi;
-              const double t5302 = t523*t179;
-              const double t5303 = t523*t174;
-              const double t5304 = t705*t165;
-              const double t5305 = t523*t162;
-              const double t5306 = t523*t176;
-              const double t5307 = t705*t168;
-              const double t5308 = t464*t230;
-              const double t5309 = t736*t196;
-              const double t5310 = t5300*t183;
-              const double t5311 = vertices[1](0)*vertices[6](2);
-              const double t5312 = t5311*t183;
-              const double t5313 = t480*t255;
-              const double t5314 = t480*t252;
-              const double t5315 = t395*t189;
-              const double t5316 = t395*t187;
-              const double t5317 = -t5298+t5299-t5301-t5302+t5303-t5304-t5305+t5306+t5307+t1027+t300-t5308-t5309+t5310-t5312-t5313+t5314+t5315-t5316;
-              const double t5318 = t464*t279;
-              const double t5319 = t480*t222;
-              const double t5320 = t395*t252;
-              const double t5321 = t464*t206;
-              const double t5322 = t979*t196;
-              const double t5323 = t412*t162;
-              const double t5324 = t979*t176;
-              const double t5325 = t979*t198;
-              const double t5326 = t464*t204;
-              const double t5327 = t979*t162;
-              const double t5328 = t2145-t454-t509+t5318-t5319-t5320+t5321+t850+t5322-t5323-t848-t5324-t5325-t1182+t1160-t5326+t5327-t1203+t3096;
-              const double t5330 = t412*t176;
-              const double t5331 = t412*t198;
-              const double t5332 = t464*t189;
-              const double t5333 = t887*t183;
-              const double t5334 = t412*t196;
-              const double t5335 = t1202*t183;
-              const double t5336 = t352*t183;
-              const double t5337 = t461*t183;
-              const double t5338 = t1300*t183;
-              const double t5339 = t788*t183;
-              const double t5340 = t622*t183;
-              const double t5341 = t464*t187;
-              const double t5342 = t509*t183;
-              const double t5343 = t705*t206;
-              const double t5344 = t705*t204;
-              const double t5345 = t2853*t123;
-              const double t5346 = t1191+t5330+t5331-t5332-t5333-t5334+t5335-t5336+t5337-t5338+t5339-t1937+t5340+t5341-t5342-t5343+t5344-t2763+t5345;
-              const double t5348 = 2.0*t1772*t123;
-              const double t5349 = t1027*t123;
-              const double t5350 = 2.0*t5349;
-              const double t5351 = t609*t123;
-              const double t5352 = 2.0*t5351;
-              const double t5353 = t395*t210;
-              const double t5354 = 2.0*t5353;
-              const double t5355 = t395*t212;
-              const double t5356 = 2.0*t5355;
-              const double t5357 = t887*t123;
-              const double t5358 = 2.0*t5357;
-              const double t5359 = t480*t212;
-              const double t5360 = 2.0*t5359;
-              const double t5361 = t480*t210;
-              const double t5362 = 2.0*t5361;
-              const double t5364 = 2.0*t5266*t123;
-              const double t5365 = t5311*t123;
-              const double t5366 = 2.0*t5365;
-              const double t5368 = 2.0*t464*t233;
-              const double t5369 = -t5348+t5350-t5352+t5354+t622-t5356+t5358+t5360-t5362-t860-t4060-t5364+t5366+t5368-t3798-t609+t1029+t358-t330-t3952;
-              const double t5375 = vertices[6](0)*t302;
-              const double t5383 = t1976*vertices[3](2);
-              const double t5384 = t1976*vertices[2](2);
-              const double t5385 = -t1990*t210-t5375*t212+t429*t3522-t429*t3520+t5375*t255-t5375*t252+t5375*t210+t1990*t3531-t5383+t5384-t1977;
-              const double t5386 = vertices[1](0)*t302;
-              const double t5387 = t5386*vertices[3](2);
-              const double t5388 = t5386*vertices[2](2);
-              const double t5391 = t1990*vertices[3](2);
-              const double t5392 = t1990*vertices[2](2);
-              const double t5396 = t1997-t5387+t5388+t429*t1167-t429*t1150+t5391-t5392-t1990*t168-t1990*t222+t1990*t165+t2500;
-              const double t5398 = t3031*vertices[5](2);
-              const double t5399 = t3031*vertices[4](2);
-              const double t5400 = t1785*vertices[5](2);
-              const double t5401 = t1785*vertices[4](2);
-              const double t5402 = t5386*vertices[5](2);
-              const double t5403 = t5386*vertices[4](2);
-              const double t5404 = -t1991-t5398+t5399+t3034-t3032+t5400-t5401-t1786+t2856-t5402+t5403;
-              const double t5405 = vertices[0](0)*t302;
-              const double t5406 = t5405*vertices[5](2);
-              const double t5410 = t5405*vertices[2](2);
-              const double t5417 = t5406+t5386*t168+t5386*t222-t1976*t3531-t5410+t1976*t210+t1976*t168+t1976*t222-t1976*t165-t1976*t212+t1976*t255;
-              const double t5423 = t5405*vertices[3](2);
-              const double t5431 = -t1976*t252+t5405*t165-t5386*t3531+t5423-t5386*t165+t1785*t233-t1785*t230+t1785*t187+t1785*t206-t1785*t3565+t1785*t279;
-              const double t5443 = -t1785*t204-t1785*t189-t412*t3522+t412*t3520+t3031*t230+t5375*t189-t5375*t233-t5375*t187+t5375*t230+t3031*t204-t3031*t233;
-              const double t5451 = t5405*vertices[4](2);
-              const double t5456 = -t3031*t187+t3031*t189+t3031*t3565+t5386*t204-t3031*t279-t3031*t206-t5451-t5386*t206+t5386*t3565-t5386*t279-t5405*t3565;
-              const double t5464 = t5405*t279-t5405*t204+t5405*t206+t412*t1523-t412*t917-t947+t5405*t3531-t5405*t168-t353-t465+t5244;
-              const double t5470 = -t888+t1905-t1902-t1888+t1876-t517-t5253+t623+t1082+t1990*t212-t1990*t255;
-              const double t5473 = t1990*t252-t5405*t222+t467+t5257+t1935+t806-t610-t5261+t1030-t455+t647;
-              const double t5475 = t1178-t1668-t5278-t5281+t5283-t5285-t1202+t437+t5290+t5291+t5293;
-              const double t5476 = 2.0*t5298;
-              const double t5477 = 2.0*t5303;
-              const double t5478 = 2.0*t5305;
-              const double t5479 = t5476-t5299+t5302-t5477+t5304+t5478-t5306-t5307-t1027-t300-t5315;
-              const double t5482 = 2.0*t2145;
-              const double t5483 = 2.0*t5323;
-              const double t5484 = 2.0*t5325;
-              const double t5485 = t5316-t5482+t454+t509-t5321-t850-t5322+t5483+t848+t5324+t5484;
-              const double t5486 = 2.0*t5327;
-              const double t5487 = 2.0*t5331;
-              const double t5488 = 2.0*t5333;
-              const double t5489 = t1182-t1160+t5326-t5486+t1203-t3096-t1191-t5330-t5487+t5332+t5488;
-              const double t5491 = 2.0*t5335;
-              const double t5492 = 2.0*t5339;
-              const double t5493 = 2.0*t1937;
-              const double t5494 = 2.0*t5342;
-              const double t5495 = t5334-t5491+t5336-t5337+t5338-t5492+t5493-t5340-t5341+t5494+t5343;
-              const double t5496 = -t5344+t2763-t5345+t5348-t5350+t5351-t5353+t5355-t5358-t5359+t5361;
-              const double t5501 = (t5385+t5396+t5404+t5417+t5431+t5443+t5456+t5464+t5470+t5473+t5475+t5479+t5485+t5489+t5495+t5496)*t3605;
-              const double t5504 = t469*xi;
-              const double t5505 = 2.0*t5504;
-              const double t5506 = 2.0*t1318;
-              const double t5508 = 2.0*t980;
-              const double t5509 = 2.0*t643;
-              const double t5510 = 2.0*t843;
-              const double t5511 = 2.0*t868;
-              const double t5512 = t1774*xi;
-              const double t5513 = 2.0*t5512;
-              const double t5514 = 2.0*t822;
-              const double t5515 = t559*vertices[4](1);
-              const double t5516 = t464*vertices[5](1);
-              const double t5518 = t480*vertices[1](1);
-              const double t5519 = 2.0*t5518;
-              const double t5520 = t5505-t5506-2.0*t569-t5508+t5509-t5510-t5511-t5513+t1794+t5514-t1653-t5515+t4306-t2482+t2593-2.0*t5516-t1307-t5519-t3076;
-              const double t5522 = t908*xi;
-              const double t5523 = 2.0*t5522;
-              const double t5524 = 2.0*t655;
-              const double t5525 = 2.0*t1734;
-              const double t5526 = t480*vertices[2](1);
-              const double t5528 = t489*xi;
-              const double t5529 = 2.0*t5528;
-              const double t5530 = 2.0*t1847;
-              const double t5531 = t586*xi;
-              const double t5532 = 2.0*t5531;
-              const double t5533 = 2.0*t1244;
-              const double t5534 = 2.0*t769;
-              const double t5535 = 2.0*t751;
-              const double t5536 = 2.0*t629;
-              const double t5537 = 2.0*t683;
-              const double t5538 = 2.0*t853;
-              const double t5539 = t417*xi;
-              const double t5540 = 2.0*t5539;
-              const double t5541 = t3629-2.0*t970+t2662+t5523-t2648+t5524+t5525+2.0*t5526-t5529+t5530-t5532-t5533+t5534+t5535+t5536-t5537-t5538+t5540-t1258;
-              const double t5543 = 2.0*t1019;
-              const double t5544 = 2.0*t1004;
-              const double t5545 = 2.0*t756;
-              const double t5547 = t513*xi;
-              const double t5548 = 2.0*t5547;
-              const double t5549 = 2.0*t514;
-              const double t5550 = 2.0*t997;
-              const double t5551 = t328*xi;
-              const double t5552 = 2.0*t5551;
-              const double t5554 = 2.0*t576;
-              const double t5555 = 2.0*t706;
-              const double t5556 = 2.0*t734;
-              const double t5557 = t464*vertices[1](1);
-              const double t5558 = 2.0*t5557;
-              const double t5559 = t3972*vertices[3](1);
-              const double t5560 = t5543+t5544+t5545+2.0*t384-t5548-t5549-t5550+t5552+2.0*t497-t5554-t5555-t5556+t3481+t3837-t4517+t5558-t1407+t2292+t5559;
-              const double t5561 = t5232*vertices[4](1);
-              const double t5562 = t5232*vertices[0](1);
-              const double t5563 = t395*t614;
-              const double t5564 = 2.0*t5563;
-              const double t5565 = t395*t499;
-              const double t5566 = 2.0*t5565;
-              const double t5567 = t705*t30;
-              const double t5568 = 2.0*t5567;
-              const double t5569 = t705*t8;
-              const double t5570 = 2.0*t5569;
-              const double t5571 = t480*t614;
-              const double t5572 = 2.0*t5571;
-              const double t5573 = t480*t499;
-              const double t5574 = 2.0*t5573;
-              const double t5575 = 2.0*t328;
-              const double t5576 = -t4540-t5017+t4015+t2240+t3443-t1859+t1701+t2619-t1886+t5561-t5562+t2536-t1683+t5564-t5566+t5568-t5570-t5572+t5574-t5575;
-              const double t5580 = 2.0*t481;
-              const double t5582 = 2.0*t523*t1434;
-              const double t5583 = t523*t71;
-              const double t5584 = 2.0*t5583;
-              const double t5585 = t523*t15;
-              const double t5586 = 2.0*t5585;
-              const double t5587 = t523*t438;
-              const double t5588 = 2.0*t5587;
-              const double t5589 = t290*t15;
-              const double t5590 = 2.0*t5589;
-              const double t5591 = t705*t59;
-              const double t5592 = 2.0*t5591;
-              const double t5593 = t705*t51;
-              const double t5594 = 2.0*t5593;
-              const double t5595 = t417*t123;
-              const double t5596 = 2.0*t5595;
-              const double t5597 = t1075*t123;
-              const double t5598 = 2.0*t5597;
-              const double t5600 = 2.0*t852*t123;
-              const double t5602 = 2.0*t586*t123;
-              const double t5603 = t765*t123;
-              const double t5604 = 2.0*t5603;
-              const double t5605 = t595*t123;
-              const double t5606 = 2.0*t5605;
-              const double t5607 = t568*t123;
-              const double t5608 = 2.0*t5607;
-              const double t5609 = 2.0*t513+t5580-t360-t768+t5582-t5584+t5586-t5588-t5590+t3612-t5592+t5594-t5596-t5598+t5600+t5602+t5604-t5606+t5608;
-              const double t5610 = t429*t1434;
-              const double t5611 = t429*t15;
-              const double t5612 = t429*t438;
-              const double t5613 = t768*t123;
-              const double t5614 = t429*t71;
-              const double t5615 = t480*t59;
-              const double t5616 = t480*t51;
-              const double t5617 = t979*t5;
-              const double t5618 = t412*t1434;
-              const double t5619 = t412*t71;
-              const double t5620 = t412*t687;
-              const double t5621 = t480*t18;
-              const double t5622 = t908*t183;
-              const double t5623 = t1252*t183;
-              const double t5624 = t464*t30;
-              const double t5625 = t464*t8;
-              const double t5626 = t979*t71;
-              const double t5627 = -t5610-t5611+t5612-t5613+t5614+t5615-t5616-t5617+t5618-t5619-t5620+t586+t489-t5621-t5622+t5623-t5624+t5625+t5626;
-              const double t5629 = t979*t687;
-              const double t5630 = 2.0*t5629;
-              const double t5632 = 2.0*t480*t453;
-              const double t5633 = t395*t349;
-              const double t5634 = 2.0*t5633;
-              const double t5635 = t736*t5;
-              const double t5636 = 2.0*t5635;
-              const double t5637 = t395*t453;
-              const double t5638 = 2.0*t5637;
-              const double t5639 = 2.0*t469;
-              const double t5641 = 2.0*t464*t349;
-              const double t5643 = 2.0*t1774*t123;
-              const double t5644 = t1252*t123;
-              const double t5645 = 2.0*t5644;
-              const double t5646 = t464*t156;
-              const double t5647 = 2.0*t5646;
-              const double t5649 = 2.0*t395*t18;
-              const double t5651 = 2.0*t480*t140;
-              const double t5652 = t5630+t5632-t447+t334+t5634+t5636-t5638-t5639-t5641+t5643-t5645+t5647+t568-t635+t5649+t5651-t1783-t4093+t1365;
-              const double t5654 = 2.0*t395*t156;
-              const double t5656 = 2.0*t464*t147;
-              const double t5657 = t464*t324;
-              const double t5658 = 2.0*t5657;
-              const double t5659 = t513*t183;
-              const double t5660 = 2.0*t5659;
-              const double t5661 = t383*t183;
-              const double t5662 = 2.0*t5661;
-              const double t5663 = t390*t183;
-              const double t5664 = 2.0*t5663;
-              const double t5665 = t412*t5;
-              const double t5666 = 2.0*t5665;
-              const double t5668 = 2.0*t469*t183;
-              const double t5669 = t733*t183;
-              const double t5670 = 2.0*t5669;
-              const double t5671 = t765*t183;
-              const double t5672 = 2.0*t5671;
-              const double t5673 = t595*t183;
-              const double t5674 = 2.0*t5673;
-              const double t5675 = t464*t508;
-              const double t5676 = 2.0*t5675;
-              const double t5678 = 2.0*t979*t1434;
-              const double t5680 = 2.0*t755*t183;
-              const double t5681 = t395*t508;
-              const double t5682 = 2.0*t5681;
-              const double t5683 = t395*t324;
-              const double t5684 = 2.0*t5683;
-              const double t5686 = -t5654-t5656-t383+t441-t5658+t5660-t5662+t5664+t5666-t5668+t5670-t5672+t5674+t5676-t5678-t5680-t5682+t5684+t733-2.0*t417;
-              const double t5691 = -t5505+t1318+t569+t980-t643+t843+t868-t822+t970-t655-t1734;
-              const double t5692 = t5529-t1847+t5532+t1244-t769-t751-t629+t683+t853-t5540-t1019;
-              const double t5694 = -t1004-t756-t384+t5548+t514+t997-t5552-t497+t576+t706+t734;
-              const double t5695 = t5405*vertices[4](1);
-              const double t5696 = t5405*vertices[5](1);
-              const double t5697 = t1785*vertices[5](1);
-              const double t5698 = t1785*vertices[4](1);
-              const double t5699 = t1785*vertices[1](1);
-              const double t5700 = t1785*vertices[0](1);
-              const double t5701 = t5386*vertices[5](1);
-              const double t5702 = t5386*vertices[4](1);
-              const double t5703 = t1990*vertices[2](1);
-              const double t5704 = t1990*vertices[1](1);
-              const double t5705 = t1990*vertices[0](1);
-              const double t5706 = t5695-t5696-t5697+t5698+t5699-t5700+t5701-t5702+t5703-t5704+t5705;
-              const double t5709 = t1976*vertices[3](1);
-              const double t5710 = t1976*vertices[2](1);
-              const double t5711 = t1976*vertices[1](1);
-              const double t5712 = t1976*vertices[0](1);
-              const double t5713 = -t5563+t5565+t5709-t5710-t5567+t5569+t5571-t5573+t5711-t5712+t328;
-              const double t5714 = t5386*vertices[3](1);
-              const double t5715 = t5386*vertices[2](1);
-              const double t5716 = t5405*vertices[3](1);
-              const double t5717 = t5405*vertices[2](1);
-              const double t5718 = t3031*vertices[5](1);
-              const double t5719 = t3031*vertices[4](1);
-              const double t5720 = t3031*vertices[1](1);
-              const double t5721 = t3031*vertices[0](1);
-              const double t5722 = -t513+t5714-t5715-t5716+t5717+t5718-t481-t5719-t5720+t5721-t5582;
-              const double t5724 = t5583-t5585+t5588+t5591-t5593+t5596+t5597-t5600-t5602-t5603+t5606;
-              const double t5725 = 2.0*t5610;
-              const double t5726 = 2.0*t5612;
-              const double t5727 = t1990*vertices[3](1);
-              const double t5728 = 2.0*t5618;
-              const double t5729 = -t5607+t5725+t5611-t5726+t5613-t5614-t5727-t5615+t5616+t5617-t5728;
-              const double t5733 = 2.0*t5620;
-              const double t5734 = t5619+t5733-t586-t489+t5624-t5625-t5626-t5630+t469+t5657-t5660;
-              const double t5738 = t5661-t5663-t5665+t5668-t5669+t5671-t5674-t5675+t5386*t147-t5386*t8+t5405*t8;
-              const double t5751 = t5386*t30-t5405*t30+t5405*t33-t5405*t147-t429*t414+t429*t550-t429*t528+t429*t520-t5375*t499-t1990*t51-t1990*t614;
-              const double t5763 = t1990*t453-t1990*t18+t1990*t499+t5375*t614-t5375*t453+t5375*t18+t1990*t59+t1990*t140-t1990*t138+t1976*t614-t1976*t453;
-              const double t5777 = t1976*t18+t1976*t138-t1976*t59-t1976*t140+t1976*t51-t5386*t33+t5386*t51+t5386*t138-t5386*t59-t5386*t140+t5405*t140;
-              const double t5788 = -t5405*t51+t5678+t3031*t324-t3031*t156-t5375*t508-t3031*t33+t3031*t147-t3031*t8-t3031*t508+t3031*t349+t3031*t30;
-              const double t5801 = t1785*t156+t1785*t8+t1785*t508-t1785*t349-t1785*t324+t1785*t33-t1785*t147-t1976*t499-t1785*t30-t412*t550-t412*t485;
-              const double t5809 = t412*t1162+t412*t414+t5375*t349+t5375*t324-t5375*t156+t5680+t5681-t5683+t417-t5405*t138+t5405*t59;
-              const double t5814 = (t5691+t5692+t5694+t5706+t5713+t5722+t5724+t5729+t5734+t5738+t5751+t5763+t5777+t5788+t5801+t5809)*t3605;
-              const double t5817 = 2.0*t102;
-              const double t5818 = 2.0*t139;
-              const double t5819 = 2.0*t155;
-              const double t5820 = t52-t54-t56-t61+t76+t5817-t108-t112+t118+t122+t137+t5818-t142-t146+t153-t5819;
-              const double t5821 = 2.0*t159;
-              const double t5823 = t2329*vertices[2](2);
-              const double t5825 = t778*vertices[0](2);
-              const double t5827 = t778*vertices[4](2);
-              const double t5828 = t157-t5821+t3928-t3849+t3832+t3843+t2740-t2758-t3829-t3847-t377*vertices[2](2)-t5823+t140*vertices[1](2)+t5825+t778*vertices[5](2)-t5827;
-              const double t5830 = vertices[2](1)*t340;
-              const double t5831 = t5830*vertices[4](2);
-              const double t5835 = t5830*vertices[0](2);
-              const double t5839 = vertices[2](1)*vertices[1](2);
-              const double t5842 = t1529*vertices[2](2);
-              const double t5843 = t5831-t778*vertices[1](2)-t5830*vertices[5](2)+t2726+t2736-t4602-t2738+t4594-t2364-t2761-t226*eta-t5835+t5830*vertices[1](2)+vertices[2](1)*vertices[5](2)*eta-2.0*t5839*eta+t5842;
-              const double t5844 = t1529*vertices[6](2);
-              const double t5846 = t2329*vertices[6](2);
-              const double t5852 = -t5844+t824*vertices[2](2)+t5846-t156*vertices[2](2)-t824*vertices[6](2)+2.0*t48*eta+t377*vertices[6](2)+t2775+t5839-t48+t119-t114+t91-t274-t88+t154;
-              const double t5856 = -t16-t49-t52+t54+t56+t61+t62-t76-t89+t92-t5817;
-              const double t5857 = t108+t110+t112-t115-t118+t120+t125-t127-t132+t134-t153;
-              const double t5859 = 2.0*t190;
-              const double t5862 = t5819-t157+t169-t188+t5859+t193-2.0*t194-t195-t197+t199+2.0*t200;
-              const double t5864 = vertices[0](1)*vertices[1](2);
-              const double t5865 = eta*zeta;
-              const double t5866 = t5864*t5865;
-              const double t5867 = 2.0*t5866;
-              const double t5869 = t51*t255;
-              const double t5871 = t51*t252;
-              const double t5874 = -t3510+t203+t215-t1213*t196-t5867+t1213*t176-t5869+t1213*t255+t5871-t1213*t252-t1213*t3565;
-              const double t5878 = -t224+2.0*t225-t227+t231-t235-t240+t250-t3928+t3849-t3832-t3843;
-              const double t5879 = -t2740+t2758+t3829+t3847-t2726-t2736+t4602+t2738-t4594+t2364+t2761;
-              const double t5881 = t18*vertices[3](2);
-              const double t5882 = vertices[3](1)*vertices[2](2);
-              const double t5883 = t5882*zeta;
-              const double t5884 = vertices[1](1)*vertices[0](2);
-              const double t5885 = t5884*eta;
-              const double t5886 = 2.0*t5885;
-              const double t5887 = t377*vertices[4](2);
-              const double t5888 = t5864*eta;
-              const double t5889 = 2.0*t5888;
-              const double t5890 = t1529*vertices[1](2);
-              const double t5891 = -t5881-t2775+t5883-t5886-t4437+t3818-t5887-t4591+t5889-t5890-t3784;
-              const double t5892 = t1529*vertices[5](2);
-              const double t5893 = t2329*vertices[5](2);
-              const double t5894 = t2329*vertices[1](2);
-              const double t5895 = t5864*zeta;
-              const double t5896 = t824*vertices[0](2);
-              const double t5901 = t3681+t5892-t5893+t5894+t5895-t5896+t5884-t1529*t174-t1529*t975+t1529*t296+t1529*t179;
-              const double t5905 = t453*vertices[0](2);
-              const double t5906 = t824*vertices[4](2);
-              const double t5907 = t377*vertices[0](2);
-              const double t5908 = t340*vertices[7](2);
-              const double t5910 = t340*vertices[4](2);
-              const double t5916 = t3738-t5905+t3839+t5906+t5907+t18*t5908-t18*t5910+t377*t206+t2329*t975-t2329*t296-t2329*t179;
-              const double t5917 = t340*vertices[3](2);
-              const double t5929 = -t18*t5917-t824*t210-t824*t174-t824*t975+t824*t296+t824*t212-t824*t206+t824*t204-t778*t212+t2329*t174+t824*t179;
-              const double t5937 = t156*t210;
-              const double t5938 = t140*t212;
-              const double t5939 = t140*t210;
-              const double t5940 = t156*t212;
-              const double t5942 = t778*t210+t778*t206-t778*t204-t1529*t252-t1529*t3565+t1529*t255+t5937+t5938-t5939-t5940+t15*t393;
-              const double t5943 = t340*vertices[0](2);
-              const double t5952 = 2.0*t5882*t5865;
-              const double t5953 = t55*t5865;
-              const double t5954 = -t15*t5943+t1529*t279+t191*t424+t191*t5943-t191*t393+t1213*t279-t191*t5910-t261+t114-t5952-t5953;
-              const double t5957 = t143*t5865;
-              const double t5958 = t119*t5865;
-              const double t5959 = 2.0*t5958;
-              const double t5960 = t64*t5865;
-              const double t5961 = t98*t5865;
-              const double t5963 = t453*t165;
-              const double t5965 = 2.0*t453*t189;
-              const double t5966 = t88*t5865;
-              const double t5967 = 2.0*t5966;
-              const double t5970 = t453*t168;
-              const double t5971 = 2.0*t5970;
-              const double t5972 = t5957+t5959+t5960-t5961-t1213*t162+t5963+t5965+t5967-t377*t179+t377*t174-t5971;
-              const double t5973 = t453*t187;
-              const double t5975 = t18*t189;
-              const double t5976 = 2.0*t5975;
-              const double t5978 = 2.0*t18*t168;
-              const double t5979 = t18*t187;
-              const double t5980 = t18*t165;
-              const double t5986 = -t5973-t377*t204-t5976+t5978+t5979-t5980+t18*t5943+t377*t210+t377*t975-t377*t296-t377*t212;
-              const double t5997 = -t91-t5864+t15*t5910-t15*t424+t438*t424-t2363*t279+t2363*t3565-t2363*t255+t2363*t252+t2329*t252+t438*t5943;
-              const double t6000 = t324*t255;
-              const double t6004 = t324*t252;
-              const double t6006 = -t438*t393-t438*t5910+t6000+t2329*t3565-t2329*t279-t2329*t255-t6004+t1213*t198+t88-t154-t3803;
-              const double t6011 = (t5856+t5857+t5862+t5874+t5878+t5879+t5891+t5901+t5916+t5929+t5942+t5954+t5972+t5986+t5997+t6006)*t3605;
-              const double t6014 = 2.0*t3793;
-              const double t6015 = 2.0*t5234;
-              const double t6016 = 2.0*t4043;
-              const double t6017 = t3964-t6014-t4572-t5233+t6015+t5236+t6016-t5246+t4134+t1902+t1888-t1935-t3947-t3937-t4027-t2782;
-              const double t6018 = vertices[2](0)*t340;
-              const double t6019 = t6018*vertices[0](2);
-              const double t6020 = t3940+t2830-t4198+t3942+t2785-t2777-t4169+t4172+t495+t5264-t4021-t2972+t2713+t4196-t5266-t6019;
-              const double t6022 = 2.0*t4135;
-              const double t6024 = t720*vertices[4](2);
-              const double t6026 = t720*vertices[0](2);
-              const double t6029 = t730*vertices[6](2);
-              const double t6030 = t730*vertices[2](2);
-              const double t6031 = t432*vertices[6](2);
-              const double t6032 = t432*vertices[2](2);
-              const double t6036 = -t6022+t720*vertices[5](2)-t6024-t720*vertices[1](2)+t6026+t1379*vertices[6](2)-t1379*vertices[2](2)-t6029+t6030+t6031-t6032+t341*vertices[2](2)-t341*vertices[6](2)-t2677-t290*vertices[2](2)+t2679;
-              const double t6038 = t6018*vertices[4](2);
-              const double t6042 = t559*vertices[1](2);
-              const double t6043 = vertices[2](0)*vertices[5](2);
-              const double t6048 = -t6018*vertices[5](2)+t6038+t6018*vertices[1](2)+t5271+2.0*t5266*eta+t6042+t6043*eta+t3864-2.0*t495*eta-t5311*eta+t300-t454-t2763-t860+t1029-t330;
-              const double t6052 = -t465-t6016+t5246-t4134-t1902-t1888-t517+t562+t1935-t1164+t3947;
-              const double t6053 = t4477+t1030+t3937+t4027+t2782-t3940-t2830+t4198-t3942-t2785+t2777;
-              const double t6057 = t4169-t4172-t5264+t4021+t2972-t2713-t4196-t5267+t6022+t836*t279-t836*t162;
-              const double t6061 = t292*t5865;
-              const double t6062 = 2.0*t6061;
-              const double t6063 = t404*t5865;
-              const double t6064 = 2.0*t6063;
-              const double t6065 = t622*t5865;
-              const double t6066 = t1300*t5865;
-              const double t6068 = t330*t5865;
-              const double t6069 = 2.0*t6068;
-              const double t6070 = t836*t176+t836*t198-t836*t196-t6062-t6064-t6065+t6066-t836*t3565+t6069+t2677-t2679;
-              const double t6077 = t366*t255;
-              const double t6079 = t366*t252;
-              const double t6081 = vertices[3](0)*xi;
-              const double t6085 = t432*t3565-t432*t279+t395*t5943-t395*t393+t6077-t432*t255-t6079+t432*t252-t6081*t5910+t6081*t424+t1709*t252;
-              const double t6090 = vertices[1](0)*vertices[0](2);
-              const double t6095 = t290*t212;
-              const double t6096 = t290*t210;
-              const double t6097 = -t1709*t279+t6081*t5943-t6081*t393+t1709*t3565+t6090+t464*t393+t464*t5910-t464*t424-t1709*t255-t6095+t6096;
-              const double t6099 = t559*t212;
-              const double t6100 = t559*t210;
-              const double t6106 = t1029*t5865;
-              const double t6107 = 2.0*t6106;
-              const double t6108 = t352*t5865;
-              const double t6109 = t461*t5865;
-              const double t6110 = t6099-t6100+t730*t255-t730*t252-t730*t3565+t730*t279-t464*t5943+t6107+t6108-t6109+t1178;
-              const double t6120 = -t5271+t341*t204-t720*t212+t720*t210+t720*t206+t341*t296+t341*t212-t341*t210-t341*t206-t292-t736*t5917;
-              const double t6133 = t736*t187;
-              const double t6134 = t736*t165;
-              const double t6135 = -t736*t5910+t736*t5908-t432*t179+t432*t174+t432*t975-t432*t296+t341*t179-t341*t174-t341*t975+t6133-t6134;
-              const double t6145 = t736*t189;
-              const double t6146 = 2.0*t6145;
-              const double t6147 = t736*t5943-t5274-t1379*t179+t1379*t174+t1379*t975-t1379*t296-t1379*t212+t1379*t210+t1379*t206-t1379*t204-t6146;
-              const double t6150 = 2.0*t736*t168;
-              const double t6151 = t792*t187;
-              const double t6152 = t792*t165;
-              const double t6157 = 2.0*t792*t189;
-              const double t6158 = t792*t168;
-              const double t6159 = 2.0*t6158;
-              const double t6162 = t412*t255;
-              const double t6163 = t6150-t6151+t6152-t730*t174-t730*t975+t730*t296+t6157-t6159-t395*t5910+t395*t424-t6162;
-              const double t6165 = t412*t252;
-              const double t6169 = t836*t255+t6165-t836*t252+t730*t179-t3864-t720*t204+t5279+t405+t5290+t5291+t5293;
-              const double t6172 = 2.0*t5299;
-              const double t6173 = 2.0*t5307;
-              const double t6174 = t730*vertices[1](2);
-              const double t6175 = -t6172+t3935+t5304-t6173-t300+t5308-t5315-t6174+t454-t5322+t5323;
-              const double t6176 = 2.0*t5324;
-              const double t6177 = t736*vertices[3](2);
-              const double t6178 = 2.0*t5332;
-              const double t6179 = t432*vertices[5](2);
-              const double t6180 = t792*vertices[0](2);
-              const double t6181 = t6176+t5325-t5486-t6177-t5330+t6178+t4676-t6179-t6180-t5341+t2755;
-              const double t6183 = t292*eta;
-              const double t6184 = 2.0*t6183;
-              const double t6185 = t432*vertices[1](2);
-              const double t6186 = t730*vertices[5](2);
-              const double t6187 = t1379*vertices[0](2);
-              const double t6188 = t1379*vertices[4](2);
-              const double t6189 = t341*vertices[0](2);
-              const double t6190 = t6184-t3917+t4546-t3969+t6185-t3961+t6186-t4155+t6187-t6188-t6189;
-              const double t6191 = t341*vertices[4](2);
-              const double t6192 = t6090*eta;
-              const double t6193 = 2.0*t6192;
-              const double t6194 = t3952*eta;
-              const double t6195 = t6191-t6193+t6194+t2763-t5349+t5351-t5357+t5364-t5365-t5368+t330;
-              const double t6200 = (t6052+t6053+t6057+t6070+t6085+t6097+t6110+t6120+t6135+t6147+t6163+t6169+t6175+t6181+t6190+t6195)*t3605;
-              const double t6203 = 2.0*t4517;
-              const double t6204 = 2.0*t2292;
-              const double t6205 = 2.0*t1701;
-              const double t6206 = -t980-t843+t4306+t1734+t1847-t5533-t1258+t5544+t3481+t3837-t6203-t1407+t6204-t1859+t6205+t5561;
-              const double t6207 = 2.0*t5562;
-              const double t6208 = -t6207-t328-t360-t768+t586+t334-t1783+t1365-t3764-t958+t1774-t3903+t4693+t1432-t1007+t3623;
-              const double t6210 = t432*vertices[6](1);
-              const double t6211 = t432*vertices[2](1);
-              const double t6216 = t6018*vertices[0](1);
-              const double t6217 = vertices[2](0)*vertices[5](1);
-              const double t6223 = -t4971-t1012+t1010-t6210+t6211+t1379*vertices[2](1)-t341*vertices[2](1)+t341*vertices[6](1)+t295-t1379*vertices[6](1)+t6216-t6217*eta+2.0*t958*eta+t1418-2.0*t2990+t6018*vertices[5](1);
-              const double t6224 = t6018*vertices[4](1);
-              const double t6227 = t720*vertices[4](1);
-              const double t6229 = t720*vertices[0](1);
-              const double t6231 = t730*vertices[6](1);
-              const double t6232 = t730*vertices[2](1);
-              const double t6233 = -t6224-t6018*vertices[1](1)-t720*vertices[5](1)+t6227+t720*vertices[1](1)-t6229-t559*vertices[1](1)+t6231-t6232-t1710+t3762+t3359+t5033-t1726-t5049+t3331;
-              const double t6237 = t334*t5865;
-              const double t6238 = 2.0*t6237;
-              const double t6240 = 2.0*t589*t5865;
-              const double t6241 = t383*t5865;
-              const double t6242 = t390*t5865;
-              const double t6244 = t980+t843+t5512-t822-t1734-t1847-t6238+t6240+t6241-t6242-t395*t1529;
-              const double t6247 = t395*t377+t395*t2329+t5531+t5533-t769+t1258-t5544+t997-t5551+t576-t3481;
-              const double t6249 = -t3837+t6203-t5557+t1407-t6204+t328+t360+t5589+t5592-t5593+t5595;
-              const double t6250 = 2.0*t5613;
-              const double t6251 = 2.0*t5626;
-              const double t6252 = -t5602-t5603+t5605-t5607+t6250-t5615+t5617-t5618+t5619-t586-t6251;
-              const double t6255 = -t5629-t334-t5633+t5641-t5643+t5644-t5646+t5657-t5676+t5678+t5681;
-              const double t6257 = t736*t324;
-              const double t6258 = t736*t51;
-              const double t6263 = t736*t508;
-              const double t6264 = 2.0*t6263;
-              const double t6266 = 2.0*t736*t59;
-              const double t6268 = t3764+t736*t2329-t6257+t6258-t736*t1529+t736*t2363-t1379*t499+t1379*t8+t6264-t6266-t1379*t30;
-              const double t6281 = t720*t8-t1379*t191+t1379*t600+t1379*t614+t341*t499+t341*t30-t341*t8+t720*t614-t720*t499-t720*t30-t341*t15;
-              const double t6292 = t792*t324;
-              const double t6293 = t341*t438+t341*t191-t341*t600-t341*t614-t1379*t438+t432*t15-t432*t438-t432*t191-t736*t1213+t432*t600+t6292;
-              const double t6297 = t792*t51;
-              const double t6301 = 2.0*t309*t5865;
-              const double t6302 = t768*t5865;
-              const double t6303 = 2.0*t6302;
-              const double t6304 = t733*t5865;
-              const double t6305 = t765*t5865;
-              const double t6308 = -t6297+t1379*t15+t309-t337+t836*t5+t6301-t6303-t6304+t6305+t836*t1434-t836*t71;
-              const double t6310 = t559*t499;
-              const double t6319 = t290*t614;
-              const double t6320 = -t836*t687+t6310-t730*t453-t836*t147+t464*t1529-t464*t377-t464*t2329+t464*t824+t1709*t453-t1709*t18+t6319;
-              const double t6322 = t290*t499;
-              const double t6323 = t559*t614;
-              const double t6331 = t412*t18;
-              const double t6333 = -t6322-t6323-t6081*t1529+t6081*t377+t6081*t2329+t730*t18+t730*t33-t730*t147-t836*t453-t6331+t836*t18;
-              const double t6337 = t366*t18;
-              const double t6343 = t412*t453;
-              const double t6344 = t366*t453;
-              const double t6345 = t836*t33-t1709*t33+t1709*t147+t6337-t432*t18-t432*t33+t432*t147-t6081*t824-t395*t824+t6343-t6344;
-              const double t6349 = 2.0*t2366;
-              const double t6350 = t341*vertices[0](1);
-              const double t6351 = t341*vertices[4](1);
-              const double t6352 = t432*t453+t3114+t2584-t1403+t1539-t2273-t310-t6349+t2527+t6350-t6351;
-              const double t6353 = t792*t59;
-              const double t6354 = 2.0*t6353;
-              const double t6358 = 2.0*t792*t508;
-              const double t6361 = t432*vertices[1](1);
-              const double t6362 = t432*vertices[5](1);
-              const double t6363 = t6354+t730*t191-t730*t600-t6358-t730*t15+t730*t438-t590-t6361+t2170+t6362-t1447;
-              const double t6365 = 2.0*t3002;
-              const double t6366 = t730*vertices[1](1);
-              const double t6367 = t730*vertices[5](1);
-              const double t6368 = t6365+t6366+t1815-t400-t6367+t3903-t4693-t1432+t1007-t3623+t4971;
-              const double t6369 = t1379*vertices[0](1);
-              const double t6370 = t1379*vertices[4](1);
-              const double t6371 = t1012-t1010+t1710-t3762-t3359-t5033+t1726+t5049-t3331-t6369+t6370;
-              const double t6376 = (t6244+t6247+t6249+t6252+t6255+t6268+t6281+t6293+t6308+t6320+t6333+t6345+t6352+t6363+t6368+t6371)*t3605;
-              const double t6379 = 2.0*t2;
-              const double t6380 = 2.0*t21;
-              const double t6381 = 2.0*t34;
-              const double t6382 = -t6379+t4+t9-t19+t6380-t27-t29-t31-t6381+t36-t67+t86-t99+t104-t145+t149;
-              const double t6383 = 2.0*t150;
-              const double t6384 = t6383-t10+t25-t64+t273-t20+t278+t1-t3725-t1116+t1119-t931+t4830-t4589+t1390+t1486;
-              const double t6387 = vertices[5](1)*vertices[1](2);
-              const double t6391 = -t4807+t783-t798-t3816+t3759+t3723+t4811-t3702+t3721+t679*vertices[6](2)-t1492-t6387+t22-t147*vertices[1](2)+t3656*vertices[1](2)-t3656*vertices[2](2);
-              const double t6405 = t3665+t3719-t3711*vertices[1](2)+t3711*vertices[2](2)-t3712-t3657-vertices[5](1)*vertices[2](2)*zeta+2.0*t6387*zeta+t443*vertices[5](2)-t443*vertices[6](2)-2.0*t22*zeta+t226*zeta+t4423-t4419+t18*vertices[5](2)-t679*vertices[5](2);
-              const double t6411 = t6379-t4-t6-t782*t975-t9-t11+t782*t196+t19-t6380+t23+t27;
-              const double t6412 = t443*vertices[3](2);
-              const double t6416 = t29+t31+t6412-t36+t38+t57-t65+t67-t679*t189+t782*t296+t679*t975;
-              const double t6422 = t350*vertices[4](2);
-              const double t6426 = -t679*t196-t72+t74-t679*t165-t86+t679*t187-t104+t679*t168-t349*t6422+t679*t198-t679*t296;
-              const double t6427 = t350*vertices[3](2);
-              const double t6429 = t350*vertices[0](2);
-              const double t6431 = t350*vertices[7](2);
-              const double t6435 = 2.0*t177;
-              const double t6437 = -t349*t6427+t349*t6429+t349*t6431+t164+t443*t296-t443*t975-t175-t6435+t181+t443*t196-t182;
-              const double t6445 = t8*t230;
-              const double t6446 = t100*t5865;
-              const double t6447 = vertices[4](1)*vertices[5](2);
-              const double t6448 = t6447*t5865;
-              const double t6451 = -t443*t198-t185+t186-t930*t176+t930*t162-t930*t222+t930*t230-t6445-t6446+2.0*t6448-t893*t296;
-              const double t6461 = t893*t975-t893*t196-t5*t6427+t5*t739-t207-t5*t479-t208+t5*t6429+t930*t3531+2.0*t209-t930*t233;
-              const double t6470 = t191*t6427+t213-2.0*t214+t216-t217-t191*t739+2.0*t218-t3514+t191*t479-t930*t174+t930*t179;
-              const double t6477 = t5867+t5869+t687*t6427-t191*t6429-t782*t3531+t782*t233+t244+t246-t249-t1485*t3531+t1485*t233;
-              const double t6488 = t140*t206;
-              const double t6490 = -t1485*t230+t1485*t222-t687*t6429-t687*t739+t687*t479-t256+t782*t222-t258-t782*t230+t6488+t140*t6431;
-              const double t6491 = t156*vertices[4](2);
-              const double t6492 = t6447*eta;
-              const double t6493 = 2.0*t5895;
-              const double t6494 = t6491-t6492+t5885+t4437-t3818+t4591-t5888+t3784-t3681-t6493-t5884;
-              const double t6496 = 2.0*t5905;
-              const double t6497 = 2.0*t5940;
-              const double t6498 = 2.0*t5960;
-              const double t6499 = -t3738+t6496-t3839-t5937-t5938+t6497+t5953-t5958-t6498+t5961-t5963;
-              const double t6500 = 2.0*t5973;
-              const double t6501 = 2.0*t6000;
-              const double t6502 = -t5965-t5966+t5970+t6500+t10+t5975-t5979+t265-t25+t5864-t6501;
-              const double t6511 = t6004+t276+t20+t893*t198+t893*t230-t893*t222+t893*t3531-t893*t233-t140*t6422+t283-t1;
-              const double t6517 = 2.0*t156*t206;
-              const double t6518 = t156*t204;
-              const double t6522 = t156*t6427-t156*t6431+t140*t6429-t140*t6427-t6517+t6518-t156*t6429-t782*t198+t156*t6422+t3725+t1116;
-              const double t6524 = -t1119+t931-t4830+t4589-t1390-t1486+t4807-t783+t798+t3816-t3759;
-              const double t6525 = t679*vertices[3](2);
-              const double t6526 = t679*vertices[0](2);
-              const double t6527 = t443*vertices[0](2);
-              const double t6528 = t782*vertices[2](2);
-              const double t6529 = t782*vertices[1](2);
-              const double t6530 = t893*vertices[2](2);
-              const double t6531 = t893*vertices[1](2);
-              const double t6532 = -t3723-t4811+t3803+t1492-t6525+t6526-t6527+t6528-t6529-t6530+t6531;
-              const double t6537 = (t6411+t6416+t6426+t6437+t6451+t6461+t6470+t6477+t6490+t6494+t6499+t6502+t6511+t6522+t6524+t6532)*t3605;
-              const double t6540 = t3983-t717+t3289-t3006-t4397+t4501-t4493-t875+t870+t4395+t3298-t3987-t3867-t3293+t3945-t3922;
-              const double t6541 = 2.0*t3787;
-              const double t6551 = t4298-t1193+t3295+t6541-t4287-t674*vertices[6](2)-t727*vertices[5](2)+t736*vertices[5](2)-t4107+t4047+t727*vertices[6](2)-2.0*t5300*zeta+t5311*zeta-t4124+t3745*vertices[2](2)-t3745*vertices[1](2);
-              const double t6559 = 2.0*t3778;
-              const double t6560 = 2.0*t3989;
-              const double t6561 = t3992-t1550+2.0*t1193*zeta+t4116-t3740*vertices[2](2)+t3740*vertices[1](2)-t4113-t3972*vertices[1](2)+t674*vertices[5](2)+t4032-t4039+t5300+t3899-t6559-t352-t6560;
-              const double t6562 = 2.0*t3953;
-              const double t6563 = 2.0*t1203;
-              const double t6564 = 2.0*t1191;
-              const double t6565 = t4505+t6562+t888+t3914+t606-t4681-t3966+t1202-t437+t850-t848-t1182-t6563+t6564+t358-t3952;
-              const double t6569 = -t3983+t717-t3289+t3006+t4397-t4501+t4493+t875-t870-t4395-t3298;
-              const double t6570 = t290*vertices[4](2);
-              const double t6571 = t650*vertices[2](2);
-              const double t6572 = t449*vertices[1](2);
-              const double t6573 = t674*vertices[0](2);
-              const double t6574 = t674*vertices[3](2);
-              const double t6575 = t727*vertices[0](2);
-              const double t6576 = t3987+t3293-t3945+t3922-t3295+t6570-t6571-t6572-t6573+t6574+t6575;
-              const double t6578 = t727*vertices[3](2);
-              const double t6579 = t449*vertices[2](2);
-              const double t6580 = t650*vertices[1](2);
-              const double t6581 = vertices[4](0)*vertices[5](2);
-              const double t6582 = t6581*eta;
-              const double t6583 = -t6578+t6579+t6580-t947-t6582-t353+t6560-t4505-t4612-t6562+t3223;
-              const double t6592 = -t888-t3914-t650*t296+t650*t975-t650*t196+t650*t198-t674*t198+t674*t196-t620*t6427+t806+t449*t222;
-              const double t6606 = -t449*t230-t449*t3531+t449*t233-t674*t975+t727*t187+t727*t168-t727*t189-t727*t296+t727*t975-t727*t196+t727*t198;
-              const double t6618 = t620*t6431-t620*t6422+t620*t6429+t674*t296-t559*t6422-t559*t6427+t559*t6429-t290*t6431+t290*t6422+t290*t6427-t290*t6429;
-              const double t6620 = t290*t204;
-              const double t6622 = 2.0*t290*t206;
-              const double t6628 = vertices[4](0)*xi;
-              const double t6633 = t6620-t6622+t449*t296-t449*t975+t449*t196-t449*t198-t727*t165-t6628*t6429+t711*t222-t711*t230-t711*t3531;
-              const double t6639 = t559*t206;
-              const double t6641 = t429*t230;
-              const double t6645 = t711*t233-t650*t222+t650*t230+t650*t3531-t650*t233+t6639+t559*t6431-t6641+t603*t3531-t603*t233+t395*t6427;
-              const double t6659 = -t395*t739+t395*t479-t395*t6429-t480*t6427+t480*t739-t480*t479+t480*t6429+t6628*t6427-t6628*t739+t6628*t479+t4681;
-              const double t6660 = t2853*t5865;
-              const double t6661 = t6581*t5865;
-              const double t6662 = 2.0*t6661;
-              const double t6669 = -t6660+t6662-t603*t174+t603*t179-t603*t176+t603*t162-t603*t222+t603*t230+t6062+t6065-t6068;
-              const double t6671 = 2.0*t6077;
-              const double t6672 = 2.0*t6095;
-              const double t6673 = 2.0*t6108;
-              const double t6674 = -t6671+t6079-t6090+t647+t6672-t6096-t6099-t6106-t6673+t6109+t292;
-              const double t6675 = 2.0*t6151;
-              const double t6676 = -t6133-t5272+t6145+t6675-t6152-t6157+t6158+t6162+t3966-t5277+t5283;
-              const double t6679 = 2.0*t5306;
-              const double t6680 = 2.0*t5310;
-              const double t6681 = -t1202+t437+t5301-t3935+t5302-t5303+t5478-t6679+t5309-t6680+t5312;
-              const double t6682 = 2.0*t5313;
-              const double t6683 = t6682-t5314-t2145-t5321-t850+t848+t1182+t6563-t6564-t4676+t5333;
-              const double t6685 = 2.0*t5336;
-              const double t6686 = 2.0*t6180;
-              const double t6687 = 2.0*t2755;
-              const double t6688 = -t5491+t6685-t5337-t5340+t6686+t5342-t6687-t6183+t3917-t4546+t3969;
-              const double t6689 = 2.0*t5343;
-              const double t6690 = t3961+t4155+t6192-t6194+t6689-t5344+t5355-t5360+t5361-t358+t3952;
-              const double t6695 = (t6569+t6576+t6583+t6592+t6606+t6618+t6633+t6645+t6659+t6669+t6674+t6676+t6681+t6683+t6688+t6690)*t3605;
-              const double t6698 = 2.0*t3629;
-              const double t6699 = 2.0*t2648;
-              const double t6700 = 2.0*t4015;
-              const double t6701 = -t1318+t1794+t2593-t1307-t3076+t6698+t2662-t6699+t655+t5535+t629-t5537-t514-t4540-t5017+t6700;
-              const double t6702 = 2.0*t1683;
-              const double t6703 = t2536-t6702-t926+t489-t447-t469-t635+t555+t4958-t5039-t3625+t3627+t441+t651+t604-t4980;
-              const double t6710 = t4982-t1125-t712+t4978-t5042-t450-t2265+2.0*t909+t714+t3741+t3748-t3745*vertices[2](1)+t3745*vertices[1](1)-t3746-2.0*t1635*zeta+t4530;
-              const double t6711 = t3972*vertices[1](1);
-              const double t6718 = -t4526+t6711+t674*vertices[6](1)-t674*vertices[5](1)-t727*vertices[6](1)-t3740*vertices[1](1)+t3267-t3772+t3740*vertices[2](1)-t908+t1635+t727*vertices[5](1)-t1639+t4620-t4558+t733;
-              const double t6722 = -t5504+t1318-t643-t1794+t1307+t5518+t3076-t6698-t2662-t5522+t6699;
-              const double t6723 = -t655+t5528+t6237-t6241-t5535-t629+t5537+t514+t706+t734-t5563;
-              const double t6725 = -t5568+t5569+t5572-t5573-t481-t5582+t5584-t5585+t5587+t5610-t5614;
-              const double t6726 = 2.0*t5622;
-              const double t6727 = t926-t489+t5621+t6726-t5623+t5624-t5632+t447-t5635+t5637+t469;
-              const double t6730 = -t555-t4958+t5039+t3625-t3627-t441-t5659+t5661-t651+t5668-t5670;
-              const double t6731 = t5671-t5673-t604+t4980-t4982+t1125+t712-t4978+t5042+t450-t714;
-              const double t6733 = t650*vertices[2](1);
-              const double t6734 = t650*vertices[1](1);
-              const double t6735 = t449*vertices[1](1);
-              const double t6736 = t727*vertices[3](1);
-              const double t6737 = t727*vertices[0](1);
-              const double t6738 = t674*vertices[3](1);
-              const double t6739 = t449*vertices[2](1);
-              const double t6740 = t674*vertices[0](1);
-              const double t6741 = t6733-t6734+t6735+t6736-t6737-t6738-t6739-t3131+t6740+t1134+t6257;
-              const double t6742 = 2.0*t6292;
-              const double t6744 = 2.0*t6304;
-              const double t6745 = 2.0*t6319;
-              const double t6746 = -t6263-t6742+t6297-t309+t337-t650*t687-t6301+t6302+t6744-t6305-t6745;
-              const double t6757 = t6322+t6323-t559*t930+t559*t1485+t559*t782-t559*t893+t650*t600-t650*t191-t6337+t650*t5-t6343;
-              const double t6758 = 2.0*t6344;
-              const double t6759 = 2.0*t1539;
-              const double t6760 = 2.0*t310;
-              const double t6763 = t6758-t3114-t2584+t1403-t6759+t2273+t6760+t2366-t2527+t449*t191-t449*t5;
-              const double t6769 = t290*t8;
-              const double t6771 = 2.0*t290*t30;
-              const double t6775 = t290*t930-t290*t1485-t290*t782+t290*t893-t6769+t6771+t727*t600-t727*t191-t6353+t727*t5+t6358;
-              const double t6787 = -t727*t687-t449*t600+t674*t191-t674*t5+t674*t687+t449*t687+t727*t51-t727*t324-t727*t59+t727*t508-t620*t893;
-              const double t6793 = t1075*t5865;
-              const double t6795 = 2.0*t1133*t5865;
-              const double t6802 = -t674*t600+t620*t1485+t620*t782+t6793-t6795-t620*t930+t603*t349-t395*t782+t395*t679+t395*t893+t480*t782;
-              const double t6810 = t1447-t3002-t1815+t400-t480*t679+t480*t443-t480*t893-t6628*t782+t6628*t679-t6628*t443+t6628*t893;
-              const double t6814 = t429*t156;
-              const double t6823 = -t395*t443-t603*t138+t6814-t603*t156+t603*t71-t603*t1434+t603*t140+t603*t438-t603*t15-t449*t349+t449*t156;
-              const double t6830 = t559*t30;
-              const double t6835 = t449*t138+t711*t156+t711*t138-t711*t349-t449*t140-t711*t140-t6830+t650*t140-t650*t156-t650*t138+t650*t349;
-              const double t6840 = (t6722+t6723+t6725+t6727+t6730+t6731+t6741+t6746+t6757+t6763+t6775+t6787+t6802+t6810+t6823+t6835)*t3605;
-              const double t6843 = t35+t13+t16+t942-t578-t521+t526-t529+t540+t545-t547+t42-t342-t81+t85+t89;
-              const double t6844 = -t93-t96-t107-t110+t116-t120+t2304-t2295-t44-t2018+t937+t105-t114-t1509+t91+t1609;
-              const double t6846 = t414*vertices[7](2);
-              const double t6847 = t414*vertices[6](2);
-              const double t6848 = t550*vertices[7](2);
-              const double t6849 = t550*vertices[6](2);
-              const double t6850 = t1162*vertices[6](2);
-              const double t6851 = 2.0*t1064;
-              const double t6852 = t1162*vertices[7](2);
-              const double t6853 = t485*vertices[7](2);
-              const double t6854 = -t83-t486+t653+t6846-t6847-t6848+t6849+t2480-t371-t6850+t506-t6851+t421+t6852-t1694-t6853;
-              const double t6855 = t485*vertices[6](2);
-              const double t6857 = t616*vertices[5](2);
-              const double t6858 = t616*vertices[4](2);
-              const double t6859 = t616*vertices[1](2);
-              const double t6860 = t616*vertices[0](2);
-              const double t6862 = 2.0*t343;
-              const double t6863 = t597*vertices[5](2);
-              const double t6864 = t597*vertices[4](2);
-              const double t6865 = t597*vertices[1](2);
-              const double t6866 = t597*vertices[0](2);
-              const double t6867 = t6855+t435-2.0*t387-t459+t6857-t6858-t6859+t6860+2.0*t961-t838+t6862-t6863+t6864+t6865-t6866+t386;
-              const double t6874 = t3607+2.0*t293+t299-t313-t316+t3611+2.0*t322-t327+t329+t3618-2.0*t332;
-              const double t6876 = 2.0*t335-t338-t339-t348-t357+t3650+t359+t3651-t370-t403+t408-t411;
-              const double t6878 = 2.0*t418;
-              const double t6879 = -t6878-t440-t3671-t446+t3672-t457+t470+t475+t482+t491+t492-t494;
-              const double t6882 = -t496-t3691-2.0*t504-t519-t533+2.0*t534+t538+t544-t3707+t549-t566+t571;
-              const double t6887 = -t584-t587-t588-t593+t594-t599+t3735-t606*t600-2.0*t615-t618+t619;
-              const double t6889 = t631-t639+t640+t649+t660+t663+t666+t671-t673-t3768+t606*t597-t675;
-              const double t6891 = 2.0*t691;
-              const double t6892 = 2.0*t696;
-              const double t6896 = vertices[5](2)*t350;
-              const double t6898 = t676-t3769-t3770+t680+t682+t6891+t3776+t6892-2.0*t699-2.0*t230*t398+t6896*t1152+t724;
-              const double t6899 = t222*zeta;
-              const double t6901 = 2.0*t6899*t833;
-              const double t6902 = vertices[6](2)*t350;
-              const double t6904 = 2.0*t737;
-              const double t6908 = -t729-t6901-t6902*t638+t6904+t6902*t497-t740+t744-t6896*t643+t746-t3801-t750-t6896*t497;
-              const double t6914 = 2.0*t255*t843;
-              const double t6916 = 2.0*t771;
-              const double t6922 = t6896*t569+t6914-2.0*t760+t764-t6916-t437*t597+t279*t417+t279*t469-t279*t489-2.0*t775+t786;
-              const double t6924 = 2.0*t1539*t692;
-              const double t6927 = 2.0*t222*t655;
-              const double t6930 = t791+t6924+2.0*t793-t796+t797-t800+t801-t802-t3822+t6927-t6896*t833-t255*t852;
-              const double t6941 = t814+t816-t835+t6896*t706+2.0*t30*t353+t3846-2.0*t564*t1076+t6896*t469+t831*t687-t252*t984+t6902*t1444-t3851;
-              const double t6953 = -t865-t866+2.0*t6899*t972+t6902*t964-t6902*t967-t444*t1162-t6896*t964-t733*t204-t3711*t1027-2.0*t873+t444*t5-t6902*t469;
-              const double t6960 = 2.0*t6042*t1197;
-              const double t6964 = t444*t485+t878-t896+t897+t899+t6896*t967-2.0*t903+t6960-t913+2.0*t230*t1076+t252*t852;
-              const double t6979 = t831*t1162-t831*t485-2.0*t444*t687-t918-t3871-t3876+2.0*t3565*t643-2.0*t230*t524-t6896*t595-2.0*t6581*t499-t6896*t1444+2.0*t6581*t614;
-              const double t6993 = -t935-2.0*t3565*t569+2.0*t954+2.0*t959+t3882-t3885-2.0*t5300*t688+t6902*t513-t6043*t687+2.0*t622*t30-t982+2.0*t222*t524;
-              const double t6998 = 2.0*t996;
-              const double t7003 = -t3890+t255*t984+t6902*t489-t279*t513-t6902*t755+t6998-2.0*t998-t1000+t733*t198+t1006+t6902*t595-t6896*t489;
-              const double t7013 = t6896*t417+t6902*t833+t3896+t1022-t1024-t779*t6855+t779*t6853-t779*t6852-t1026+t1028+t1032;
-              const double t7014 = 2.0*t1034;
-              const double t7018 = t51*zeta;
-              const double t7023 = 2.0*t5077*t2874;
-              const double t7028 = t7014+2.0*t779*t1694-2.0*t1038-2.0*t7018*t2854+t1042+t1044+t930*t1301-t1056-t7023+2.0*t564*t398+2.0*t5077*t2907+t3912;
-              const double t7041 = -t3913-t429*t1509-t736*t6857+t736*t6858-t3656*t887+t3711*t467-2.0*t1067-t1252*t917-t779*t386-t469*t303-t733*t306+t779*t44;
-              const double t7046 = 2.0*t1079;
-              const double t7048 = 2.0*t1081;
-              const double t7050 = 2.0*t233*t1318;
-              const double t7052 = 2.0*t1102;
-              const double t7053 = 2.0*t1106;
-              const double t7054 = 2.0*t1070-2.0*t358*t600+t1252*t1523-t7046+t3656*t1202+t7048+t1085-t7050+2.0*t1096+t7052+t7053-t3932;
-              const double t7069 = 2.0*t230*t430+t3933+t5300*t687+t6581*t15+t6896*t755-t622*t8-2.0*t352*t30-t622*vertices[4](1)+t6896*t638-t701*t614-t736*t386;
-              const double t7073 = 2.0*t620*t36;
-              const double t7077 = 2.0*t1386*t421;
-              const double t7079 = 2.0*t620*t67;
-              const double t7082 = t736*t44+t489*t196-t7073-t1132-2.0*t222*t430+t1142-t7077+t7079-t3656*t1176-t1148+t1151+t3656*t1027;
-              const double t7087 = t337*t975;
-              const double t7088 = t337*t296;
-              const double t7096 = -t792*t44+t792*t386-t6902*t417-t7087+t7088+t1163-t1168-2.0*t140*t3303+t1173-2.0*t6899*t1046+t3656*t947+2.0*t812*t2854;
-              const double t7097 = 2.0*t1183;
-              const double t7099 = t309*t296;
-              const double t7104 = 2.0*t1205;
-              const double t7105 = -t3960+t7097-t3656*t789-t7099+t469*t306+t765*t198-t3656*t437+2.0*t1190+t1196-t1199-t1200+t7104;
-              const double t7115 = 3.0*t1218;
-              const double t7118 = -t733*t296+t733*t303+t441*vertices[7](2)-t3711*t1202-t3711*t444+t3711*t887-t1216+t7115+2.0*t156*t3303-t1222-t1224;
-              const double t7122 = 2.0*t6899*t967;
-              const double t7128 = t3711*t1176+t3711*t437+t3979+t7122+t1229-t3711*t947+t1234+2.0*t1235-t1238+t3711*t789-2.0*t156*t2854-t1241;
-              const double t7135 = -2.0*t1242+t1243+t1246-t6902*t1152-t3994+t1253-2.0*t1257-t1261-2.0*t1263+2.0*t1266-t1268-t1271;
-              const double t7140 = -t1272+t1275-t1277+t1279-t1280-t1281+t1282-t1283+2.0*t852*t669+t1284+t1294-2.0*t489*t296;
-              const double t7146 = t309*vertices[7](2);
-              const double t7151 = -t1296+t1302-t4006+t1075*t2251-2.0*t453*t702+t7146-t852*t490-2.0*t1314+t1315+t489*t975-t6902*t706;
-              const double t7157 = 2.0*t1332;
-              const double t7161 = -2.0*t852*t1255+2.0*t1325-t1326+t1327+t1075*t490+t437*t616-t7157+t1338+2.0*t1340-2.0*t1342-t1075*t493-t1346;
-              const double t7172 = 2.0*t222*t1318;
-              const double t7173 = -t1133*t162+t1133*t174-t6902*t569+t852*t212-t1359+2.0*t1361+2.0*t1362+t6902*t643+t1366-t6581*vertices[0](1)-t7172+t1374;
-              const double t7183 = t779*t6850-2.0*t1377-t1378-t4059-2.0*t1382+2.0*t736*t1694+t792*t6852-2.0*t792*t1694-t1400+t736*t6853+t1402-t1405;
-              const double t7191 = 2.0*t1410;
-              const double t7194 = 2.0*t1420;
-              const double t7195 = 2.0*t1421;
-              const double t7196 = -t792*t6853-t792*t6850+t7191+t1412-t1413-t1415-t4078+2.0*t366*t1694+t7194-t7195-t1425;
-              const double t7204 = t1427-2.0*t425*t1694+2.0*t1429+2.0*t1430+t1431-t425*t6850-2.0*t1435+t4081-2.0*t1437+t1438-t1441-t1443;
-              const double t7206 = 2.0*t1454;
-              const double t7210 = -t1445-t1449+t1451-t1453-t7206-t1456+t1458+2.0*t635*t345+t635*t304-t4087-t1461-t4095;
-              const double t7215 = -t1464+t3972*t415-t4097+t4098-t1469+t1471+t1477+t4104-t4105+t3740*t1050-2.0*t1483+t3745*t459;
-              const double t7221 = 2.0*t1491;
-              const double t7229 = t489*t307+t852*t493-t425*t6853+t7221+t4112-2.0*t1227*t702-t1485*t353+t1505-2.0*t852*t747-2.0*t290*t386-t4122;
-              const double t7232 = 2.0*t1508;
-              const double t7236 = t425*t6855+t425*t6852+t7232+2.0*t852*t531+t852*t2620+t1513+t1515-t1517+t4127-t1519+t1520-t1524;
-              const double t7240 = -t1526+t1528+2.0*t1532-t4130+t1535+2.0*t1536-t1538-t1541+t1542+t1553+t1554+t4143;
-              const double t7244 = 3.0*t1569;
-              const double t7245 = t358*t597+t765*t917-t765*t1523+t1561-t4152-t7244+t1575+t1580+t1581-t1582+t1584+t1585;
-              const double t7251 = 2.0*t1596;
-              const double t7255 = t4159-t4160+t1590+t4165-4.0*t1594-t4167-t779*t6857-t7251+2.0*t2239*t1255+2.0*t1598+t1600;
-              const double t7256 = 3.0*t1606;
-              const double t7260 = t4174-t4175+t7256+t779*t6858+2.0*t1608+t1610-t1611-2.0*t1613-t4180-t4181-t1622+t4187;
-              const double t7262 = t1252*t162;
-              const double t7271 = 2.0*t1386*t371;
-              const double t7272 = t7262-t1252*t198+t736*t6850-2.0*t733*t345-t1636-t736*t6855+2.0*t425*t961-t1643+t7271+t1647+t1650+t4200;
-              const double t7275 = t1655-t1656+t1659+t1661-t1663-t736*t6852-t1666-t1670-t1671+t1677+t1485*t462+t1678;
-              const double t7281 = t595*t176;
-              const double t7286 = -t1679+t3745*t11-2.0*t1686+t1688-t4212+t1690-t469*t975+t7281-2.0*t595*t198+t595*t196+t595*t1523;
-              const double t7288 = 2.0*t1705;
-              const double t7291 = -t1193*t597-t1699+t1700+t1704-t7288+t1707+t792*t6857-t1714-t792*t6858+t1723+t1724+t4223;
-              const double t7301 = t4224+2.0*t1736-t3711*t2717+t1737+t1741-t4234-2.0*t779*t961+2.0*t779*t387-t1754+t4241-t779*t6864+t779*t6863;
-              const double t7302 = 2.0*t1756;
-              const double t7306 = -t7302+t4242+t1766+t1768-2.0*t779*t435+t1769+t1770+t1771-2.0*t1775+t1776-t1777+t1778;
-              const double t7311 = vertices[5](0)*vertices[4](1);
-              const double t7317 = t7311*vertices[3](2)-t1793+t429*t2127+t1796+t1797-t1799-t429*t2507-t1800+t792*t6864+t1802-t792*t6863;
-              const double t7328 = 2.0*t560*t506;
-              const double t7329 = -2.0*t792*t387+2.0*t792*t435-2.0*t156*t380+4.0*t1808-t1811+t1812+2.0*t792*t961-t1813-t4286-t7328+t1819-t4291;
-              const double t7337 = -t1822-t3972*t2127-t1824-t1826-t1830-t595*t917-t358*t616+2.0*t469*t296+t923*vertices[4](2)-t1833-t1835+t4300;
-              const double t7342 = t1837-t1839-t3740*t11+2.0*t1840+t3972*t2507-t1842+t1843-t1846-t1849-t1851-t3972*t1609+t1856;
-              const double t7352 = 2.0*t1865;
-              const double t7353 = -t1857-2.0*t3612*t345+2.0*t3612*t297-t3745*t1050+t4302-t3972*t1450+2.0*t1863-t7352+t1867-t1871+t1872;
-              const double t7360 = 2.0*t560*t1064;
-              const double t7361 = t4308-t3972*t653+t3972*t486-t4309-2.0*t1878-t1485*t1301-2.0*t1881-t4310+t4313+t7360+t4315-t1890;
-              const double t7365 = 3.0*t1896;
-              const double t7368 = -t1891+t4317-t930*t623+t1045*t212-t1895+t7365+t1904+t4319-t1907+t1909-t864*t196-t864*t1523;
-              const double t7379 = t864*t917-t3740*t342-t7311*t176+2.0*t1911-2.0*t1912-t1914+2.0*t1917-t930*t462-2.0*t736*t961+t3656*t510-t1918+t1919;
-              const double t7384 = 2.0*t1925;
-              const double t7388 = -t1920+2.0*t1924-t7384+t930*t353+t4327+t1931-t1933+t3656*t2874-t3656*t3223+t1934-t4328;
-              const double t7393 = 2.0*t5077*t725;
-              const double t7397 = t864*t162;
-              const double t7401 = 2.0*t5077*t702-t1938+2.0*t1939-t7393-t4329-t4330+t441*t975-2.0*t441*t296-t7397+t425*t386+2.0*t864*t198+t1942;
-              const double t7412 = t3656*t2717-t4331-2.0*t1944+2.0*t1946-t3656*t467+t4333+t1947-t3972*t10+t3972*t105-t425*t44+t595*vertices[4](2)+2.0*t4334;
-              const double t7423 = -t4335+2.0*t812*t380+t147*t509-t3711*t510+t1955-t1956-t3711*t2874+t1958-t1959-2.0*t736*t435+t3711*t3223+2.0*t736*t387;
-              const double t7432 = t4345+t736*t6863-t1964-t736*t6864+t4346-t1970-t1975-t1978-t1980+2.0*t429*t13-t1986-2.0*t429*t38;
-              const double t7438 = 2.0*t429*t42+t4353-t1992+t1993-2.0*t429*t57-t1995-t1996+t1998+t2001+t2002+t2003-t3740*t42;
-              const double t7444 = -2.0*t2007-t2008+t3740*t38+t2010+t2013-t2016+2.0*t2017-t3740*t1293-t2020+t4374+t2026-t2028;
-              const double t7445 = 2.0*t2030;
-              const double t7446 = 3.0*t2036;
-              const double t7452 = 2.0*t559*t67;
-              const double t7453 = t2029-t7445+t2032+t2034-t7446-t4380+2.0*t2042+2.0*t559*t1380+t3740*t1922+t7452+t2045+t4383;
-              const double t7460 = 3.0*t2056;
-              const double t7463 = -t2054-t2055-t7460+t4385+t2064+t2065-2.0*t559*t1393+t2066-t2067+t2068-t2069;
-              const double t7467 = -t3745*t38+t3745*t42-t2077+t2079+t3972*t1440+t2083-t2084+t2085+t2086-t2087-t2088+t2090;
-              const double t7472 = -t2091-t2095-t2096+t2099-t2102-t2104-t2106+t3972*t1509+2.0*t429*t11+t2111-t2112+t2114;
-              const double t7473 = vertices[5](0)*vertices[6](1);
-              const double t7480 = t2119-t2120+t2123+t7473*t2620-2.0*t290*t2480-t429*t1440+t429*t1450-t2138+t429*t653+t4411-t4416+t4418;
-              const double t7485 = 2.0*t413*t421;
-              const double t7490 = 2.0*t559*t36;
-              const double t7492 = t2150-t429*t486-t7485+t3740*t343+t7311*t179+t429*t1609-t7490+2.0*t2162+t2172-t2173+t2176;
-              const double t7494 = 2.0*t2186;
-              const double t7495 = 2.0*t2190;
-              const double t7501 = t2177-2.0*t2179-t2181-t2183+t7494-t2189-t7495-t2192-2.0*t2194-t635*t307+2.0*t2196-2.0*t635*t297;
-              const double t7506 = -t2197-t2239*t493+t2198+t2202+t2203+t358*t191+t2204-t2205+t2208+t4459-2.0*t4464-t2211;
-              const double t7515 = t4468+2.0*t828*t2480-t2216-t2218+t1485*t623-4.0*t2219-t2225+t2227+t2229+2.0*t560*t1694+t3740*t106+4.0*t2233;
-              const double t7526 = t2242-t3745*t106+t2244-t2245-t4485-t4486-2.0*t7311*t747+t2254+t2256+2.0*t7311*t669-2.0*t2239*t531;
-              const double t7535 = t2257-t2258-t2259+t2239*t490+t7473*t493-t7473*t2251-2.0*t2268+t2270+2.0*t7311*t212+t4497-2.0*t3266*t297-t4499;
-              const double t7538 = 2.0*t2285;
-              const double t7547 = t2284-t3266*t307-t7538+2.0*t1635*t297-t1635*t304-t2297-t2299+t1635*t307-t2239*t212-t7311*t174+t2301-2.0*t1635*t345;
-              const double t7554 = 2.0*t843*t669;
-              const double t7560 = 2.0*t523*t57-2.0*t523*t65+t352*vertices[4](1)-t7554+2.0*t2307-2.0*t523*t13+t2317-t4516+t2239*t2251-t2239*t2620-t4519-t2323;
-              const double t7567 = t292*t191;
-              const double t7572 = -t711*t57+t711*t13+2.0*t290*t387-t2339-t2342-t7567-t635*t198+t635*t204+t1635*t198-t2352-t3972*t540;
-              const double t7582 = t3972*t529+t2353+t2354-t2358+2.0*t2359+t2361+2.0*t1562*t435-t429*t557-t3972*t551+t711*t371+t3745*t1293-t3745*t1922;
-              const double t7584 = 2.0*t2382;
-              const double t7596 = -t2374+t2377+t7584-t2383-2.0*t290*t1380+t2385+2.0*t2390-2.0*t3777*t11+2.0*t2239*t747-2.0*t2394+2.0*t290*t1393+t3745*t105;
-              const double t7600 = 2.0*t2403;
-              const double t7604 = -t3745*t343-t4562-t852*t2251-t2399-2.0*t2400+t7600-2.0*t2239*t669-2.0*t2406-t2410+t4576-t2412-t2413;
-              const double t7617 = -t568*t304+2.0*t3777*t96-t3745*t83+t3745*t78+t3745*t84+t2418-t3612*t304-t2421+t3612*t307+t4586+t2429;
-              const double t7630 = t2431+t711*t667+2.0*t3777*t106+2.0*t429*t65-t711*t81-t425*t6863-t2432+t425*t6864-t7473*t490-2.0*t366*t435+t2437+t568*t307;
-              const double t7640 = -t2439-t2441+t2443-t2446-t489*t304-t852*t210+2.0*t3612*t206+t3612*t198-t3612*t204+t447*t304-t2456-t447*t307;
-              const double t7644 = 2.0*t310*t1180;
-              const double t7648 = t2458-t2459-t2461+t2462+t2474+2.0*t568*t297-t4623+t7644-t2487-t323*t485-t323*t5-t429*t10;
-              const double t7658 = -t417*t196+t417*t204+t429*t105+t4628+t2497-t711*t368-t429*t415+t2501-t2503+t429*t419-t711*t421;
-              const double t7661 = 2.0*t2755*t321;
-              const double t7667 = t2504+t2505+t711*t65-t7661-t2508-t2510-t429*t529+t429*t551+t429*t540+t2513-t429*t578+t3972*t557;
-              const double t7670 = 2.0*t2755*t3173;
-              const double t7679 = t7670+t2523+t603*t81-t2526+t4638-2.0*t2529-2.0*t2530+t3972*t578+2.0*t2532-2.0*t429*t96+t2534-t603*t667;
-              const double t7686 = 2.0*t3481*t1255;
-              const double t7688 = -2.0*t429*t81+2.0*t429*t84-t3972*t419+t2541+t4645+t2547+t7686-t2549-t2551-t3740*t84-t2562-t2563;
-              const double t7702 = -t4653+t4654+t2573-2.0*t3777*t25-t3266*t198+t3740*t83-t3740*t78+t3972*t25+t429*t25-2.0*t425*t387+t603*t421;
-              const double t7706 = 2.0*t2589;
-              const double t7714 = -t603*t65-t3740*t72+t3745*t1001+t7706+t2590-t2591-t4663+2.0*t425*t435+2.0*t489*t297-t2601-2.0*t417*t297-4.0*t2615;
-              const double t7719 = 2.0*t453*t1888;
-              const double t7724 = t2618+2.0*t417*t2223+t4671-t2625-t7719+t2629+t2631-t489*t204-t429*t83-t3740*t25+t3740*t35+t2632;
-              const double t7726 = 2.0*t6711*t1945;
-              const double t7729 = 2.0*t453*t1935;
-              const double t7733 = 2.0*t413*t371;
-              const double t7734 = -t7726-2.0*t2635+t2637+t7729-2.0*t413*t2480+t2642-t2643-t2644+t7733-t2647+t2651+t2659;
-              const double t7745 = t417*t304-t417*t307-t2665-t2666+t425*t6857-t425*t6858-t4696-t2670+2.0*t323*t687-t362*t1162+t489*t303;
-              const double t7760 = -t476*t198-t3740*t1001-t603*t13+t3740*t96+t603*t57+2.0*t413*t838+2.0*t156*t379+t635*t296+t3740*t728-t635*t303+t635*t306+t603*t368;
-              const double t7769 = 2.0*t2692;
-              const double t7771 = 2.0*t560*t343;
-              const double t7773 = t4702+t2682-2.0*t429*t74-t2687+t429*t942+t4707+2.0*t290*t838-2.0*t560*t961-t7769-t7771+t4708+t3266*t304;
-              const double t7781 = 2.0*t2728;
-              const double t7782 = -t3740*t1064-t2710+t4724+2.0*t429*t72-2.0*t560*t435+t3740*t74-t4730-2.0*t2720-t4732+t4733+t2725-t7781;
-              const double t7793 = 2.0*t140*t848;
-              const double t7797 = 2.0*t140*t888;
-              const double t7801 = t2730-2.0*t812*t826+2.0*t140*t840-t7793+2.0*t324*t702+t2743+t7797-t2747+t513*t196+t2754+2.0*t3565*t497;
-              const double t7815 = -t6896*t513+t701*t499-t6581*t71+t352*t8-t606*t616+2.0*t437*t600-t437*t191+2.0*t230*t852-2.0*t230*t984+t4748+t2757+t3711*t806;
-              const double t7827 = -t3656*t542-t3656*t509+t3656*t788+t3711*t509-t2760+t3745*t1064+t4752-t603*t371-t2766-t3745*t74+t3740*t506+2.0*t560*t387;
-              const double t7829 = 2.0*t560*t459;
-              const double t7835 = 2.0*t2791;
-              const double t7839 = t2770+t7829-t4754+t4759-2.0*t828*t387-t489*t306-t4763-2.0*t290*t961+t7835-t4764-t3972*t942+2.0*t828*t961;
-              const double t7847 = t2805+t2807-t2808-t2809+t2810-t4770-t4772-2.0*t828*t838-t638*vertices[4](2)+2.0*t2813-t3745*t96;
-              const double t7848 = 2.0*t2816;
-              const double t7856 = 2.0*t2366*t297;
-              const double t7857 = 2.0*t2832;
-              const double t7858 = -t7848-t3745*t506+t3745*t72-t2822+t4777+t362*t485-2.0*t156*t1772+t2239*t210-t2828-t7856-t7857+t2838;
-              const double t7863 = t638*t176;
-              const double t7864 = t1820*t162;
-              const double t7870 = -t447*t303+t18*t379-t476*t917-t7863-t7864-t2842-t2843+t2844-2.0*t7311*t210+t7311*t162-t3745*t10+t3745*t342;
-              const double t7875 = t309*t975;
-              const double t7877 = t362*t1434;
-              const double t7878 = t3740*t10-t3740*t105+t1193*t600+t1193*t616+t2846-t2847+t2848+t2850+t7875-t362*t687+t7877-t2851;
-              const double t7887 = 2.0*t447*t296+t1820*t198+t447*t306+t323*t1162+t2852-t2859+t4792-t4796-t2868+t2870-t2873;
-              const double t7898 = t4797-t469*t196-t453*t379-t1635*t306-t1635*t296+t1635*t303-t2885+2.0*t18*t702+t4802+t923*t1523-t923*t917-t18*t1772;
-              const double t7902 = t923*t162;
-              const double t7907 = -t447*t975+t1820*t917+t7902-2.0*t923*t198+t923*t196-t2893+t4806-t2896+t2898+t2900+2.0*t2906-t4818;
-              const double t7914 = 2.0*t156*t826+t2912-t2914+t2915+t2916+t2917+t3745*t25-t3745*t35-t3972*t83-t3612*vertices[4](2)-t2920+t4822;
-              const double t7923 = 2.0*t2928;
-              const double t7927 = -t2922+2.0*t33*t947+t3656*t610+4.0*t2923-2.0*t156*t840-t7923-2.0*t4825-t2929-2.0*t33*t467-t2936-t4839;
-              const double t7929 = 2.0*t2948;
-              const double t7938 = t4841+2.0*t2946-t7929-t4844+2.0*t290*t44-t4846-2.0*t2957+2.0*t1045*t669-2.0*t1045*t747+t4852+t2962+t3711*t895;
-              const double t7947 = -t3711*t725-2.0*t1133*t669+2.0*t2969+t2974-t2975+t2976-t2977-t3656*t895-t2980-t3656*t806+t3656*t725-t4855;
-              const double t7949 = 2.0*t5077*t1176;
-              const double t7960 = t2982-t2983-t4857+t2987+t7949+t635*vertices[4](2)-t147*t1027+2.0*t33*t1202-2.0*t33*t437+2.0*t33*t1027-t1045*t210+t3711*t542;
-              const double t7968 = 2.0*t7018*t462;
-              const double t7976 = -t2993-2.0*t5077*t1206-t2997+t7968-2.0*t30*t623-t3711*t610-t4863+t383*t204-t908*t198-t147*t1202+t147*t437;
-              const double t7983 = t4869+t3024+2.0*t638*t198-t638*t196-t638*t1523+t638*t917+t476*t1523-t4875-t3037-t3039-t3043+t3051;
-              const double t7986 = 2.0*t3074;
-              const double t7987 = -t3053+t3058-t4880+2.0*t4881+t4883+t3065+t4886+t7986+t3078-t4892-t4894+t4896;
-              const double t7988 = 2.0*t3106;
-              const double t7995 = t4901-t7988-t1075*t2620+t792*t6855-2.0*t3113-2.0*t1562*t1694+t3128+t3133-t3139+t3142+t4912+2.0*t3150;
-              const double t7998 = 2.0*t3182;
-              const double t8003 = -t3157-t3160-t3164+t3175-t7998+t3184+t4917-t441*t306+t908*t306+t908*t296-t908*t303;
-              const double t8005 = t441*t303-t4925-t3200-t3206+t4928+t3210+t3213+t4932+t3221+t3238+t3240-t4943;
-              const double t8007 = 2.0*t3249;
-              const double t8011 = 2.0*t3272;
-              const double t8012 = -t8007-t4944-t4945-t3740*t459-2.0*t429*t106-t3261+t3262-t3263+t3265-t3269+t8011+t4963;
-              const double t8028 = 2.0*t1133*t747+2.0*t33*t510-t3711*t788-t1133*t179+t6217*t198-2.0*t383*t206-t383*t198-t3745*t728+t3656*t444+t453*t1772-t1820*t1523+t1133*t176;
-              const double t8037 = 2.0*t3352;
-              const double t8038 = -t447*vertices[7](2)-t5002+t5006+t5008-2.0*t447*t297-t437*vertices[7](1)+t3333-t5028+t3337-2.0*t3350+t8037;
-              const double t8044 = t923*vertices[0](2);
-              const double t8045 = t383*vertices[4](2)+t1133*vertices[0](2)-t733*vertices[4](2)-t3364-t5064-t3368+t5066+t3372-t7311*vertices[0](2)+t489*vertices[7](2)+t3375-t8044;
-              const double t8049 = t292*vertices[7](1);
-              const double t8051 = -t5071+t3388+t5079-t3391+t3393+t6581*vertices[3](1)-2.0*t3394-t3395-t8049+t3396+t444*vertices[4](1)-t5080;
-              const double t8055 = t337*vertices[7](2);
-              const double t8057 = 2.0*t3410-2.0*t3412-t3413-t3414-t3417+t3419-t1133*vertices[3](2)+t3423-t3424-t8055+t5087-2.0*t3425;
-              const double t8060 = 2.0*t3428;
-              const double t8061 = t864*vertices[0](2);
-              const double t8064 = t5091+t5096-t5098+t8060+t8061-t3430-t3431+t358*vertices[7](1)-t469*vertices[7](2)+t3435+t5101-t5102;
-              const double t8066 = t323*vertices[0](1);
-              const double t8069 = 2.0*t6192*t601;
-              const double t8070 = t3439+t5103+t3445-t323*vertices[4](1)-t5105+t8066-t3450-t864*vertices[4](2)-t3452-t8069+t3453-t3456;
-              const double t8072 = 2.0*t3466;
-              const double t8073 = 2.0*t3469;
-              const double t8075 = -t5108+t3458-t3461+t3462-t5111-t8072+t8073+t3472+2.0*t3473-t3474+t3476+t3477;
-              const double t8078 = -t5120-t5128-t5134+t5136+2.0*t5138-t5167-2.0*t5193+t5198-t3479-t5211-t3483-t3484;
-      s1 = t7658+t7151+t7734+t7069+t7667+t7342+t7196+t6879+t7204+t7679+t7082+t8057+t7444+t6887+t7688+t7096+t8064+t7960+t6882+t7229+t7105+t6889+t6874+t7236+t7702+t7604+t7240+t7353+t7839+t6898+t7118+t7453+t7245+t7128+t7714+t7361+t8051+t7140+t7135+t7432+t7858+t7368+t6908+t7724+t7438+t8078+t7463+t8070+t7272+t7161+t7878+t7379+t7976+t7983+t7745+t7560+t7987+t7173+t6922+t7887+t7291+t6979+t7388+t7898;
-              const double t8085 = s1+t7760+t7301+t7183+t7480+t7492+t7306+t7467+t7472+t6953+t7995+t6876+t7013+t6930+t7907+t7215+t7773+t7210+t7401+t7782+t7914+t7801+t7501+t6941+t7317+t7260+t8003+t7255+t7572+t7815+t7506+t7329+t8005+t7275+t7927+t8012+t7412+t6964+t7286+t8075+t7827+t7515+t7847+t6993+t7938+t7003+t7526+t7028+t7041+t7337+t7423+t8028+t7054+t7947+t7535+t7547+t8045+t7582+t7596+t8038+t7617+t7870+t7630+t7640+t7648;
-              const double t8088 = t5383-t5384+t5387-t5388-t5391+t5392+t5398-t5399-t3034+t3032-t5400+t5401+t1786-t2856+t5410-t5423;
-              const double t8089 = t5386*vertices[7](2);
-              const double t8091 = t5405*vertices[6](2);
-              const double t8092 = t5405*vertices[7](2);
-              const double t8093 = t5386*vertices[6](2);
-              const double t8094 = vertices[7](0)*t302;
-              const double t8095 = t8094*vertices[1](2);
-              const double t8097 = t465+t517+t5253-t623+t1176-t467-t8089-t5257-t1206+t1990*vertices[7](2)-t8091+t8092+t610+t8093+t8095-t8094*vertices[5](2);
-              const double t8101 = 2.0*t2874;
-              const double t8104 = t8094*vertices[0](2);
-              const double t8105 = 2.0*t445;
-              const double t8108 = t8094*vertices[4](2)-t2854+2.0*t2907+t5261-t8101+t462-t1990*vertices[6](2)-2.0*t380-t1030-t8104-t725+t8105+t702-t5375*vertices[4](2)+t5375*vertices[5](2)-t444;
-              const double t8109 = t5375*vertices[0](2);
-              const double t8110 = t5375*vertices[1](2);
-              const double t8113 = -t1098+t826+t8109-t8110-t1178-t1772+t379+t887-t1976*vertices[7](2)+t1976*vertices[6](2)+t1027+t300-t454-t509+t1160-t5493;
-              const double t8119 = -t569+t822-t970-t5532+t769+t5540+t384-t5548-t997+t5552+t497-t576+t5697-t5698-t5699+t5700;
-              const double t8120 = t5375*vertices[0](1);
-              const double t8121 = -t5703-t5709+t5710-t328+t513-t5714+t5715+t5716-t5717-t5718+t5719+t5720-t5721+t5727+t586-t8120;
-              const double t8127 = t8094*vertices[1](1);
-              const double t8128 = t8094*vertices[0](1);
-              const double t8131 = t852-t984-t595-t417+t638-t766-t1990*vertices[7](1)+t972+t1990*vertices[6](1)+t8094*vertices[5](1)-t8094*vertices[4](1)-t8127+t8128-t1046+2.0*t984*xi+t967;
-              const double t8132 = t638*xi;
-              const double t8133 = 2.0*t8132;
-              const double t8136 = t5375*vertices[1](1);
-              const double t8137 = t595*xi;
-              const double t8138 = 2.0*t8137;
-              const double t8139 = t5405*vertices[6](1);
-              const double t8142 = t5405*vertices[7](1);
-              const double t8143 = t5386*vertices[6](1);
-              const double t8144 = t5386*vertices[7](1);
-              const double t8147 = -t8133-t5375*vertices[5](1)+t5375*vertices[4](1)+t8136-t398+t396+t1076+t8138+t8139-2.0*t852*xi-t8142-t833-t8143+t8144-t1976*vertices[6](1)+t1976*vertices[7](1);
-              const double t8156 = t2+t35-t4-t9+t13+t17+t19-t21+t29-t34-2.0*t41+t42+t46+t50+t53-2.0*t54-t342-2.0*t56-t61;
-              const double t8157 = -t63-t70+t77-t81+t84+t90-t93-t96-t99+t5817-t106-t109-t111-t113+t116+t118-t121-t125+t127;
-              const double t8163 = -t130+t133-t135+t144-t145-t148+t149+t150-t152+2.0*t153-t5819+2.0*t157+t158+t160+t167-t170+2.0*t188-t5859-2.0*t192;
-              const double t8164 = -t193+t194+t195+t197-t199-t200+t201-t6445-t6446+t6448-t203-t215-t220+t221+t5866+t5869-t5871-t223+t224-t225;
-              const double t8167 = t227-t231+t234-t236+t238+t240+t242-t250+t6488+t6491-t6492+t5881-t5883+t5885+t4437-t3818+t4591-t5888+t3784;
-              const double t8170 = 2.0*t3738;
-              const double t8171 = 2.0*t3839;
-              const double t8172 = 2.0*t5937;
-              const double t8173 = 2.0*t5938;
-              const double t8174 = 2.0*t5939;
-              const double t8175 = 2.0*t5953;
-              const double t8176 = 2.0*t5957;
-              const double t8177 = 2.0*t5961;
-              const double t8178 = -2.0*t3681-t6493-2.0*t5884-t8170+t6496-t8171+t105-t8172-t8173+t8174+t6497+t262-t263+t5952+t8175-t8176-t5959-t6498+t8177;
-              const double t8180 = 2.0*t5963;
-              const double t8181 = 2.0*t5979;
-              const double t8182 = 2.0*t5980;
-              const double t8183 = 2.0*t5864;
-              const double t8184 = 2.0*t6004;
-              const double t8187 = -t8180-t5965-t5967+t5971+t6500+t5976-t5978-t8181+t8182+t269+t8183-t6501+t8184-t83-t64+t273+t55-2.0*t88+2.0*t154;
-              const double t8189 = t191*vertices[1](2);
-              const double t8191 = 2.0*t140*t204;
-              const double t8193 = 2.0*t51*t279;
-              const double t8194 = t226*xi;
-              const double t8195 = 2.0*t6518;
-              const double t8196 = 2.0*t3803;
-              const double t8197 = t20+t278-t1-t284+2.0*t285-t28+t8189-t8191+t8193-t8194-t6517+t8195+t8196-t371+t458+t506-t1064+t421-t459+t343;
-              const double t8204 = t395*vertices[1](2);
-              const double t8208 = 2.0*t559*t204;
-              const double t8209 = 2.0*t6570;
-              const double t8211 = 2.0*t412*t279;
-              const double t8212 = 2.0*t6582;
-              const double t8213 = t5223+t8204-t3867+t5224-t5226+t4298-2.0*t5227-t5229+t3787+2.0*t4018+t5231-t4287-t8208+t3899+t8209+t8211-t3778-t5239-t8212;
-              const double t8215 = -t352+t3989-t4505-t3953+t5243+t6016-t3914-t5246+2.0*t4134+t5247+t5250+t606-t5251+t5252+t510-t623+t1176-t467-t5257;
-              const double t8218 = 2.0*t6620;
-              const double t8219 = 2.0*t6639;
-              const double t8220 = 2.0*t6641;
-              const double t8221 = 2.0*t6660;
-              const double t8222 = -t5258+t610+t5261-t2874+t462-2.0*t3947-t5262-t5263-t725+t445-t444-t1098+t8218-t6622+t8219-t8220+t4681+t5264-t8221;
-              const double t8223 = t6661-t4021+t5267-t4135+t6061+t6063+t6065-t6066-t6068-t6077+t6079-t6090+t6095-t6096-t6099+t6100-t6106-t6108+t6109-t1178;
-              const double t8227 = 2.0*t292;
-              const double t8228 = 2.0*t6133;
-              const double t8229 = 2.0*t6134;
-              const double t8230 = 2.0*t6152;
-              const double t8231 = 2.0*t6162;
-              const double t8232 = 2.0*t6165;
-              const double t8234 = 2.0*t405;
-              const double t8235 = 2.0*t5271+t8227-t8228+t8229+t5275+t6146-t6150+t6675-t8230-t6157+t6159+t8231-t8232+2.0*t3864+t3966+t887-t5280+t5286-t8234;
-              const double t8236 = 2.0*t3935;
-              const double t8238 = t5311*xi;
-              const double t8246 = -t5290-t5292-t5294+t6172-t8236-2.0*t5304-t8238+t6173-t4680+t1027+t323+2.0*t300-2.0*t5308+2.0*t5315-2.0*t5316-2.0*t454-t509-2.0*t5319+2.0*t5322;
-              const double t8248 = 2.0*t6177;
-              const double t8251 = 2.0*t4676;
-              const double t8254 = 2.0*t3917;
-              const double t8255 = 2.0*t4546;
-              const double t8256 = -t5483-t6176-t5484+t1160+t5486+t8248+2.0*t3096+2.0*t5330+t5487-t6178-t8251-2.0*t5334-t1937+t6686+2.0*t5341-t6687-t6184+t8254-t8255;
-              const double t8257 = 2.0*t3969;
-              const double t8258 = 2.0*t3961;
-              const double t8259 = 2.0*t4155;
-              const double t8260 = 2.0*t6194;
-              const double t8264 = t8257+t8258+t8259+t6193-t8260-2.0*t2763+2.0*t5345-t5348+t5350-t5352+t622+t5358-t4060-t5364+t5366+t5368+t3798-t358-2.0*t330+t3952;
-              const double t8272 = -t923+t864-t569-t5508-t5510-t5513-t1794+t5514-2.0*t1653-t2482+t2593-t5516+t1307+t3076-t3629-t970-t2662+t2648+t5525;
-              const double t8273 = 2.0*t6241;
-              const double t8274 = 2.0*t6242;
-              const double t8276 = t5526+t5530+t6238-t6240-t8273+t8274-t5532-t5533+t5534-t5538+t5539-2.0*t1258+t5543+t5544+t384-t5547-t5550+t5552+t497;
-              const double t8282 = t1252*xi;
-              const double t8283 = t395*vertices[1](1);
-              const double t8284 = -t5554+2.0*t3481+2.0*t3837-t6203+t5558-2.0*t1407+t6204+t5559-t4540-t5017+t4015+2.0*t2240-t3443+t1886+t2536-t1683+t8282-t8283-t5575;
-              const double t8287 = 2.0*t559*t8;
-              const double t8289 = 2.0*t412*t147;
-              const double t8293 = t513-2.0*t360-t5590+t3612-t5592+t5594-t5596-t5598+t5600+t8287+t5602+t5604-t5606+t5608-t8289-t6250+2.0*t5615-2.0*t5616-2.0*t5617+t5728;
-              const double t8299 = -2.0*t5619-t5733+2.0*t586+t6251+t5630+t447+2.0*t334+t5634-t5641+t5643-t5645+t5647-t635+t5651-t5654-t383-t441-t5658+t5666;
-              const double t8300 = 2.0*t3131;
-              const double t8301 = 2.0*t1134;
-              const double t8302 = 2.0*t6257;
-              const double t8303 = 2.0*t6258;
-              const double t8304 = 2.0*t6297;
-              const double t8305 = 2.0*t309;
-              const double t8306 = 2.0*t337;
-              const double t8307 = t5676-t5678-t8300-t5682+t5684+t733+t8301+t8302-t8303-t6264+t6266-t6742+t8304-t595-t8305+t8306-t6301+t6303+t6744;
-              const double t8309 = 2.0*t6305;
-              const double t8310 = 2.0*t6310;
-              const double t8311 = 2.0*t6322;
-              const double t8312 = 2.0*t6323;
-              const double t8313 = 2.0*t6331;
-              const double t8314 = 2.0*t6337;
-              const double t8315 = 2.0*t6343;
-              const double t8316 = 2.0*t3114;
-              const double t8317 = 2.0*t2584;
-              const double t8318 = 2.0*t1403;
-              const double t8319 = 2.0*t2273;
-              const double t8320 = 2.0*t2527;
-              const double t8321 = 2.0*t6769;
-              const double t8322 = -t8309-t8310-t6745+t8311+t8312-t417+t8313-t8314-t8315+t6758-t8316-t8317+t8318-t6759+t8319+t6760+t6349-t8320-t8321;
-              const double t8331 = t6771-t6354+t6358+2.0*t590+t638+2.0*t6793-t6795-t766-2.0*t2170+2.0*t1447-t6365+t967-2.0*t1815-t8132+2.0*t400+t396+t8137+2.0*t6814-t833-2.0*t6830;
-              const double t8338 = vertices[5](1)*vertices[4](2);
-              const double t8341 = -t6379+t4+t9-t19+t6380-t29-t6412+t6381+t99+t145-t149-t6383+t8338-t6447+t3621-2.0*t8338*zeta;
-              const double t8352 = -t3711*vertices[7](2)+t3711*vertices[4](2)+t3656*vertices[7](2)+t3683-t3656*vertices[4](2)-t1485*vertices[5](2)+t1485*vertices[6](2)-t930*vertices[6](2)+t930*vertices[5](2)-t4421-t4361+2.0*t6447*zeta-t4437-t4591+t3681+t6493;
-              const double t8354 = t5884+t3738-t6496-t5864+t64-t273-t20-t278+t1-t3725+t4830-t4589-t4807-t3816+t3759+t3723;
-              const double t8355 = t4811+t3702-t3721-t3665-t3719+t3712+t3657-t4423+t4419+t6525-t6526+t6527-t6528+t6529+t6530-t6531;
-              const double t8361 = t3983-t4397+t4501-t4493+t4395-t3987+t3867+t3945-t3922-t4298-t6541+t4287+t4107-t4047+t4124-t3992;
-              const double t8362 = vertices[5](0)*vertices[4](2);
-              const double t8363 = -t4116+t4113-t4032+t4039-t3899+t6559+t6571+t6572+t6573-t6574-t6575+t6578-t6579+t8362-t6581-t6580;
-              const double t8374 = t352-t6560+t4505+t6562+t3914-t3995+2.0*t6581*zeta-t606+t3745*vertices[4](2)+t4684-2.0*t8362*zeta+t603*vertices[5](2)-t603*vertices[6](2)-t4448+t711*vertices[6](2)-t711*vertices[5](2);
-              const double t8378 = t3973+t3740*vertices[7](2)-t3740*vertices[4](2)-t3745*vertices[7](2)-t4681+t6090-t292-t3966+t3935+t4676-t6686+t6687-t3917-t3961+t358-t3952;
-              const double t8384 = t1794-t2593-t1307-t3076+t6698+t2662-t6699+t4540+t5017-t6700-t2536+t6702-t447-t7311+t1133+t635;
-              const double t8385 = t4958-t5039-t3625+t3627+t441-t4980+t4982+t4978-t5042-t3741-t3748+t3746-t4530+t4526+t3772-t6733;
-              const double t8393 = -t4620+t4558+t6734-t6735-t6736+t6737+t6738+t6739-t733-t3740*vertices[7](1)-t6740+t3740*vertices[4](1)+t4293-2.0*t1133*zeta+t3745*vertices[7](1)-t3745*vertices[4](1);
-              const double t8400 = -t5019+2.0*t7311*zeta-t711*vertices[6](1)+t711*vertices[5](1)+t603*vertices[6](1)-t603*vertices[5](1)+t5009-t4578+t309-t337+t2584+t6759-t2273-t6760+t2527-t1447;
-              const double t8406 = -t35+t12+t13-t415+t942-t578-t529+t540+t551-t557-t38+t42+t342-t57+t65+t72;
-              const double t8407 = -t75-t81+t85-t96+t419-t107+t2127+t78-t728-t2507+t105-t1509-t10+t25+t1609+t1450;
-              const double t8409 = t616*vertices[2](2);
-              const double t8410 = t597*vertices[3](2);
-              const double t8411 = t597*vertices[2](2);
-              const double t8414 = t616*vertices[3](2);
-              const double t8415 = t528*vertices[7](2);
-              const double t8416 = t528*vertices[6](2);
-              const double t8417 = -t83-t1440-t486+t653-t8409-t8410+t8411-2.0*t1050+t667+2.0*t1293-t1922+t8414-t8415+t1001+t8416-t368;
-              const double t8418 = t520*vertices[7](2);
-              const double t8419 = t520*vertices[6](2);
-              const double t8420 = t8418-t8419-t6846+t6847+t6848-t6849+t371-t506+t6851-t421+t459+t6859-t6860-t6862-t6865+t6866;
-              const double t8427 = -t3607+t293+2.0*t294+t299-t301-t316+2.0*t334*t692-t320-t327+t3615+t329;
-              const double t8433 = t3618-t332+t335-2.0*t736*t1293-2.0*t338-2.0*t339+t344+t347-t348+t3643+2.0*t359+t3651;
-              const double t8439 = t365-t334*t502-t388-2.0*t389+t403-t411-t6878+t366*t8411-t6018*t1694-t440-t3671+t3672;
-              const double t8444 = -t452+t463+t466-t468+t6018*t13+t470-t513*t502+2.0*t492-t496+t513*t636-t3693-t503;
-              const double t8456 = -t504+t6018*t506-t6018*t110+t512-t720*t435-t519+t4093*t165+2.0*t1365*t168+t1365*t174-t589*vertices[0](2)-t366*t8409;
-              const double t8458 = vertices[2](0)*vertices[3](1);
-              const double t8468 = -t1885*t187-2.0*t8458*t189+t1885*t189-t568*vertices[3](2)+2.0*t3707-t366*t8410+2.0*t549+t836*t838-t566-t720*t343+t571+t3718;
-              const double t8480 = -t584-t587-t588+2.0*t559*t128+2.0*t594+t412*t942-t596+t607-t720*t961-2.0*t1365*t1273+t720*t106-2.0*t560*t1001;
-              const double t8491 = -t3750+t631+t412*t91-t637+t720*t459-t1365*t165-t958*t174-2.0*t4093*t168-t4093*t174+t6217*t174-2.0*t609*t59-t642;
-              const double t8498 = -t645+t646+t649-t654+2.0*t1365*t692+t663-t665+t666+t671-t673+t620*t8414;
-              const double t8503 = -t3769-t3770+t678+t681-t685+t690+t6891-t3775-t3776+t6892+2.0*t595*t174+2.0*t18*t543;
-              const double t8512 = -t836*t16+t836*t96-t710-t836*t2480+t765*t1150-t595*t179+t724-t731+2.0*t735+t6901+t6904-t697*t1046;
-              const double t8518 = t741+t746+t697*t967+t3801-t750+t1549*t438+t595*t1167-t595*t1150-t765*t1167+t753-t3808-t6914;
-              const double t8531 = t759+t767-t770-t620*t8410-t6916-2.0*t252*t391+t334*vertices[7](2)+2.0*t349*t895+2.0*t413*t368-2.0*t785+t620*t8411;
-              const double t8539 = 2.0*t620*t1293+t3815-t6924-2.0*t620*t1922+t3821+t3822+t809-t6927+t814-t300*t616-t720*t91+t412*t2304;
-              const double t8552 = t390*t1564-t390*t1146-t390*t2132+t390*t2130+t3851-t3856-2.0*t483*t1293-2.0*t867+t3857+2.0*t483*t1922+t366*t8418-2.0*t872;
-              const double t8567 = -t366*t8419+2.0*t5266*t1551-2.0*t366*t1050+2.0*t878-2.0*t884+t6018*t435-t6018*t387-2.0*t323*t438-t483*t8414-t6018*t459+t897+t483*t8410;
-              const double t8583 = t483*t8409-t6960+2.0*t3266*t1273-t483*t8411+2.0*t768*t1273-t918+t836*t371-t836*t42+t476*t174-t1365*t306-t334*t306;
-              const double t8592 = -t922-t924+2.0*t290*t1050+t559*t547-2.0*t425*t1001-t290*t8416-t936-t1709*t838-t938+t1709*t42+t941+t944;
-              const double t8604 = -t946+2.0*t2022*t1001-t949+2.0*t620*t1001-t366*t8415+t955+t959+t3882+2.0*t366*t1001+t3885-2.0*t4093*t692+t366*t8414;
-              const double t8614 = t366*t8416-t982+t983-2.0*t736*t2247-t985+t1709*t2480+t366*t78-t3890-2.0*t992-t697*t997+t6018*t961-t6018*t106;
-              const double t8623 = t6998-t1000-2.0*t2187*t368+t1016+t6018*t343-t1024-2.0*t1025+t1032+t7014+t720*t81-t720*t84;
-              const double t8631 = -t1038-2.0*t1041+t3911-t720*t89+2.0*t1049-t290*t8418+t720*t92-t1054+t7023-2.0*t559*t79+t3912-t1069;
-              const double t8635 = t1070+t1071+t1074-t1077+t290*t8419+t1078-t7046-t1080+t7048-t3924-t778*t1937+t1085;
-              const double t8642 = t1091+t7050-2.0*t2187*t1050-t3926+t1093+2.0*t755*t1945-t755*t1564+t1099-t1100+t7052+t1103+t5830*t1772;
-              const double t8654 = -t1104+t755*t1146+t7053+2.0*t755*t661+t755*t2132-t755*t2130-t1109+2.0*t140*t1082-2.0*t1110-t3932-t3933;
-              const double t8661 = -2.0*t755*t477+t1123+t720*t387+2.0*t513*t692+t1129+t7073-t1132+t1136-t1138+t334*t303+t7077-t1144;
-              const double t8664 = t1145-t7079-t1147-2.0*t1148-t1149+t1151-t1154+t7087-t7088+t1157+t1163-t1168;
-              const double t8667 = vertices[2](2)*t340;
-              const double t8672 = -t778*t1178+t7097+t7099+t1189-2.0*t1192+t1196-t1199+t8667*t833-t8667*t822-t1200+t778*t1176+2.0*t1201;
-              const double t8679 = 2.0*t1204+t7104+t1213*t462-t3971-t778*t1206-t1216+t7115-t8667*t972+t1220-t3977-t1224;
-              const double t8683 = t3979-t7122+t1229-t1213*t1030-t1230+2.0*t1233+t1234-t1240-t3982+t1250+t5830*t623-t1254;
-              const double t8692 = -2.0*t1256-t5830*t517-t1260-t1264-t1265-t1268-2.0*t140*t1668+t1275-t1277+t1279-t778*t454-2.0*t589*t661;
-              const double t8697 = 2.0*t589*t591-t1291-t1292-t1296+t1298+t1299+t4006+t1305-t7146+t1309-t1310+2.0*t963*t661;
-              const double t8707 = -t1313+t1320-2.0*t963*t591-t1322+t1323+t1327+2.0*t1328-t7157+t1343-t1346-2.0*t1358;
-              const double t8711 = -t1359+2.0*t1360+t1361+t7172-t4053-t1370-t1375-t1376-t1377-2.0*t18*t2694-t1388+t1392;
-              const double t8718 = -t1398+2.0*t1402-t1406-t1409+t7191-2.0*t1413-t4077-t1416-2.0*t18*t2978+t334*t975+t4079+t7194;
-              const double t8727 = -t7195-2.0*t1424-2.0*t1425-2.0*t568*t1273+2.0*t568*t168+t1427-t1428+2.0*t1431-t5830*t1176-t1435-t4081+t1439;
-              const double t8735 = t1449-t7206-t1456+t5830*t1178+t5830*t1206-t5830*t1160+t5830*t454+t4097+t4098+2.0*t1467-t1469;
-              const double t8740 = -2.0*t1476-t4105-t1489+t4109+t7221+2.0*t18*t1301+t4112-t1500-t1502+t1505-t1507-t5830*t702;
-              const double t8743 = t7232+t1511+t5830*t725+t1513+t1515-t1517-t1519-t1524+t1528+t1535+t1536+t1542;
-              const double t8744 = t1544+t1545-t1546+t1553+t4142-t1555+t1556+t1557+t1561-t1565+t1566-t1568;
-              const double t8752 = -t7244-2.0*t1571+2.0*t1572+2.0*t1573+t1575+t4153+t4158+t1584+4.0*t1586+t4160+t1590;
-              const double t8753 = t1591-t1593-t4166-t4168-t7251-t1602-t1604+t7256+t4179-t1613-t1614+t1615;
-              const double t8757 = -4.0*t1616+t1619-t1622-t1624+t1629-t1630+t1632-t7262-t1633+t1634-2.0*t1636-t1637;
-              const double t8767 = t1638-2.0*t2708*t543-2.0*t499*t895+t1641-t7271+2.0*t2485*t895-t1649+t1652+t1655-2.0*t1656-t2363*t462+2.0*t1659;
-              const double t8772 = t4201-t1663-t1665+t2363*t1030+t4205-t4206+t300*vertices[7](1)+t1685-t1686-t1688+t1690;
-              const double t8779 = 2.0*t59*t610+t609*vertices[3](1)+t1692+t1695-t7281+t1698-t1699+2.0*t1700-t1703-t7288-t1706+2.0*t923*t174;
-              const double t8784 = t1713-t1714-t1715+t1720+2.0*t1723-2.0*t1774*t1273+t4223-t1733+t1737-t1738-t1739+t1741;
-              const double t8785 = t1744+t4234+t1746+t4236+t1751-t1753+t1755-t7302+t1758-t4242+t1768-t4243;
-              const double t8793 = t252*eta;
-              const double t8796 = t1769-2.0*t1549*t1551-t559*t942-t1773-t1775-t1780-t4252-t1781-t1787-2.0*t8793*t1055+t1788;
-              const double t8798 = t1789+t1790+t1791-t1792-t1801+t1803-t1806+t4278-t589*t176-t1810+t1812+t7328;
-              const double t8804 = t1817-t1822+2.0*t252*t1721-t1823-t1826-t1830-t1831-t1835-t1365*t296-t4300-t444*vertices[3](1)+t1840;
-              const double t8808 = 2.0*t1841-t1842+t1843+t1849+t2363*t2854+t1856-t1857-t4301+t1861-t2363*t610-t1864-t7352;
-              const double t8820 = t5830*t2874+2.0*t2708*t2978-t5830*t1027+t1867+t1869-t1871+t5830*t1937+2.0*t1872-t5830*t2907-2.0*t1873-2.0*t4308;
-              const double t8822 = t1874-t1879-t1882-t7360+t1884-t1774*t296-t4315-t1890-t4316+t1893-t1895+t7365;
-              const double t8825 = t1904+t4320-t1912-t1914-2.0*t1916+t1917+t1919-t1920-t7384-t1933+t1934+t4328;
-              const double t8829 = t7393-t1940+t7397+t1942-t1943+2.0*t1947-t4334+2.0*t4335+t4337+t1955+t1958-2.0*t1959;
-              const double t8840 = 2.0*t1961+t1962-2.0*t1964+t1968-2.0*t2708*t1301-t1973-t1975+2.0*t1981+2.0*t18*t2824-t1986-t4353;
-              const double t8846 = t1993+2.0*t560*t1050-t1995-t1996+t2001-2.0*t2006-2.0*t755*t591+t4360+t2014-t2016+t4374+t4375;
-              const double t8851 = -t4376+t4377-t7445-t6018*t81+t6018*t89+t4378-t7446-t2039+t6018*t84+t2042-t7452+t2046;
-              const double t8860 = -t6018*t92-t7460-2.0*t2060+t2062+2.0*t736*t2388-2.0*t2067+2.0*t2070-t2075+t2076+t2079-2.0*t2087-t6018*t83;
-              const double t8866 = t2090-t2091-t4390-t2096+t2098+t2099+t2105-t2108-2.0*t638*t174+t2111+t2114-t360*t975;
-              const double t8876 = t2123+2.0*t8458*t187-t8458*t196+t8458*t198+t2129+t8458*t176-t2135-t2136-t2138-t8458*t162+2.0*t18*t788+t483*t728;
-              const double t8886 = -t768*t303-t4416-2.0*t2146+t768*t296+t2148+2.0*t2187*t667+t768*t306-t2151+t7485-t765*t174+t2152-t412*t2295;
-              const double t8897 = t589*vertices[4](2)-t2153+t559*t2018+t7490-t483*t78-2.0*t586*t296+t586*t975-t290*t8411+t586*t303+t2162-t328*vertices[7](2)-t586*t306;
-              const double t8909 = 2.0*t2166+t2168+t2172-t8458*vertices[4](2)-t720*t386-t720*t105-t2183+t7494+t720*t114-t7495-t2192;
-              const double t8915 = t720*t44-2.0*t2195+t720*t342-t2201+t4457+t4458+t4464-t323*t528-t4467+4.0*t2213-t2216-t4470;
-              const double t8919 = -t2218-t4471-t2221+t2222+t323*t520-t2225+t2227+t4480+t4481+t4482-t360*t303-t2242;
-              const double t8930 = t4483+t864*vertices[3](2)+t360*t306-4.0*t2249+2.0*t360*t296+t483*t8415+t4490-t4491-t620*t8409+t6217*t636-t2261-2.0*t156*t895;
-              const double t8939 = -2.0*t6217*t1273+t2270+t2277-t1709*t371-t4499-t7538+t2287+t2294+t4093*t502-t559*t114+t559*t105;
-              const double t8943 = -t4093*t636-t2299+t7554+t2310+t8458*vertices[0](2)-t2315-t2317-t720*t35+t2320-t2321+t4519-t2323;
-              const double t8948 = -t2324+t2325+t2328-t2330+t2338-t4537-t6018*t342-t2340+t2342+t8667*t970-t1365*t502-t2343;
-              const double t8954 = t7567+t2346-t2347+2.0*t2348+t2349+t6018*t91+t1365*t636+t958*t502-t4545+t2359-t2361-t1774*t306;
-              const double t8968 = -t2368-2.0*t958*t692+t1252*t174-t2371-2.0*t586*t311+t778*t1160+t1774*t303+t513*t179-t958*t636-t513*t165+t7584;
-              const double t8980 = t778*t1164-2.0*t5077*t895+t2385+2.0*t958*t1273+t2391-t2392-t755*t189-t6217*t502-t620*t728-4.0*t2395-t2399+2.0*t6217*t692;
-              const double t8986 = -t2400+t4569+t7600+t4575+t2409-2.0*t483*t1001+t4576+2.0*t2411-t2412-t4581-t483*t8416+t2418;
-              const double t8999 = t2419-t2420-2.0*t252*t1127+t778*t1027+2.0*t8793*t391-t1213*t2854+t755*t187+t1213*t610+t589*t162+2.0*t7018*t1301-t778*t2874+t2434;
-              const double t9011 = t778*t2907-t697*t970+t697*t972+t6018*t105-t2446+2.0*t483*t1050-t483*t8418-t2451+t2454+t6018*t35-t6018*t114;
-              const double t9015 = -t6018*t44-t2463+t4615-t2466+t483*t8419-t2468+t2472+t2474+t2475-2.0*t2476+t2477-t2478;
-              const double t9020 = -t7644-t2487+t2489-t330*t597-t4625+t7661-t2510-t559*t83+t2513+t2514+t559*t91-t4637;
-              const double t9026 = -t7670+t2519-t2521-t2522+t2524+2.0*t736*t1050-t2526+t4638+t4640-t412*t83+t2534-2.0*t736*t667;
-              const double t9041 = t6018*t386-t778*t725+t778*t702-t778*t623+t328*t165-t7686+t778*t517+2.0*t5077*t2717+2.0*t2550-t328*t179-t2556;
-              const double t9047 = vertices[2](0)*vertices[6](1);
-              const double t9051 = -t2557-t2562-2.0*t620*t1050+t2566-2.0*t5077*t789-t2572-2.0*t2575+t9047*t1146-t4656-t4660+t720*t83-t290*t78;
-              const double t9058 = t9047*t2132-t366*t728-t2587+2.0*t2588-t9047*t2130+t7706+t2596+t4663-t412*t114-t2601-t2604+t2610;
-              const double t9066 = t2611+t412*t105-t4667+t2617-t589*t198+t362*t528-t2622+t323*t15+2.0*t2624+t620*t8418-t620*t8419+t7719;
-              const double t9077 = t2626-t2627-2.0*t768*t168+t1774*t174+2.0*t8458*t661-t2634+t7726+t349*t542+t638*t179-t476*t1150+t2640;
-              const double t9088 = t476*t1167+t638*t1150-t7729-t638*t1167-t2641-2.0*t8458*t477-t495*t616+t2646-t7733+t495*t597-2.0*t8458*t591-t495*t600;
-              const double t9097 = t2655+t2657-t2658+t2660-t2661+t330*t616+2.0*t8458*t1945-t8667*t967+t8667*t1046-t4696-2.0*t2669-t559*t540;
-              const double t9111 = t958*t296-t559*t545+t958*t306+t4700-t140*t1027+2.0*t222*t868+t697*t513-t233*t1444+t860*t616+t860*t600+t8667*t417-2.0*t300*t600;
-              const double t9121 = t300*t191-t894*t324-t8667*t586+t8667*t595-t4702-t140*t300-t4707-t7769+t7771-t2699+4.0*t2700;
-              const double t9129 = t156*t788-t2705+t778*t379-t4715-t778*t444+t4717-t778*t509-t4720-t9047*t1564+t778*t300+t4732-2.0*t4733;
-              const double t9138 = t2725-t7781+t4735+2.0*t412*t84+t7793+2.0*t412*t89+t4740-t5830*t379-t7797+t4746+t5830*t444+t5830*t509;
-              const double t9150 = -t5830*t300-t5830*t887-2.0*t412*t92-t417*t179-2.0*t412*t96-t2766+t2770-t7829+2.0*t2779+t4759-t1820*t174-2.0*t413*t667;
-              const double t9159 = t2788-2.0*t334*t296+t7835-t4764-t3266*t174+t2801+t4768+t559*t578-t2804-t568*t165+t568*t174;
-              const double t9167 = t140*t454-t4770+t559*t521-t7848+2.0*t2817-2.0*t2820+t778*t887-t559*t526-t2828+t7856+t559*t529-t7857;
-              const double t9178 = -t958*t303+t2834+t2841+t7863+t7864-2.0*t383*t692-t1820*t1167-t412*t578-2.0*t412*t106-t4784-t328*t636-t383*t636;
-              const double t9185 = -t2850-t7875-t7877+2.0*t589*t477-t2857-t412*t521+t328*t502-t2866+t2870-t1709*t96+t1709*t16+t4802;
-              const double t9194 = t412*t526-t412*t529-t2889+t2890+t4804-t7902-t2893-t4806-t2896-t4809+2.0*t2903;
-              const double t9201 = t412*t540+2.0*t2909+2.0*t2910+t412*t545+t2912-2.0*t2913+t4820-t412*t547+t4822+t4823-t7923+t4825;
-              const double t9212 = -t4827-2.0*t412*t81-t963*t189+t2943-2.0*t2944+t290*t8410-t7929-t4844-t2949-2.0*t290*t1293-2.0*t589*t187-t2951;
-              const double t9223 = t2952+t4846+t2954-t2957+2.0*t290*t1922-t2964+2.0*t589*t189+t589*t196+t768*t165-t768*t174+t8667*t328-2.0*t404*t406;
-              const double t9234 = t8667*t984-t7949-t2989-2.0*t2994-t7968+2.0*t404*t409-t3001+t1365*t303+t3004+2.0*t3008+2.0*t330*t600;
-              const double t9245 = -t4865+t290*t8415-t330*t191-t4867-t349*t788+2.0*t3022-2.0*t290*t1001+t586*t179-t923*t1150+t923*t1167-t923*t179-t3028;
-              const double t9249 = t4873+t3033-t3035+t1820*t1150+t4875+t383*t502-t3037-t3041+t3043+t3047+t4877-t3051;
-              const double t9253 = 2.0*t412*t16+t3064-t4881-t4883+t3065+t3070+t7986+t3075+t3078+t140*t509+t3084+t4890;
-              const double t9262 = -t3085+t290*t728-t328*t303-t697*t833+t697*t822+t328*t306+t3088-t3089-t3090-t3091-t4892;
-              const double t9268 = t3092+t3093+t3094-t8667*t852-t4894+t3095+2.0*t328*t296+t3102-t7988+t4903-t290*t8414-t328*t975;
-              const double t9274 = t3116-t3118+2.0*t3123+t290*t8409+t963*t187+t4906+t3128+t3130+t3133-t360*vertices[7](2)+t3135-t3137;
-              const double t9279 = -t3139-t923*vertices[3](2)+t3141+t3142-t778*t1772+t3150+t3155-t3160-t3164-t831*t438+t559*t1509+t3175;
-              const double t9290 = -t156*t542-t559*t1609-2.0*t18*t542-t7998+t3184-t3185+2.0*t736*t728-t559*t653+t620*t78-t4921-t4926;
-              const double t9298 = t3206+t559*t486+t4930+t720*t1064-t4934-t720*t115-2.0*t560*t1293+t4941-t3232+t4942+2.0*t560*t1922+t3235;
-              const double t9307 = t3236+t3238+t3240-t4943+2.0*t252*t1055+2.0*t3248-t8007-t836*t421+t4944-t4945+t836*t120+2.0*t412*t42;
-              const double t9320 = -2.0*t3255+t697*t384+t3258-t3261-2.0*t404*t508+t404*t71+2.0*t404*t324+t894*t508-t5266*t438+t609*t51+t362*t438-t362*t520;
-              const double t9331 = -t222*t586+t222*t417-t697*t417-t404*t5+t3262+t3265-t3269-t3271+2.0*t412*t13+t8011+t4963;
-              const double t9340 = -t4964-t3275+t3278+t3279-t3280+2.0*t412*t115-t1365*vertices[3](2)+t586*vertices[7](2)-2.0*t412*t120-t412*t1509-t595*vertices[3](2)+t3306;
-              const double t9352 = t5002-t3308-2.0*t3309+t3310+t412*t1609-t444*t520+2.0*t444*t438-t444*t15+t831*t520-t831*t528-t860*t597+t300*t597;
-              const double t9361 = t233*t755+t697*t852-t697*t984+t222*t328-t222*t513-t697*t328+t697*t638+t444*t528-t3311+t3312-t5008+t3315;
-              const double t9374 = t3317+t412*t653-t412*t486+2.0*t6899*t964-t620*t8415-t3329-t330*vertices[7](1)+t768*vertices[3](2)+t720*t1694-t720*t13+t697*t586;
-              const double t9387 = -t697*t595-t864*t1167+t864*t1150+t1252*t1167-t1252*t1150+t864*t179-2.0*t864*t174-2.0*t412*t110+t8037-t559*t2304-t3355+t559*t2295;
-              const double t9397 = t323*vertices[3](1)-t412*t2018-t5059+t4093*vertices[3](2)+t412*t937-t559*t937+t3363-t1029*vertices[3](1)-t3365-t720*t506+t3366-t404*vertices[4](1);
-              const double t9411 = t5064+t404*vertices[0](1)+t720*t110+t638*vertices[3](2)-2.0*t222*t756-2.0*t6899*t1152+2.0*t736*t368+t5066+2.0*t1885*t477-t3374+2.0*t1885*t591+t8044;
-              const double t9421 = -t8667*t384+t620*t8416-t5071+t1885*t1564-t1885*t1146-t5075-t3382+t3384+t3386-t1885*t2132+t1885*t2130;
-              const double t9431 = -2.0*t1885*t661+t8049-t3398-t3400+2.0*t3401-2.0*t3405-2.0*t1885*t1945+t5082+t3411-t3412-2.0*t3414-2.0*t328*t692;
-              const double t9436 = -t3416+t3420+2.0*t328*t311+t3423+t6018*t115-t5085+t8055-t5087+t5089-t5091-t5096-t3427;
-              const double t9445 = t8060-t8061+2.0*t4093*t1273-t3432-t6018*t1064+t8667*t997-t5100+2.0*t3434+2.0*t1029*t59-t1029*t51-t5101+t3437;
-              const double t9455 = -t5102-t5103+2.0*t2187*t1293+t3446-2.0*t3447+t3449-t8066-t230*t755+2.0*t366*t1293+t8069-2.0*t3454-t3456;
-              const double t9468 = -2.0*t366*t1922-t3459-t3461+2.0*t252*t1444-2.0*t252*t755-2.0*t2022*t1922-t5110-t8072-2.0*t979*t16+t3468+t8073+2.0*t425*t1922;
-              const double t9478 = -t5116+t3472-t5830*t1164-t3475-2.0*t979*t42+2.0*t3478+t1709*t421+t5120-2.0*t736*t78+2.0*t5134-t5135+t5136;
-              const double t9485 = -t5138-t5139+t5140+t5193-2.0*t5198-t5199-t1709*t120-t5209+t230*t1444-t8667*t513-t8667*t638+t334*t636;
-      s1 = t8948+t8804+t8822+t8866+t8772+t9455+t9121+t9331+t9088+t8779+t9340+t8784+t8661+t9129+t8444+t8785+t8886+t9485+t8672+t8796+t8642+t8954+t8915+t9138+t8679+t8798+t8683+t9150+t9352+t8909+t8735+t8808+t8692+t8968+t8820+t9159+t8707+t8825+t9374+t8829+t8986+t8840+t9290+t9178+t8846+t9097+t8623+t8711+t9387+t9223+t9185+t8654+t8614+t8999+t9397+t9361+t8851+t8664+t8635+t8697+t8860+t8439+t9011+t8876;
-              const double t9492 = s1+t8433+t9411+t9020+t8518+t9015+t8531+t9026+t8897+t8539+t8727+t8552+t9212+t9421+t9431+t8567+t8456+t8930+t9194+t9436+t8939+t9041+t8468+t9445+t9111+t8480+t8919+t9201+t8583+t9051+t8743+t8740+t8744+t8631+t8491+t8498+t9468+t8427+t9167+t9066+t9478+t8503+t8752+t8592+t8980+t9058+t8604+t8512+t8757+t8718+t8753+t8943+t9077+t8767+t9234+t9245+t9249+t9253+t9262+t9268+t9274+t9279+t9298+t9307+t9320;
-              const double t9495 = t5383-t5384+t1977-t1997-t5391+t5392-t2500+t1991+t5398-t5399-t5400+t5401+t5402-t5403-t5406-t542;
-              const double t9496 = t5451+t947+t353-t5244+t5253-t623-t1176-t467+t8089-t806+t8091-t8092+t610-t8093-t8095+t8101;
-              const double t9502 = -t462+t8104+t788+t725-t8105+t444+t1098-t8109+t1301-2.0*t789-t2978+t8110-t8094*vertices[3](2)+t1785*vertices[6](2)+t2717-t1785*vertices[7](2);
-              const double t9509 = -t3031*vertices[6](2)+t3031*vertices[7](2)+t5375*vertices[3](2)-t895+2.0*t543+t8094*vertices[2](2)-t5375*vertices[2](2)-t647-t887+t1202-t437+t1027+t5482-t509+t1160-t5493;
-              const double t9519 = t3031*vertices[6](1)+t5505-t569+t643+t1785*vertices[7](1)-t970+t8094*vertices[3](1)-t1785*vertices[6](1)-t5529-t1152+t5540+t384-t5548+t497-t706-t734;
-              const double t9525 = -t5695+t5696-2.0*t1444*xi-t8094*vertices[2](1)+t1055+t5375*vertices[2](1)+t5697-t5698-t5701+t5702-t5375*vertices[3](1)+t964-t5703+t5704-t5705-t5709;
-              const double t9529 = t5710-t5711+t5712+t513-t5718+t481+t5719+t1444+t5727+t489-t755-t469+t8120+t595-t417+2.0*t755*xi;
-              const double t9531 = -t391-t3031*vertices[7](1)-t638+t766+t8127-t8128-t967+t8133-t8136-t396-t8138-t8139+t8142+t833+t8143-t8144;
-              const double t9537 = vertices[2](1)*vertices[3](2);
-              const double t9538 = -t54-t56+t5817-t122-t137-t5818+t142+t146+t153-t5819+t157+t5821+t3928-t9537+t5882-t3849;
-              const double t9546 = t3832+t3843-t3829-t3847+t5823-t5825+t5827-t5831-t2363*vertices[6](2)+t2363*vertices[2](2)-t4602-2.0*t5882*eta+t4606+t51*vertices[2](2)-t1213*vertices[2](2)+t1213*vertices[6](2);
-              const double t9552 = t4594+t5830*vertices[7](2)+2.0*t9537*eta-t151*eta+t5835-t5842+t5844-t5846+t5886-t3818+t5887-t5889+t5890+t3784-t5892+t5893;
-              const double t9556 = -t5894+t5896-t5884-t119-t3839-t5906-t5907+t5864+t274-t88+t154+t3803-t3891+t778*vertices[3](2)-t5830*vertices[3](2)-t778*vertices[7](2);
-              const double t9562 = vertices[2](0)*vertices[3](2);
-              const double t9568 = -t3964+t6014+t4572+t5233-t6015-t5236+t6016+t4134-t9562+t404+t4560+t836*vertices[6](2)-t4543-2.0*t404*eta-t6018*vertices[3](2)+t6018*vertices[7](2);
-              const double t9578 = t720*vertices[3](2)-t720*vertices[7](2)+t1709*vertices[2](2)+t412*vertices[2](2)-t836*vertices[2](2)+2.0*t9562*eta-t5228*eta-t1709*vertices[6](2)-t3947-t3937-t4027+t3940-t4198+t3942-t4169+t4172;
-              const double t9580 = -t4021+t4196+t6019-t6022+t6024-t6026+t6029-t6030-t6031+t6032-t6090-t6038+t5271+t292+t3864+t6174;
-              const double t9581 = t6179-t6184-t4546+t3969-t6185-t6186+t4155-t6187+t6188+t6189-t6191+t6193-t6194+t860-t1029-t330;
-              const double t9587 = -t4306-t1258+t3481+t3837-t6203-t1407+t6204+t1859-t6205-t5561+t6207-t360+t768+t334+t1783-t1365;
-              const double t9602 = -t589-t6018*vertices[7](1)-t720*vertices[3](1)+t720*vertices[7](1)-2.0*t8458*eta-t3861-t412*vertices[2](1)+t836*vertices[2](1)+t1709*vertices[6](1)-t1709*vertices[2](1)+t1885*eta+t6018*vertices[3](1)+t4350-t836*vertices[6](1)+2.0*t589*eta-t3764;
-              const double t9604 = -t309+t337-t3114+t1403+t6349-t6350+t6351+t6361-t6362-t6365-t6366-t1815+t400+t6367-t3903+t4693;
-              const double t9605 = t3623-t4971+t6210-t6211-t6216+t6224-t6227+t6229-t6231+t6232+t3762+t5033-t5049+t8458+t6369-t6370;
-              const double t9615 = -t6379-t35+2.0*t4+t7+2.0*t9+t12+t13-2.0*t19+t6380-t24-t27-2.0*t29-t32+t37-t39+t41+t42+t54+t342;
-              const double t9616 = t56-t58+t66-t68+t73-t75-t80-t81+t84+t87-t96-t101-t102+t104-t106+t122+t129-t130+t137;
-              const double t9623 = t139+t141-t142-t146+2.0*t152-t153+t155-t157-2.0*t158-t159+t160-t164+t3502+t6435-t3504+2.0*t180-2.0*t181+t3505-2.0*t184;
-              const double t9624 = t185-t186+t6445+t6446-t6448-t205+t207+t208-t209+t211-t213+t214-t216+t217-t218+t219-t5866-t5869+t5871-t244;
-              const double t9627 = -t246+t248-t253+t256+t258-t6488-t6491+t6492-t5881+t5883-t5885-t4437+t3818-t4591+t5888-t3784+t3681+t5895+t5884;
-              const double t9628 = t119+t8170-t6496+t8171+t105+t8172+t8173-t8174-t6497-t5952-t8175+t8176+t5959+t6498-t8177+t8180+t5965+t5967-t5971;
-              const double t9630 = -t6500-t264-t5976+t5978+t8181-t8182-t266+t268-t8183+t6501+t271-t8184-t83-t3-t274+t275-t277+t88-t154;
-              const double t9633 = -2.0*t20+t281-t283+2.0*t1-t285+t28-t8189+t8191-t8193+t8194+t6517-t8195-t8196+t371-t458-t506+t1064-t421+t459-t343;
-              const double t9641 = -t8204+t5224+t5227+t3964-t3793+2.0*t5229+t5230-t4572-t4018-t5233+t5234+t8208-t8209-t8211+t5236-t5237+t5238-t5239+t8212;
-              const double t9644 = t5241-t6560+2.0*t4505+t5242+t6562+t4050-t5244+t5245-t4043+2.0*t3914-t4134+t510-t623-t5255-t1176-t467-t5259+t610+t2874;
-              const double t9649 = -t462+t3947+t725-t445+t444+t1098-t8218+t6622-t8219+t8220-2.0*t4681+t8221-t6662+t4021+t4135-t6062-t6064-2.0*t6065+2.0*t6066;
-              const double t9656 = t6069+t6671-2.0*t6079+2.0*t6090-t5269-t6672+2.0*t6096+2.0*t6099-2.0*t6100+t6107+t6673-2.0*t6109-t5271-t8227+t8228-t8229+t5273-t6146+t6150-t6675;
-              const double t9662 = t8230+t5276+t6157-t6159-t8231+t8232-t3864-2.0*t3966-t887+t5278+t5282-t5284+t5287+t8234-t5288-t5476-2.0*t5301+t8236-2.0*t5302;
-              const double t9671 = t5477-t5478+t6679+t8238+t4680+t1027-t323-2.0*t5309+t6680-2.0*t5312-t6682+2.0*t5314+t5482-t509+2.0*t5318-2.0*t5320+2.0*t5321+2.0*t850-2.0*t848;
-              const double t9678 = -2.0*t1182+t1160-2.0*t5326-t6563-t8248+t6564+t8251-t5488+t5491-t6685+2.0*t5337-2.0*t5338+t5492-t1937+2.0*t5340-t6686-t5494+t6687+t6184;
-              const double t9683 = -t8254+t8255-t8257-t8258-t8259-t6193+t8260-t6689+2.0*t5344+t5354-t5356+t5360-t5362-t860-2.0*t3798-t609+t1029+2.0*t358+t330-2.0*t3952;
-              const double t9694 = t923-t864+t5505-t5506-t569+t5509-t5511+2.0*t1794+t1653-t5515+t4306-t5516-2.0*t1307-t5519-2.0*t3076+t6698-t970+2.0*t2662+t5523;
-              const double t9695 = -t6699+t5524+t5526-t5529-t6238+t6240+t8273-t8274+t5535+t5536-t5537+t5539+t1258+t5545+t384-t5547-t5549+t497-t5555;
-              const double t9699 = -t5556-t3481-t3837+t4517+t1407-t2292-t2240+2.0*t3443-t1859+t1701+t2619-2.0*t1886+t5561-t5562-t8282+t8283+t5564-t5566+t5568;
-              const double t9704 = -t5570-t5572+t5574+t513+t5580+t360-t768+t5582-t5584+t5586-t5588-t8287+t8289-t5725-2.0*t5611+t5726+2.0*t5614+2.0*t489-2.0*t5621-t6726;
-              const double t9712 = 2.0*t5623-2.0*t5624+2.0*t5625+t5632-2.0*t447-t334+t5636-t5638-t5639+t568+t5649-t1783-t4093+t1365-t5656+2.0*t441+t5660-t5662+t5664;
-              const double t9713 = -t5668+t5670-t5672+t5674+t8300-t5680-t8301-t8302+t8303+t6264-t6266+t6742-t8304+t595+t8305-t8306+t6301-t6303-t6744;
-              const double t9715 = t8309+t8310+t6745-t8311-t8312-t417-t8313+t8314+t8315-t6758+t8316+t8317-t8318+t6759-t8319-t6760-t6349+t8320+t8321;
-              jacobians_grad[point][0][0][0] = -(t47+t94+t136+t171+2.0*t202+2.0*t228+t267+t286)*t3493+t3606*t5219;
-              jacobians_grad[point][0][0][1] = (t5235+t5248+t5265+t5295+2.0*t5317+2.0*t5328+2.0*t5346+t5369)*t3493-t5501*t5219;
-              jacobians_grad[point][0][0][2] = (t5520+t5541+t5560+t5576+t5609+2.0*t5627+t5652+t5686)*t3493-t5814*t5219;
-              jacobians_grad[point][0][1][0] = (t5820+t5828+t5843+t5852)*t3493-t6011*t5219;
-              jacobians_grad[point][0][1][1] = -(t6017+t6020+t6036+t6048)*t3493+t6200*t5219;
-              jacobians_grad[point][0][1][2] = -(t6206+t6208+t6223+t6233)*t3493+t6376*t5219;
-              jacobians_grad[point][0][2][0] = (t6382+t6384+t6391+t6405)*t3493-t6537*t5219;
-              jacobians_grad[point][0][2][1] = -(t6540+t6551+t6561+t6565)*t3493+t6695*t5219;
-              jacobians_grad[point][0][2][2] = -(t6701+t6703+t6710+t6718)*t3493+t6840*t5219;
-              jacobians_grad[point][1][0][0] = -(t6843+t6844+t6854+t6867)*t3493+t3606*t8085;
-              jacobians_grad[point][1][0][1] = (t8088+t8097+t8108+t8113)*t3493-t5501*t8085;
-              jacobians_grad[point][1][0][2] = (t8119+t8121+t8131+t8147)*t3493-t5814*t8085;
-              jacobians_grad[point][1][1][0] = (t8156+t8157+t8163+2.0*t8164+2.0*t8167+t8178+t8187+t8197)*t3493-t6011*t8085;
-              jacobians_grad[point][1][1][1] = -(t8213+t8215+t8222+2.0*t8223+t8235+t8246+t8256+t8264)*t3493+t6200*t8085;
-              jacobians_grad[point][1][1][2] = -(t8272+t8276+t8284+t8293+t8299+t8307+t8322+t8331)*t3493+t6376*t8085;
-              jacobians_grad[point][1][2][0] = (t8341+t8352+t8354+t8355)*t3493-t6537*t8085;
-              jacobians_grad[point][1][2][1] = -(t8361+t8363+t8374+t8378)*t3493+t6695*t8085;
-              jacobians_grad[point][1][2][2] = -(t8384+t8385+t8393+t8400)*t3493+t6840*t8085;
-              jacobians_grad[point][2][0][0] = -(t8406+t8407+t8417+t8420)*t3493+t3606*t9492;
-              jacobians_grad[point][2][0][1] = (t9495+t9496+t9502+t9509)*t3493-t5501*t9492;
-              jacobians_grad[point][2][0][2] = (t9519+t9525+t9529+t9531)*t3493-t5814*t9492;
-              jacobians_grad[point][2][1][0] = (t9538+t9546+t9552+t9556)*t3493-t6011*t9492;
-              jacobians_grad[point][2][1][1] = -(t9568+t9578+t9580+t9581)*t3493+t6200*t9492;
-              jacobians_grad[point][2][1][2] = -(t9587+t9602+t9604+t9605)*t3493+t6376*t9492;
-              jacobians_grad[point][2][2][0] = (t9615+t9616+t9623+2.0*t9624+2.0*t9627+t9628+t9630+t9633)*t3493-t6537*t9492;
-              jacobians_grad[point][2][2][1] = -(t9641+t9644+t9649+t9656+t9662+t9671+t9678+t9683)*t3493+t6695*t9492;
-              jacobians_grad[point][2][2][2] = -(t9694+t9695+t9699+t9704+t9712+t9713+t9715-t8331)*t3493+t6840*t9492;
-};
-};
-
-
-#endif

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.