From 28d95f460ad3bb08ce4ed2523517e3def3c067f5 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Tue, 9 Dec 2014 20:15:47 -0600 Subject: [PATCH] Include pictures of shape functions for FE_Q and FE_Q_Hierarchical. This patch uses pictures generated by Manuel Quezada de Luna for the shape functions of FE_Q and FE_Q_Hierarchical. --- doc/news/changes.h | 6 + include/deal.II/fe/fe_q.h | 632 +++++++++++++++++++++++-- include/deal.II/fe/fe_q_hierarchical.h | 631 ++++++++++++++++++++++-- 3 files changed, 1191 insertions(+), 78 deletions(-) diff --git a/doc/news/changes.h b/doc/news/changes.h index c32b889d0b..abe13a6a80 100644 --- a/doc/news/changes.h +++ b/doc/news/changes.h @@ -340,6 +340,12 @@ inconvenience this causes.

Specific improvements

    +
  1. New: The FE_Q and FE_Q_Hierarchical classes now include pictures + of their 2d shape functions in the class documentation. +
    + (Manuel Quezada de Luna, Wolfgang Bangerth, 2014/12/09) +
  2. +
  3. Fixed: Calling DoFRenumbering::Cuthill_McKee threw an exception whenever one of the processors of a parallel triangulation did not own any degrees of freedom. diff --git a/include/deal.II/fe/fe_q.h b/include/deal.II/fe/fe_q.h index 38369814cb..83a736fea6 100644 --- a/include/deal.II/fe/fe_q.h +++ b/include/deal.II/fe/fe_q.h @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2000 - 2013 by the deal.II authors +// Copyright (C) 2000 - 2014 by the deal.II authors // // This file is part of the deal.II library. // @@ -95,19 +95,62 @@ DEAL_II_NAMESPACE_OPEN * 0-------1 0-------1 * @endverbatim * - * The respective coordinate values of the support points of the degrees - * of freedom are as follows: + * The respective coordinate values of the support points of the shape + * functions are as follows: *
      - *
    • Index 0: [0, 0, 0]; - *
    • Index 1: [1, 0, 0]; - *
    • Index 2: [0, 1, 0]; - *
    • Index 3: [1, 1, 0]; - *
    • Index 4: [0, 0, 1]; - *
    • Index 5: [1, 0, 1]; - *
    • Index 6: [0, 1, 1]; - *
    • Index 7: [1, 1, 1]; + *
    • Shape function 0: [0, 0, 0]; + *
    • Shape function 1: [1, 0, 0]; + *
    • Shape function 2: [0, 1, 0]; + *
    • Shape function 3: [1, 1, 0]; + *
    • Shape function 4: [0, 0, 1]; + *
    • Shape function 5: [1, 0, 1]; + *
    • Shape function 6: [0, 1, 1]; + *
    • Shape function 7: [1, 1, 1]; *
    * + * + * In 2d, these shape functions look as follows: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_1$ element, shape function 0 + * + * $Q_1$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_1$ element, shape function 2 + * + * $Q_1$ element, shape function 3 + *
    + * + * *

    Q2 elements

    *
      *
    • 1D case: @@ -150,38 +193,138 @@ DEAL_II_NAMESPACE_OPEN * @endverbatim * The center vertex has number 26. * - * The respective coordinate values of the support points of the degrees - * of freedom are as follows: + * The respective coordinate values of the support points of the shape + * functions are as follows: *
        - *
      • Index 0: [0, 0, 0]; - *
      • Index 1: [1, 0, 0]; - *
      • Index 2: [0, 1, 0]; - *
      • Index 3: [1, 1, 0]; - *
      • Index 4: [0, 0, 1]; - *
      • Index 5: [1, 0, 1]; - *
      • Index 6: [0, 1, 1]; - *
      • Index 7: [1, 1, 1]; - *
      • Index 8: [0, 1/2, 0]; - *
      • Index 9: [1, 1/2, 0]; - *
      • Index 10: [1/2, 0, 0]; - *
      • Index 11: [1/2, 1, 0]; - *
      • Index 12: [0, 1/2, 1]; - *
      • Index 13: [1, 1/2, 1]; - *
      • Index 14: [1/2, 0, 1]; - *
      • Index 15: [1/2, 1, 1]; - *
      • Index 16: [0, 0, 1/2]; - *
      • Index 17: [1, 0, 1/2]; - *
      • Index 18: [0, 1, 1/2]; - *
      • Index 19: [1, 1, 1/2]; - *
      • Index 20: [0, 1/2, 1/2]; - *
      • Index 21: [1, 1/2, 1/2]; - *
      • Index 22: [1/2, 0, 1/2]; - *
      • Index 23: [1/2, 1, 1/2]; - *
      • Index 24: [1/2, 1/2, 0]; - *
      • Index 25: [1/2, 1/2, 1]; - *
      • Index 26: [1/2, 1/2, 1/2]; + *
      • Shape function 0: [0, 0, 0]; + *
      • Shape function 1: [1, 0, 0]; + *
      • Shape function 2: [0, 1, 0]; + *
      • Shape function 3: [1, 1, 0]; + *
      • Shape function 4: [0, 0, 1]; + *
      • Shape function 5: [1, 0, 1]; + *
      • Shape function 6: [0, 1, 1]; + *
      • Shape function 7: [1, 1, 1]; + *
      • Shape function 8: [0, 1/2, 0]; + *
      • Shape function 9: [1, 1/2, 0]; + *
      • Shape function 10: [1/2, 0, 0]; + *
      • Shape function 11: [1/2, 1, 0]; + *
      • Shape function 12: [0, 1/2, 1]; + *
      • Shape function 13: [1, 1/2, 1]; + *
      • Shape function 14: [1/2, 0, 1]; + *
      • Shape function 15: [1/2, 1, 1]; + *
      • Shape function 16: [0, 0, 1/2]; + *
      • Shape function 17: [1, 0, 1/2]; + *
      • Shape function 18: [0, 1, 1/2]; + *
      • Shape function 19: [1, 1, 1/2]; + *
      • Shape function 20: [0, 1/2, 1/2]; + *
      • Shape function 21: [1, 1/2, 1/2]; + *
      • Shape function 22: [1/2, 0, 1/2]; + *
      • Shape function 23: [1/2, 1, 1/2]; + *
      • Shape function 24: [1/2, 1/2, 0]; + *
      • Shape function 25: [1/2, 1/2, 1]; + *
      • Shape function 26: [1/2, 1/2, 1/2]; *
      *
    + * + * + * In 2d, these shape functions look as follows (the black plane corresponds + * to zero; negative shape function values may not be visible): + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_2$ element, shape function 0 + * + * $Q_2$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_2$ element, shape function 2 + * + * $Q_2$ element, shape function 3 + *
    + * + * + * + *
    + * $Q_2$ element, shape function 4 + * + * $Q_2$ element, shape function 5 + *
    + * + * + * + *
    + * $Q_2$ element, shape function 6 + * + * $Q_2$ element, shape function 7 + *
    + * + * + *
    + * $Q_2$ element, shape function 8 + * + *
    + * + * *

    Q3 elements

    *
      *
    • 1D case: @@ -200,6 +343,164 @@ DEAL_II_NAMESPACE_OPEN * 0--8--9--1 * @endverbatim *
    + * + * In 2d, these shape functions look as follows (the black plane corresponds + * to zero; negative shape function values may not be visible): + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_3$ element, shape function 0 + * + * $Q_3$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 2 + * + * $Q_3$ element, shape function 3 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 4 + * + * $Q_3$ element, shape function 5 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 6 + * + * $Q_3$ element, shape function 7 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 8 + * + * $Q_3$ element, shape function 9 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 10 + * + * $Q_3$ element, shape function 11 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 12 + * + * $Q_3$ element, shape function 13 + *
    + * + * + * + *
    + * $Q_3$ element, shape function 14 + * + * $Q_3$ element, shape function 15 + *
    + * + * *

    Q4 elements

    *
      *
    • 1D case: @@ -221,6 +522,257 @@ DEAL_II_NAMESPACE_OPEN * @endverbatim *
    * + * In 2d, these shape functions look as follows (the black plane corresponds + * to zero; negative shape function values may not be visible): + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_4$ element, shape function 0 + * + * $Q_4$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 2 + * + * $Q_4$ element, shape function 3 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 4 + * + * $Q_4$ element, shape function 5 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 6 + * + * $Q_4$ element, shape function 7 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 8 + * + * $Q_4$ element, shape function 9 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 10 + * + * $Q_4$ element, shape function 11 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 12 + * + * $Q_4$ element, shape function 13 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 14 + * + * $Q_4$ element, shape function 15 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 16 + * + * $Q_4$ element, shape function 17 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 18 + * + * $Q_4$ element, shape function 19 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 20 + * + * $Q_4$ element, shape function 21 + *
    + * + * + * + *
    + * $Q_4$ element, shape function 22 + * + * $Q_4$ element, shape function 23 + *
    + * + * + *
    + * $Q_4$ element, shape function 24 + * + *
    + * + * + * * @author Wolfgang Bangerth, 1998, 2003; Guido Kanschat, 2001; Ralf Hartmann, 2001, 2004, 2005; Oliver Kayser-Herold, 2004; Katharina Kormann, 2008; Martin Kronbichler, 2008 */ template diff --git a/include/deal.II/fe/fe_q_hierarchical.h b/include/deal.II/fe/fe_q_hierarchical.h index 11f1ac1d79..da7030bd82 100644 --- a/include/deal.II/fe/fe_q_hierarchical.h +++ b/include/deal.II/fe/fe_q_hierarchical.h @@ -32,7 +32,7 @@ template class MappingQ; * Implementation of Hierarchical finite elements @p Qp that yield the * finite element space of continuous, piecewise polynomials of degree * @p p. This class is realized using tensor product polynomials - * based on a hierarchical basis @p Hierarchical of the interval + * based on a hierarchical basis @p Hierarchical on the interval * [0,1] which is suitable for building an @p hp tensor product * finite element, if we assume that each element has a single degree. * @@ -47,8 +47,6 @@ template class MappingQ; * The unit support points now are reduced to @p 0, @p 1, and 0.5 in * one dimension, and tensor products in higher dimensions. Thus, various * interpolation functions will only work correctly for the linear case. - * Future work will involve writing projection--interpolation operators - * that can interpolate onto the higher order bubble functions. * * The constructor of this class takes the degree @p p of this finite * element. @@ -74,6 +72,11 @@ template class MappingQ; * following: * *

    Q1 elements

    + * + * The $Q_1^H$ element is of polynomial degree one and, consequently, + * is exactly the same as the $Q_1$ element in class FE_Q. In particular, + * the shape function are defined in the exact same way: + * *
      *
    • 1D case: * @verbatim @@ -106,16 +109,59 @@ template class MappingQ; * The respective coordinate values of the support points of the degrees * of freedom are as follows: *
        - *
      • Index 0: [0, 0, 0]; - *
      • Index 1: [1, 0, 0]; - *
      • Index 2: [0, 1, 0]; - *
      • Index 3: [1, 1, 0]; - *
      • Index 4: [0, 0, 1]; - *
      • Index 5: [1, 0, 1]; - *
      • Index 6: [0, 1, 1]; - *
      • Index 7: [1, 1, 1]; + *
      • Shape function 0: [0, 0, 0]; + *
      • Shape function 1: [1, 0, 0]; + *
      • Shape function 2: [0, 1, 0]; + *
      • Shape function 3: [1, 1, 0]; + *
      • Shape function 4: [0, 0, 1]; + *
      • Shape function 5: [1, 0, 1]; + *
      • Shape function 6: [0, 1, 1]; + *
      • Shape function 7: [1, 1, 1]; *
      *
    + * + * In 2d, these shape functions look as follows: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_1^H$ element, shape function 0 + * + * $Q_1^H$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_1^H$ element, shape function 2 + * + * $Q_1^H$ element, shape function 3 + *
    + * + * *

    Q2 elements

    *
      *
    • 1D case: @@ -161,35 +207,135 @@ template class MappingQ; * The respective coordinate values of the support points of the degrees * of freedom are as follows: *
        - *
      • Index 0: [0, 0, 0]; - *
      • Index 1: [1, 0, 0]; - *
      • Index 2: [0, 1, 0]; - *
      • Index 3: [1, 1, 0]; - *
      • Index 4: [0, 0, 1]; - *
      • Index 5: [1, 0, 1]; - *
      • Index 6: [0, 1, 1]; - *
      • Index 7: [1, 1, 1]; - *
      • Index 8: [0, 1/2, 0]; - *
      • Index 9: [1, 1/2, 0]; - *
      • Index 10: [1/2, 0, 0]; - *
      • Index 11: [1/2, 1, 0]; - *
      • Index 12: [0, 1/2, 1]; - *
      • Index 13: [1, 1/2, 1]; - *
      • Index 14: [1/2, 0, 1]; - *
      • Index 15: [1/2, 1, 1]; - *
      • Index 16: [0, 0, 1/2]; - *
      • Index 17: [1, 0, 1/2]; - *
      • Index 18: [0, 1, 1/2]; - *
      • Index 19: [1, 1, 1/2]; - *
      • Index 20: [0, 1/2, 1/2]; - *
      • Index 21: [1, 1/2, 1/2]; - *
      • Index 22: [1/2, 0, 1/2]; - *
      • Index 23: [1/2, 1, 1/2]; - *
      • Index 24: [1/2, 1/2, 0]; - *
      • Index 25: [1/2, 1/2, 1]; - *
      • Index 26: [1/2, 1/2, 1/2]; + *
      • Shape function 0: [0, 0, 0]; + *
      • Shape function 1: [1, 0, 0]; + *
      • Shape function 2: [0, 1, 0]; + *
      • Shape function 3: [1, 1, 0]; + *
      • Shape function 4: [0, 0, 1]; + *
      • Shape function 5: [1, 0, 1]; + *
      • Shape function 6: [0, 1, 1]; + *
      • Shape function 7: [1, 1, 1]; + *
      • Shape function 8: [0, 1/2, 0]; + *
      • Shape function 9: [1, 1/2, 0]; + *
      • Shape function 10: [1/2, 0, 0]; + *
      • Shape function 11: [1/2, 1, 0]; + *
      • Shape function 12: [0, 1/2, 1]; + *
      • Shape function 13: [1, 1/2, 1]; + *
      • Shape function 14: [1/2, 0, 1]; + *
      • Shape function 15: [1/2, 1, 1]; + *
      • Shape function 16: [0, 0, 1/2]; + *
      • Shape function 17: [1, 0, 1/2]; + *
      • Shape function 18: [0, 1, 1/2]; + *
      • Shape function 19: [1, 1, 1/2]; + *
      • Shape function 20: [0, 1/2, 1/2]; + *
      • Shape function 21: [1, 1/2, 1/2]; + *
      • Shape function 22: [1/2, 0, 1/2]; + *
      • Shape function 23: [1/2, 1, 1/2]; + *
      • Shape function 24: [1/2, 1/2, 0]; + *
      • Shape function 25: [1/2, 1/2, 1]; + *
      • Shape function 26: [1/2, 1/2, 1/2]; *
      *
    + * + * + * In 2d, these shape functions look as follows (the black plane corresponds + * to zero; negative shape function values may not be visible): + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_2^H$ element, shape function 0 + * + * $Q_2^H$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_2^H$ element, shape function 2 + * + * $Q_2^H$ element, shape function 3 + *
    + * + * + * + *
    + * $Q_2^H$ element, shape function 4 + * + * $Q_2^H$ element, shape function 5 + *
    + * + * + * + *
    + * $Q_2^H$ element, shape function 6 + * + * $Q_2^H$ element, shape function 7 + *
    + * + * + *
    + * $Q_2^H$ element, shape function 8 + * + *
    + * + * *

    Q3 elements

    *
      *
    • 1D case: @@ -208,6 +354,164 @@ template class MappingQ; * 0--8--9--1 * @endverbatim *
    + * + * In 2d, these shape functions look as follows (the black plane corresponds + * to zero; negative shape function values may not be visible): + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 0 + * + * $Q_3^H$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 2 + * + * $Q_3^H$ element, shape function 3 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 4 + * + * $Q_3^H$ element, shape function 5 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 6 + * + * $Q_3^H$ element, shape function 7 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 8 + * + * $Q_3^H$ element, shape function 9 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 10 + * + * $Q_3^H$ element, shape function 11 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 12 + * + * $Q_3^H$ element, shape function 13 + *
    + * + * + * + *
    + * $Q_3^H$ element, shape function 14 + * + * $Q_3^H$ element, shape function 15 + *
    + * + * *

    Q4 elements

    *
      *
    • 1D case: @@ -229,6 +533,257 @@ template class MappingQ; * @endverbatim *
    * + * In 2d, these shape functions look as follows (the black plane corresponds + * to zero; negative shape function values may not be visible): + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 0 + * + * $Q_4^H$ element, shape function 1 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 2 + * + * $Q_4^H$ element, shape function 3 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 4 + * + * $Q_4^H$ element, shape function 5 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 6 + * + * $Q_4^H$ element, shape function 7 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 8 + * + * $Q_4^H$ element, shape function 9 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 10 + * + * $Q_4^H$ element, shape function 11 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 12 + * + * $Q_4^H$ element, shape function 13 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 14 + * + * $Q_4^H$ element, shape function 15 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 16 + * + * $Q_4^H$ element, shape function 17 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 18 + * + * $Q_4^H$ element, shape function 19 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 20 + * + * $Q_4^H$ element, shape function 21 + *
    + * + * + * + *
    + * $Q_4^H$ element, shape function 22 + * + * $Q_4^H$ element, shape function 23 + *
    + * + * + *
    + * $Q_4^H$ element, shape function 24 + * + *
    + * + * + * * @author Brian Carnes, 2002, Ralf Hartmann 2004, 2005 */ template -- 2.39.5