]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Clean-up Ralf's changes.
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 16 Dec 1998 18:35:49 +0000 (18:35 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 16 Dec 1998 18:35:49 +0000 (18:35 +0000)
git-svn-id: https://svn.dealii.org/trunk@718 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/include/fe/fe_lib.lagrange.h
deal.II/deal.II/source/fe/fe_lib.cubic.cc
deal.II/deal.II/source/fe/fe_lib.dg.cc
deal.II/deal.II/source/fe/fe_lib.dg.constant.cc
deal.II/deal.II/source/fe/fe_lib.linear.cc
deal.II/deal.II/source/fe/fe_lib.quadratic.cc
deal.II/deal.II/source/fe/fe_lib.quartic.cc

index 468d3b4ce24e2c281a39886830f29e43deccfd88..fc3a28d62414f3068bd9ad40e30542f05e91d571 100644 (file)
@@ -100,6 +100,18 @@ class FELinear : public FELinearMapping<dim> {
     virtual void get_local_mass_matrix (const DoFHandler<dim>::cell_iterator &cell,
                                        const Boundary<dim> &boundary,
                                        dFMatrix &local_mass_matrix) const;
+
+  private:
+
+                                    /**
+                                     * This function is simply singled out of
+                                     * the constructor; it sets up the
+                                     * #restriction# and #prolongation#
+                                     * matrices. Since we have two constructors
+                                     * which need this functionality, we
+                                     * provide a single function for this.
+                                     */
+    void initialize_matrices ();
 };
 
 
@@ -184,6 +196,18 @@ class FEQuadraticSub : public FELinearMapping<dim> {
     virtual void get_local_mass_matrix (const DoFHandler<dim>::cell_iterator &cell,
                                        const Boundary<dim> &boundary,
                                        dFMatrix &local_mass_matrix) const;
+
+  private:
+
+                                    /**
+                                     * This function is simply singled out of
+                                     * the constructor; it sets up the
+                                     * #restriction# and #prolongation#
+                                     * matrices. Since we have two constructors
+                                     * which need this functionality, we
+                                     * provide a single function for this.
+                                     */
+    void initialize_matrices ();
 };
 
 
@@ -288,6 +312,18 @@ class FECubicSub : public FELinearMapping<dim> {
     virtual void get_local_mass_matrix (const DoFHandler<dim>::cell_iterator &cell,
                                        const Boundary<dim> &boundary,
                                        dFMatrix &local_mass_matrix) const;
+
+  private:
+
+                                    /**
+                                     * This function is simply singled out of
+                                     * the constructor; it sets up the
+                                     * #restriction# and #prolongation#
+                                     * matrices. Since we have two constructors
+                                     * which need this functionality, we
+                                     * provide a single function for this.
+                                     */
+    void initialize_matrices ();
 };
 
 
@@ -391,6 +427,18 @@ class FEQuarticSub : public FELinearMapping<dim> {
     virtual void get_local_mass_matrix (const DoFHandler<dim>::cell_iterator &cell,
                                        const Boundary<dim> &boundary,
                                        dFMatrix &local_mass_matrix) const;
+
+  private:
+
+                                    /**
+                                     * This function is simply singled out of
+                                     * the constructor; it sets up the
+                                     * #restriction# and #prolongation#
+                                     * matrices. Since we have two constructors
+                                     * which need this functionality, we
+                                     * provide a single function for this.
+                                     */
+    void initialize_matrices ();
 };
 
 
index a8d5ece5e19981576e4b672abf2865b21b7344e1..ad15a4653d1c82e6f453da6d09039bacba0d8de0 100644 (file)
 
 
 
+// declare explicit specializations before use:
+template <> void FECubicSub<deal_II_dimension>::initialize_matrices ();
+
+
 
 
 #if deal_II_dimension == 1
 template <>
 FECubicSub<1>::FECubicSub () :
                FELinearMapping<1> (1, 2) {
+  initialize_matrices ();
+};
+
+
+
+template <>
+FECubicSub<1>::FECubicSub (const int) :
+               FELinearMapping<2> (0, 0, 4)
+{
+  initialize_matrices ();
+};
+
+
+
+template <>
+void FECubicSub<1>::initialize_matrices () {
+  
   prolongation[0](0,0) = 1.0;
   prolongation[0](0,1) = 0.0;
   prolongation[0](0,2) = 0.0;
@@ -239,431 +260,22 @@ FECubicSub<2>::FECubicSub () :
   interface_constraints(4,2) = -5.0/16.0;
   interface_constraints(4,3) = 15.0/16.0;
 
-  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;
+  initialize_matrices ();
 };
 
 
 
 template <>
-FECubicSub<2>::FECubicSub (int) :
+FECubicSub<2>::FECubicSub (const int) :
                FELinearMapping<2> (0, 0, 16)
 {
+  initialize_matrices ();
+};
+
+
+
+template <>
+void FECubicSub<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;
@@ -1084,6 +696,7 @@ FECubicSub<2>::FECubicSub (int) :
 };
 
 
