]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Simplify construction of the RT polynomial space. In particular, avoid the use of...
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 6 Mar 2007 21:34:41 +0000 (21:34 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 6 Mar 2007 21:34:41 +0000 (21:34 +0000)
git-svn-id: https://svn.dealii.org/trunk@14539 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/base/include/base/polynomials_raviart_thomas.h
deal.II/base/source/polynomials_raviart_thomas.cc

index af5c8b5554bde050e267469b25213602cdec4f09..34cfe921be89f78199e754d496a7c5f18d4655bb 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2004, 2005, 2006 by the deal.II authors
+//    Copyright (C) 2004, 2005, 2006, 2007 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -62,11 +62,6 @@ class PolynomialsRaviartThomas
                                      * <i>Q<sub>k</sub></i> contained.
                                      */
     PolynomialsRaviartThomas (const unsigned int k);
-
-                                    /**
-                                     * Destructor deleting the polynomials.
-                                     */
-    ~PolynomialsRaviartThomas ();
     
                                     /**
                                      * Computes the value and the
@@ -134,7 +129,7 @@ class PolynomialsRaviartThomas
                                      * rotating the coordinates of
                                      * the evaluation point.
                                      */
-    AnisotropicPolynomials<dim>* polynomial_space;
+    const AnisotropicPolynomials<dim> polynomial_space;
 
                                     /**
                                      * Number of Raviart-Thomas
@@ -156,6 +151,17 @@ class PolynomialsRaviartThomas
                                      * Auxiliary memory.
                                      */
     mutable std::vector<Tensor<2,dim> > p_grad_grads;
+
+                                    /**
+                                     * A static member function that
+                                     * creates the polynomial space
+                                     * we use to initialize the
+                                     * #polynomial_space member
+                                     * variable.
+                                     */
+    static
+    std::vector<std::vector< Polynomials::Polynomial< double > > >
+    create_polynomials (const unsigned int k);
 };
 
 /** @} */
index a1ead2cc08f87aff921ffdc23d7b5343448ab5c6..e49a5cfb23f1fded5343afcdb285979b266b937d 100644 (file)
@@ -25,7 +25,15 @@ template <int dim>
 PolynomialsRaviartThomas<dim>::PolynomialsRaviartThomas (const unsigned int k)
                :
                my_degree(k),
+               polynomial_space (create_polynomials (k)),
                n_pols(compute_n_pols(k))
+{}
+
+
+
+template <int dim>
+std::vector<std::vector< Polynomials::Polynomial< double > > >
+PolynomialsRaviartThomas<dim>::create_polynomials (const unsigned int k)
 {
   std::vector<std::vector< Polynomials::Polynomial< double > > > pols(dim);
   pols[0] = Polynomials::LagrangeEquidistant::generate_complete_basis(k+1);
@@ -35,14 +43,8 @@ PolynomialsRaviartThomas<dim>::PolynomialsRaviartThomas (const unsigned int k)
   else
     for (unsigned int d=1;d<dim;++d)
       pols[d] = Polynomials::LagrangeEquidistant::generate_complete_basis(k);
-  polynomial_space = new AnisotropicPolynomials<dim>(pols);
-}
-
 
-template <int dim>
-PolynomialsRaviartThomas<dim>::~PolynomialsRaviartThomas ()
-{
-  delete polynomial_space;
+  return pols;
 }
 
 
@@ -60,7 +62,7 @@ PolynomialsRaviartThomas<dim>::compute (const Point<dim>            &unit_point,
   Assert(grad_grads.size()==n_pols|| grad_grads.size()==0,
         ExcDimensionMismatch(grad_grads.size(), n_pols));
 
-  const unsigned int n_sub = polynomial_space->n();
+  const unsigned int n_sub = polynomial_space.n();
   p_values.resize((values.size() == 0) ? 0 : n_sub);
   p_grads.resize((grads.size() == 0) ? 0 : n_sub);
   p_grad_grads.resize((grad_grads.size() == 0) ? 0 : n_sub);
@@ -82,7 +84,7 @@ PolynomialsRaviartThomas<dim>::compute (const Point<dim>            &unit_point,
       for (unsigned int c=0;c<dim;++c)
        p(c) = unit_point((c+d)%dim);
       
-      polynomial_space->compute (p, p_values, p_grads, p_grad_grads);
+      polynomial_space.compute (p, p_values, p_grads, p_grad_grads);
       
       for (unsigned int i=0;i<p_values.size();++i)
          values[i+d*n_sub][d] = p_values[i];

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.