]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Introduce ReferenceCell::get_default_linear_mapping() with triangulation argument.
authorWolfgang Bangerth <bangerth@colostate.edu>
Wed, 13 Jan 2021 23:38:38 +0000 (16:38 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 14 Jan 2021 00:05:39 +0000 (17:05 -0700)
include/deal.II/grid/reference_cell.h
source/grid/reference_cell.cc
source/grid/reference_cell.inst.in

index 582f3499b9836c4a6016962804c936b571db969a..bf61c466c08f1b99542cc08b45c682ebb9e41c28 100644 (file)
@@ -340,13 +340,31 @@ namespace ReferenceCell
                      Triangulation<dim, spacedim> &tria);
 
   /**
-   * Return a default linear mapping matching the given reference cell
-   * (MappingQ1 for hypercube cells and MappingFE else).
+   * Return a default linear mapping matching the given reference cell.
+   * If this reference cell is a hypercube, then the returned mapping
+   * is a MappingQ1; otherwise, it is an object of type MappingFE
+   * initialized with Simplex::FE_P (if the reference cell is a triangle and
+   * tetrahedron), with Simplex::FE_PyramidP (if the reference cell is a
+   * pyramid), or with Simplex::FE_WedgeP (if the reference cell is a wedge). In
+   * other words, the term "linear" in the name of the function has to be
+   * understood as $d$-linear (i.e., bilinear or trilinear) for some of the
+   * coordinate directions.
    */
   template <int dim, int spacedim>
   const Mapping<dim, spacedim> &
   get_default_linear_mapping(const Type &reference_cell);
 
+  /**
+   * Return a default linear mapping that works for the given triangulation.
+   * Internally, this function calls the function above for the reference
+   * cell used by the given triangulation, assuming that the triangulation
+   * uses only a single cell type. If the triangulation uses mixed cell
+   * types, then this function will trigger an exception.
+   */
+  template <int dim, int spacedim>
+  const Mapping<dim, spacedim> &
+  get_default_linear_mapping(const Triangulation<dim, spacedim> &triangulation);
+
   /**
    * Return a Gauss-type quadrature matching the given reference cell(QGauss,
    * Simplex::QGauss, Simplex::QGaussPyramid, Simplex::QGaussWedge) and
index 31d9acacab149cbecbed50389b3c8838dec21da4..816da89dad9309d7ab5b24b85446feb8bc88eb7e 100644 (file)
@@ -140,6 +140,26 @@ namespace ReferenceCell
 
 
 
+  template <int dim, int spacedim>
+  const Mapping<dim, spacedim> &
+  get_default_linear_mapping(const Triangulation<dim, spacedim> &triangulation)
+  {
+    const auto &reference_cell_types = triangulation.get_reference_cell_types();
+    Assert(reference_cell_types.size() == 1,
+           ExcMessage(
+             "This function can only work for triangulations that "
+             "use only a single cell type -- for example, only triangles "
+             "or only quadrilaterals. For mixed meshes, there is no "
+             "single linear mapping object that can be used for all "
+             "cells of the triangulation. The triangulation you are "
+             "passing to this function uses multiple cell types."));
+
+    return get_default_linear_mapping<dim, spacedim>(
+      reference_cell_types.front());
+  }
+
+
+
   template <int dim>
   Quadrature<dim>
   get_gauss_type_quadrature(const Type &   reference_cell,
index 35a6a2ff054a207a6c6332137a125d5b3a574a58..198079f766afc9e81eb39629a7feedf3cacd9980 100644 (file)
@@ -23,6 +23,10 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS)
     template const Mapping<deal_II_dimension, deal_II_space_dimension>
       &get_default_linear_mapping(const Type &reference_cell);
 
+    template const Mapping<deal_II_dimension, deal_II_space_dimension>
+      &get_default_linear_mapping(
+        const Triangulation<deal_II_dimension, deal_II_space_dimension>
+          &triangulation);
 #endif
   }
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.