From: bangerth Date: Tue, 6 Mar 2007 21:34:41 +0000 (+0000) Subject: Simplify construction of the RT polynomial space. In particular, avoid the use of... X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00483c76e93cf9874622d44ea0f610d58f47f8e5;p=dealii-svn.git Simplify construction of the RT polynomial space. In particular, avoid the use of a pointer so that the object becomes easy to copy. git-svn-id: https://svn.dealii.org/trunk@14539 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/base/include/base/polynomials_raviart_thomas.h b/deal.II/base/include/base/polynomials_raviart_thomas.h index af5c8b5554..34cfe921be 100644 --- a/deal.II/base/include/base/polynomials_raviart_thomas.h +++ b/deal.II/base/include/base/polynomials_raviart_thomas.h @@ -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 * Qk 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* polynomial_space; + const AnisotropicPolynomials polynomial_space; /** * Number of Raviart-Thomas @@ -156,6 +151,17 @@ class PolynomialsRaviartThomas * Auxiliary memory. */ mutable std::vector > p_grad_grads; + + /** + * A static member function that + * creates the polynomial space + * we use to initialize the + * #polynomial_space member + * variable. + */ + static + std::vector > > + create_polynomials (const unsigned int k); }; /** @} */ diff --git a/deal.II/base/source/polynomials_raviart_thomas.cc b/deal.II/base/source/polynomials_raviart_thomas.cc index a1ead2cc08..e49a5cfb23 100644 --- a/deal.II/base/source/polynomials_raviart_thomas.cc +++ b/deal.II/base/source/polynomials_raviart_thomas.cc @@ -25,7 +25,15 @@ template PolynomialsRaviartThomas::PolynomialsRaviartThomas (const unsigned int k) : my_degree(k), + polynomial_space (create_polynomials (k)), n_pols(compute_n_pols(k)) +{} + + + +template +std::vector > > +PolynomialsRaviartThomas::create_polynomials (const unsigned int k) { std::vector > > pols(dim); pols[0] = Polynomials::LagrangeEquidistant::generate_complete_basis(k+1); @@ -35,14 +43,8 @@ PolynomialsRaviartThomas::PolynomialsRaviartThomas (const unsigned int k) else for (unsigned int d=1;d(pols); -} - -template -PolynomialsRaviartThomas::~PolynomialsRaviartThomas () -{ - delete polynomial_space; + return pols; } @@ -60,7 +62,7 @@ PolynomialsRaviartThomas::compute (const Point &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::compute (const Point &unit_point, for (unsigned int c=0;ccompute (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