+
 template <>
 double
 FECubicSub<2>::shape_value (const unsigned int i,
index 0c40e6599be7baddb4b6e7b8747cc70ba2f8939b..bf0d9454d15f0a87a776819c591288b70dd21284 100644 (file)
@@ -3,18 +3,23 @@
 
 #include<fe/fe_lib.dg.h>
 
+
+
 template<int dim>
 FEDGLinear<dim>::FEDGLinear():
                FELinear<dim>(1) {};
 
+
 template<int dim>
 FEDGQuadraticSub<dim>::FEDGQuadraticSub():
                FEQuadraticSub<dim>(1) {};
 
+
 template<int dim>
 FEDGCubicSub<dim>::FEDGCubicSub():
                FECubicSub<dim>(1) {};
 
+
 template<int dim>
 FEDGQuarticSub<dim>::FEDGQuarticSub():
                FEQuarticSub<dim>(1) {};
@@ -37,6 +42,7 @@ FEDGQuadraticSub<dim>::restrict (const unsigned int child) const {
 };
 
 
+
 template <int dim>
 const dFMatrix & 
 FEDGCubicSub<dim>::restrict (const unsigned int child) const {
@@ -45,9 +51,19 @@ FEDGCubicSub<dim>::restrict (const unsigned int child) const {
 };
 
 
+
 template <int dim>
 const dFMatrix & 
 FEDGQuarticSub<dim>::restrict (const unsigned int child) const {
   Assert (false, ExcNotImplemented());
   return restriction[child];
 };
+
+
+
+
+// explicit instantiations
+template class FEDGLinear<deal_II_dimension>;
+template class FEDGQuadraticSub<deal_II_dimension>;
+template class FEDGCubicSub<deal_II_dimension>;
+template class FEDGQuarticSub<deal_II_dimension>;
index 2e8637edb01929461678b6fc1830a562b14510c1..e42c6b7a87283ebe9ecfd74cbcc0e375b0332d15 100644 (file)
@@ -29,7 +29,7 @@ FEDGConstant<1>::FEDGConstant () :
                                   // we do not add up the contributions but
                                   // set them right into the matrices!
                                   
-                                  // The restriction matrizes got crazy values
+                                  // The restriction matrices got crazy values
                                   // as it is yet not clear how they should work
                                   // in the DG(0) case. In general
                                   // the use of the restriction matrices
@@ -38,7 +38,6 @@ FEDGConstant<1>::FEDGConstant () :
   restriction[1](0,0) = 1e8;
 
   prolongation[0](0,0) = 1.0;
-
   prolongation[1](0,0) = 1.0;
 };
 
@@ -50,23 +49,6 @@ void FEDGConstant<1>::get_face_support_points (const typename DoFHandler<1>::fac
   Assert (false, ExcInternalError());
 };
 
-
-/*
-template <>
-void FEDGConstant<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cell,
-                                        const Boundary<1> &,
-                                        dFMatrix &local_mass_matrix) const {
-  Assert (local_mass_matrix.n() == total_dofs,
-         ExcWrongFieldDimension(local_mass_matrix.n(),total_dofs));
-  Assert (local_mass_matrix.m() == total_dofs,
-         ExcWrongFieldDimension(local_mass_matrix.m(),total_dofs));
-
-  const double h = cell->vertex(1)(0) - cell->vertex(0)(0);
-  Assert (h>0, ExcJacobiDeterminantHasWrongSign());
-
-  local_mass_matrix(0,0) = h;
-};
-*/
 #endif
 
 
@@ -78,7 +60,7 @@ template <>
 FEDGConstant<2>::FEDGConstant () :
                FELinearMapping<2> (0, 0, 1)
 {
-                                  // The restriction matrizes got crazy values
+                                  // The restriction matrices got crazy values
                                   // as it is yet not clear how they should work
                                   // in the DG(0) case. In general
                                   // the use of the restriction matrices
@@ -122,12 +104,7 @@ FEDGConstant<dim>::shape_grad (const unsigned int i,
                               const Point<dim>&) const
 {
   Assert((i<total_dofs), ExcInvalidIndex(i));
-                                  // 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
-  return Point<dim> ();
+  return Tensor<1,dim> ();
 };
 
 
@@ -172,8 +149,8 @@ FEDGConstant<dim>::get_unit_support_points (vector<Point<dim> > &unit_points) co
 template <int dim>
 void
 FEDGConstant<dim>::get_support_points (const typename DoFHandler<dim>::cell_iterator &cell,
-                                  const Boundary<dim>  &,
-                                  vector<Point<dim> >  &support_points) const {
+                                      const Boundary<dim>  &,
+                                      vector<Point<dim> >  &support_points) const {
   Assert (support_points.size() == total_dofs,
          ExcWrongFieldDimension (support_points.size(), total_dofs));
   
@@ -208,12 +185,3 @@ FEDGConstant<dim>::restrict (const unsigned int child) const {
 // explicit instantiations
 
 template class FEDGConstant<deal_II_dimension>;
-
-
-
-
-
-
-
-
-
index ab644b14e694560b4278a19a9ae00728ee5fe033..c0ad349751c1ef444ab544ae2dcde350db978aa6 100644 (file)
 
 
 
+// declare explicit specializations before use:
+template <> void FELinear<deal_II_dimension>::initialize_matrices ();
+
+
+
+
 #if deal_II_dimension == 1
 
 template <>
 FELinear<1>::FELinear () :
                FELinearMapping<1> (1, 0)
 {
+  initialize_matrices ();
+};
+
+
+template <>
+FELinear<1>::FELinear (const int) :
+               FELinearMapping<1> (0, 2)
+{
+  initialize_matrices ();
+};
+
+
+
+
+template <>
+void FELinear<1>::initialize_matrices () {
                                   // for restriction and prolongation matrices:
                                   // note that we do not add up all the
                                   // contributions since then we would get
@@ -151,57 +173,22 @@ FELinear<2>::FELinear () :
   interface_constraints(0,0) = 1./2.;
   interface_constraints(0,1) = 1./2.;
 
-  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.;
+  initialize_matrices ();
 };
 
 
+
 template <>
 FELinear<2>::FELinear (const int) :
                FELinearMapping<2> (0, 0, 4)
 {
+  initialize_matrices ();
+};
+
+
+
+template <>
+void FELinear<2>::initialize_matrices () {
   restriction[0](0,0) = 1.0;
   restriction[1](1,1) = 1.0;
   restriction[2](2,2) = 1.0;
@@ -251,7 +238,6 @@ FELinear<2>::FELinear (const int) :
 
 
 
-
 template <>
 inline
 double
index feaff742cf0483cffbefaede4e781408503846bf..89a40fc3435283c9aed8f5e7ea569295262a0677 100644 (file)
 
 
 
+// declare explicit specializations before use:
+template <> void FEQuadraticSub<deal_II_dimension>::initialize_matrices ();
+
+
 
 #if deal_II_dimension == 1
 
 template <>
 FEQuadraticSub<1>::FEQuadraticSub () :
                FELinearMapping<1> (1, 1) {
+  initialize_matrices ();
+};
+
+
+
+template <>
+FEQuadraticSub<1>::FEQuadraticSub (const int) :
+               FELinearMapping<1> (0, 3) {
+  initialize_matrices ();
+};
+
+
+
+template <>
+void FEQuadraticSub<1>::initialize_matrices () {
 /*
   Get the prolongation matrices by the following little maple script:
 
@@ -209,7 +228,6 @@ void FEQuadraticSub<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterato
   local_mass_matrix(2,2) = 8./15.*h;
 };
 
-
 #endif
 
 
@@ -227,393 +245,22 @@ FEQuadraticSub<2>::FEQuadraticSub () :
   interface_constraints(2,1) = 3./8.;
   interface_constraints(2,2) = 3./4.;
 
-/*
-  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);
+  initialize_matrices ();
+};
 
-  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 <>
+FEQuadraticSub<2>::FEQuadraticSub (const int) :
+               FELinearMapping<2> (0, 0, 9)
+{
+  initialize_matrices ();
 };
 
 
+
 template <>
-FEQuadraticSub<2>::FEQuadraticSub (int) :
-               FELinearMapping<2> (0, 0, 9)
-{
+void FEQuadraticSub<2>::initialize_matrices () {
 /*
   Get the prolongation and restriction matrices by the following little maple script:
 
index 209cfaac3cd56c0319faf0a71593c523fd36a1b6..1656f834f18ddef48a0f6c857c28b4b1e5d94a48 100644 (file)
@@ -10,6 +10,9 @@
 
 
 
+// declare explicit specializations before use:
+template <> void FEQuarticSub<deal_II_dimension>::initialize_matrices ();
+
 
 
 #if deal_II_dimension == 1
 template <>
 FEQuarticSub<1>::FEQuarticSub () :
                FELinearMapping<1> (1, 3) {
+  initialize_matrices ();
+};
+
+
+template <>
+FEQuarticSub<1>::FEQuarticSub (const int) :
+               FELinearMapping<1> (0, 5) {
+  initialize_matrices ();
+};
+
+
+template <>
+void FEQuarticSub<1>::initialize_matrices () {
   prolongation[0](0,0) = 1.0;
   prolongation[0](1,3) = 1.0;
   prolongation[0](2,0) = 35.0/128.0;
@@ -229,727 +245,22 @@ FEQuarticSub<2>::FEQuarticSub () :
   interface_constraints(6,3) = -35.0/64.0;
   interface_constraints(6,4) = 35.0/32.0;
 
-  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;
+  initialize_matrices ();
 };
 
 
 
 template <>
-FEQuarticSub<2>::FEQuarticSub (int) :
+FEQuarticSub<2>::FEQuarticSub (const int) :
                FELinearMapping<2> (0, 0, 25)
 {
+  initialize_matrices ();
+};
+
+
+
+template <>
+void FEQuarticSub<2>::initialize_matrices () {
   prolongation[0](0,0) = 1.0;
   prolongation[0](1,5) = 1.0;
   prolongation[0](2,24) = 1.0;

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.