<commit_before>//---------------------------------------------------------------------------
//    $Id$
//    Version: $Name$
//
//    Copyright (C) 2002, 2003, 2004, 2005, 2006 by the deal.II authors
//
//    This file is subject to QPL and may not be  distributed
//    without copyright and license information. Please refer
//    to the file deal.II/doc/license.html for the  text  and
//    further information on this license.
//
//---------------------------------------------------------------------------
#ifndef __deal2__fe_q_hierarchical_h
#define __deal2__fe_q_hierarchical_h

#include <base/config.h>
#include <base/tensor_product_polynomials.h>
#include <fe/fe_poly.h>

DEAL_II_NAMESPACE_OPEN

template <int dim, int spacedim> class MappingQ;


/*!@addtogroup fe */
/*@{*/

/**
 * 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 
 * <tt>[0,1]</tt> which is suitable for building an @p hp tensor product 
 * finite element, if we assume that each element has a single degree.
 * 
 * There are not many differences between @p FE_Q_Hierarchical and 
 * @p FE_Q, except that we add a function @p embedding_dofs that takes 
 * a given integer @p q, between @p 1 and @p p, and 
 * returns the numbering of basis functions of the element of order 
 * @p q in basis of order @p p.  This function is 
 * useful if one wants to make calculations using the hierarchical
 * nature of these shape functions.
 *
 * The unit support points now are reduced to @p 0, @p 1, and <tt>0.5</tt> 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 various constraint, prolongation, and restriction matrices are 
 * now available in all dimensions for all degrees @p p, currently up to 
 * order 19.
 *
 * The constructor of this class takes the degree @p p of this finite
 * element.
 *
 * This class is not implemented for the codimension one case
 * (<tt>spacedim != dim</tt>).
 *
 * <h3>Implementation</h3>
 *
 * The constructor creates a TensorProductPolynomials object
 * that includes the tensor product of @p Hierarchical
 * polynomials of degree @p p. This @p TensorProductPolynomials
 * object provides all values and derivatives of the shape functions.
 *
 * <h3>Numbering of the degrees of freedom (DoFs)</h3>
 *
 * The original ordering of the shape functions represented by the
 * TensorProductPolynomials is a tensor product
 * numbering. However, the shape functions on a cell are renumbered
 * beginning with the shape functions whose support points are at the
 * vertices, then on the line, on the quads, and finally (for 3d) on
 * the hexes. To be explicit, these numberings are listed in the
 * following:
 *
 * <h4>Q1 elements</h4>
 * <ul><commit_msg>Documentation and style changes.<commit_after>//---------------------------------------------------------------------------
//    $Id$
//    Version: $Name$
//
//    Copyright (C) 2002, 2003, 2004, 2005, 2006 by the deal.II authors
//
//    This file is subject to QPL and may not be  distributed
//    without copyright and license information. Please refer
//    to the file deal.II/doc/license.html for the  text  and
//    further information on this license.
//
//---------------------------------------------------------------------------
#ifndef __deal2__fe_q_hierarchical_h
#define __deal2__fe_q_hierarchical_h

#include <base/config.h>
#include <base/tensor_product_polynomials.h>
#include <fe/fe_poly.h>

DEAL_II_NAMESPACE_OPEN

template <int dim, int spacedim> class MappingQ;


/*!@addtogroup fe */
/*@{*/

/**
 * 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 
 * <tt>[0,1]</tt> which is suitable for building an @p hp tensor product 
 * finite element, if we assume that each element has a single degree.
 * 
 * There are not many differences between @p FE_Q_Hierarchical and 
 * @p FE_Q, except that we add a function @p embedding_dofs that takes 
 * a given integer @p q, between @p 1 and @p p, and 
 * returns the numbering of basis functions of the element of order 
 * @p q in basis of order @p p.  This function is 
 * useful if one wants to make calculations using the hierarchical
 * nature of these shape functions.
 *
 * The unit support points now are reduced to @p 0, @p 1, and <tt>0.5</tt> 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.
 *
 * This class is not implemented for the codimension one case
 * (<tt>spacedim != dim</tt>).
 *
 * <h3>Implementation</h3>
 *
 * The constructor creates a TensorProductPolynomials object
 * that includes the tensor product of @p Hierarchical
 * polynomials of degree @p p. This @p TensorProductPolynomials
 * object provides all values and derivatives of the shape functions.
 *
 * <h3>Numbering of the degrees of freedom (DoFs)</h3>
 *
 * The original ordering of the shape functions represented by the
 * TensorProductPolynomials is a tensor product
 * numbering. However, the shape functions on a cell are renumbered
 * beginning with the shape functions whose support points are at the
 * vertices, then on the line, on the quads, and finally (for 3d) on
 * the hexes. To be explicit, these numberings are listed in the
 * following:
 *
 * <h4>Q1 elements</h4>
 * <ul>
{'fraction_non_alphanumeric': 0.12226217718208565, 'fraction_numerical': 0.012422360248447204, 'mean_word_length': 3.023011176857331, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5442549', 'n_tokens_mistral': 1725, 'n_tokens_neox': 1612, 'n_words': 783}