From 8bea32c4d7e4d12eebc1aac33bcec61f554db037 Mon Sep 17 00:00:00 2001 From: guido Date: Thu, 2 Jun 2005 12:15:04 +0000 Subject: [PATCH] Information on usage added git-svn-id: https://svn.dealii.org/trunk@10816 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/fe/fe_poly_tensor.h | 68 ++++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/deal.II/deal.II/include/fe/fe_poly_tensor.h b/deal.II/deal.II/include/fe/fe_poly_tensor.h index c3e721d12b..7378a58d63 100644 --- a/deal.II/deal.II/include/fe/fe_poly_tensor.h +++ b/deal.II/deal.II/include/fe/fe_poly_tensor.h @@ -35,13 +35,6 @@ * std::vector > &grad_grads) const; * @endcode * - * The polynomial spaces are usually described as direct sum of - * simpler spaces. In such a case, the usual basis of node functionals - * is not dual to the basis of the polynomial space. Therefore, the - * matrix #inverse_node_matrix can be filled by the constructor of a - * derived class such that the usual interpolation condition - * Ni(vj) holds on the reference cell. - * * In many cases, the node functionals depend on the shape of the mesh * cell, since they evaluate normal or tangential components on the * faces. In order to allow for a set of transformations, the variable @@ -53,7 +46,66 @@ * vector valued polynomial classes. What's missing here in particular * is information on the topological location of the node values. * - * @see PolynomialsBDM, PolynomialsRaviartThomas + *

Deriving classes

+ * + * Any derived class must decide on the polynomial space to use. This + * polynomial space should be implemented simply as a set of vector + * valued polynomials like PolynomialsBDM and + * PolynomialsRaviartThomas. In order to facilitate this + * implementation, the basis of this space may be arbitrary. + * + *

Determining the correct basis

+ * + * In most cases, the set of desired node values Ni + * and the basis functions vj will not fulfil the + * interpolation condition Ni(vj) = + * δij. + * + * The use of the membaer data #inverse_node_matrix allows to compute + * the basis vj automatically, after the node values + * for ech original basis function of the polynomial space have been + * computed. + * + * Therefore, the constructor of a derived class should have a + * structure like this (example for interpolation in support points): + * + * @verbatim + * fill_support_points(); + * + * const unsigned int n_dofs = this->dofs_per_cell; + * FullMatrix N(n_dofs, n_dofs); + * + * for (unsigned int i=0;i& p = this->unit_support_point[i]; + * + * for (unsigned int j=0;jshape_value_component(j, p, d); + * } + * + * this->inverse_node_matrix.reinit(n_dofs, n_dofs); + * this->inverse_node_matrix.invert(N); + * @endverbatim + * + * @note The matrix #inverse_node_matrix should have dimensions zero + * before this piece of code is executed. Only then, + * shape_value_component() will return the raw bolynomial j as + * defined in the polynomial space POLY. + * + *

Setting the transformation

+ * + * In most cases, vector valued basis functions must be transformed + * when mapped from the reference cell to the actual grid cell. These + * transformations can be selected from the set MappingType and stored + * in #mapping_type. Therefore, each constructor should contain a line + * like: + * @verbatim + * this->mapping_type = this->independent_on_cartesian; + * @endverbatim + * + *@see PolynomialsBDM, PolynomialsRaviartThomas * * @author Guido Kanschat, 2005 **/ -- 2.39.5