From 3e090faaac6e708aa0b75834d4a9903b44c09725 Mon Sep 17 00:00:00 2001 From: wolf Date: Wed, 16 Dec 1998 18:35:49 +0000 Subject: [PATCH] Clean-up Ralf's changes. git-svn-id: https://svn.dealii.org/trunk@718 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/fe/fe_lib.lagrange.h | 48 ++ deal.II/deal.II/source/fe/fe_lib.cubic.cc | 449 +---------- deal.II/deal.II/source/fe/fe_lib.dg.cc | 16 + .../deal.II/source/fe/fe_lib.dg.constant.cc | 42 +- deal.II/deal.II/source/fe/fe_lib.linear.cc | 76 +- deal.II/deal.II/source/fe/fe_lib.quadratic.cc | 409 +--------- deal.II/deal.II/source/fe/fe_lib.quartic.cc | 739 +----------------- 7 files changed, 184 insertions(+), 1595 deletions(-) diff --git a/deal.II/deal.II/include/fe/fe_lib.lagrange.h b/deal.II/deal.II/include/fe/fe_lib.lagrange.h index 468d3b4ce2..fc3a28d624 100644 --- a/deal.II/deal.II/include/fe/fe_lib.lagrange.h +++ b/deal.II/deal.II/include/fe/fe_lib.lagrange.h @@ -100,6 +100,18 @@ class FELinear : public FELinearMapping { virtual void get_local_mass_matrix (const DoFHandler::cell_iterator &cell, const Boundary &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 { virtual void get_local_mass_matrix (const DoFHandler::cell_iterator &cell, const Boundary &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 { virtual void get_local_mass_matrix (const DoFHandler::cell_iterator &cell, const Boundary &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 { virtual void get_local_mass_matrix (const DoFHandler::cell_iterator &cell, const Boundary &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 (); }; diff --git a/deal.II/deal.II/source/fe/fe_lib.cubic.cc b/deal.II/deal.II/source/fe/fe_lib.cubic.cc index a8d5ece5e1..ad15a4653d 100644 --- a/deal.II/deal.II/source/fe/fe_lib.cubic.cc +++ b/deal.II/deal.II/source/fe/fe_lib.cubic.cc @@ -11,6 +11,10 @@ +// declare explicit specializations before use: +template <> void FECubicSub::initialize_matrices (); + + #if deal_II_dimension == 1 @@ -18,6 +22,23 @@ 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, diff --git a/deal.II/deal.II/source/fe/fe_lib.dg.cc b/deal.II/deal.II/source/fe/fe_lib.dg.cc index 0c40e6599b..bf0d9454d1 100644 --- a/deal.II/deal.II/source/fe/fe_lib.dg.cc +++ b/deal.II/deal.II/source/fe/fe_lib.dg.cc @@ -3,18 +3,23 @@ #include + + template FEDGLinear::FEDGLinear(): FELinear(1) {}; + template FEDGQuadraticSub::FEDGQuadraticSub(): FEQuadraticSub(1) {}; + template FEDGCubicSub::FEDGCubicSub(): FECubicSub(1) {}; + template FEDGQuarticSub::FEDGQuarticSub(): FEQuarticSub(1) {}; @@ -37,6 +42,7 @@ FEDGQuadraticSub::restrict (const unsigned int child) const { }; + template const dFMatrix & FEDGCubicSub::restrict (const unsigned int child) const { @@ -45,9 +51,19 @@ FEDGCubicSub::restrict (const unsigned int child) const { }; + template const dFMatrix & FEDGQuarticSub::restrict (const unsigned int child) const { Assert (false, ExcNotImplemented()); return restriction[child]; }; + + + + +// explicit instantiations +template class FEDGLinear; +template class FEDGQuadraticSub; +template class FEDGCubicSub; +template class FEDGQuarticSub; 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 index 2e8637edb0..e42c6b7a87 100644 --- a/deal.II/deal.II/source/fe/fe_lib.dg.constant.cc +++ b/deal.II/deal.II/source/fe/fe_lib.dg.constant.cc @@ -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::shape_grad (const unsigned int i, const Point&) const { Assert((i, so we - // still construct it as that. it should - // make no difference in practice, - // however - return Point (); + return Tensor<1,dim> (); }; @@ -172,8 +149,8 @@ FEDGConstant::get_unit_support_points (vector > &unit_points) co template void FEDGConstant::get_support_points (const typename DoFHandler::cell_iterator &cell, - const Boundary &, - vector > &support_points) const { + const Boundary &, + vector > &support_points) const { Assert (support_points.size() == total_dofs, ExcWrongFieldDimension (support_points.size(), total_dofs)); @@ -208,12 +185,3 @@ FEDGConstant::restrict (const unsigned int child) const { // explicit instantiations template class FEDGConstant; - - - - - - - - - diff --git a/deal.II/deal.II/source/fe/fe_lib.linear.cc b/deal.II/deal.II/source/fe/fe_lib.linear.cc index ab644b14e6..c0ad349751 100644 --- a/deal.II/deal.II/source/fe/fe_lib.linear.cc +++ b/deal.II/deal.II/source/fe/fe_lib.linear.cc @@ -12,12 +12,34 @@ +// declare explicit specializations before use: +template <> void FELinear::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 diff --git a/deal.II/deal.II/source/fe/fe_lib.quadratic.cc b/deal.II/deal.II/source/fe/fe_lib.quadratic.cc index feaff742cf..89a40fc343 100644 --- a/deal.II/deal.II/source/fe/fe_lib.quadratic.cc +++ b/deal.II/deal.II/source/fe/fe_lib.quadratic.cc @@ -10,12 +10,31 @@ +// declare explicit specializations before use: +template <> void FEQuadraticSub::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: diff --git a/deal.II/deal.II/source/fe/fe_lib.quartic.cc b/deal.II/deal.II/source/fe/fe_lib.quartic.cc index 209cfaac3c..1656f834f1 100644 --- a/deal.II/deal.II/source/fe/fe_lib.quartic.cc +++ b/deal.II/deal.II/source/fe/fe_lib.quartic.cc @@ -10,6 +10,9 @@ +// declare explicit specializations before use: +template <> void FEQuarticSub::initialize_matrices (); + #if deal_II_dimension == 1 @@ -17,6 +20,19 @@ 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; -- 2.39.5