From 8ebdd3dc2220c2611dc886ddb0a860122b825317 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Thu, 2 Jul 1998 16:16:41 +0000 Subject: [PATCH] Implement quitic elements in 1d and 2d. git-svn-id: https://svn.dealii.org/trunk@431 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/fe/fe_lib.lagrange.h | 159 ++++++++++++++++++- 1 file changed, 158 insertions(+), 1 deletion(-) 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 a0b3fda342..ae8288027c 100644 --- a/deal.II/deal.II/include/fe/fe_lib.lagrange.h +++ b/deal.II/deal.II/include/fe/fe_lib.lagrange.h @@ -450,7 +450,7 @@ class FECubicSub : public FiniteElement { /** - * Define a (bi-, tri-, etc)cubic finite element in #dim# space dimensions. + * Define a (bi-, tri-, etc)quartic finite element in #dim# space dimensions. * A linear (subparametric) mapping from the unit cell * to the real cell is implemented. * @@ -604,6 +604,163 @@ class FEQuarticSub : public FiniteElement { +/** + * Define a (bi-, tri-, etc)quintic finite element in #dim# space dimensions. + * A linear (subparametric) mapping from the unit cell + * to the real cell is implemented. + * + * The numbering of degrees of freedom in one spatial dimension is as follows: + * \begin{verbatim} + * 0--2--3--4--5--1 + * \end{verbatim} + * + * The numbering of degrees of freedom in two spatial dimension is as follows: + * \begin{verbatim} + * 3--12-13-14-15-2 + * | | + * 19 23 28 29 22 11 + * | | + * 18 31 35 34 27 10 + * | | + * 17 30 32 33 26 9 + * | | + * 16 20 24 25 21 8 + * | | + * 0--4--5--6---7-1 + * \end{verbatim} + * Note the reverse ordering of degrees of freedom on the left and upper + * line and the numbering of the interior degrees of + * freedom. + */ +template +class FEQuinticSub : public FiniteElement { + public: + /** + * Constructor + */ + FEQuinticSub (); + + /** + * Return the value of the #i#th shape + * function at point #p# on the unit cell. + */ + virtual double shape_value(const unsigned int i, + const Point& p) const; + + /** + * Return the gradient of the #i#th shape + * function at point #p# on the unit cell. + */ + virtual Point shape_grad(const unsigned int i, + const Point& p) const; + + /** + * Refer to the base class for detailed + * information on this function. + * + * For one dimensional elements, this + * function simply passes through to + * the one implemented in the base class. + */ + virtual void fill_fe_values (const DoFHandler::cell_iterator &cell, + const vector > &unit_points, + vector &jacobians, + const bool compute_jacobians, + vector > &ansatz_points, + const bool compute_ansatz_points, + vector > &q_points, + const bool compute_q_points, + const Boundary &boundary) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_ansatz_points (const DoFHandler::cell_iterator &cell, + const Boundary &boundary, + vector > &ansatz_points) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_face_ansatz_points (const DoFHandler::face_iterator &face, + const Boundary &boundary, + vector > &ansatz_points) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_face_jacobians (const DoFHandler::face_iterator &face, + const Boundary &boundary, + const vector > &unit_points, + vector &face_jacobi_determinants) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_subface_jacobians (const DoFHandler::face_iterator &face, + const unsigned int subface_no, + const vector > &unit_points, + vector &face_jacobi_determinants) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_normal_vectors (const DoFHandler::cell_iterator &cell, + const unsigned int face_no, + const Boundary &boundary, + const vector > &unit_points, + vector > &normal_vectors) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_normal_vectors (const DoFHandler::cell_iterator &cell, + const unsigned int subface_no, + const unsigned int face_no, + const vector > &unit_points, + vector > &normal_vectors) const; + + /** + * Refer to the base class for detailed + * information on this function. + */ + virtual void get_local_mass_matrix (const DoFHandler::cell_iterator &cell, + const Boundary &boundary, + dFMatrix &local_mass_matrix) const; + + private: + /** + * Return the value of the #i#th shape + * function at point #p# on the unit cell. + * Here, the (bi-)linear basis functions + * are meant, which are used for the + * computation of the transformation from + * unit cell to real space cell. + */ + double linear_shape_value(const unsigned int i, + const Point& p) const; + + /** + * Return the gradient of the #i#th shape + * function at point #p# on the unit cell. + * Here, the (bi-)linear basis functions + * are meant, which are used for the + * computation of the transformation from + * unit cell to real space cell. + */ + Point linear_shape_grad(const unsigned int i, + const Point& p) const; +}; + + + + /*---------------------------- fe_lib.h ---------------------------*/ /* end of #ifndef __fe_lib_H */ -- 2.39.5