]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add MappingP1.
authorDavid Wells <drwells@email.unc.edu>
Thu, 26 Jun 2025 03:23:34 +0000 (23:23 -0400)
committerDavid Wells <drwells@email.unc.edu>
Tue, 1 Jul 2025 13:26:25 +0000 (09:26 -0400)
14 files changed:
include/deal.II/fe/mapping_p1.h [new file with mode: 0644]
source/fe/CMakeLists.txt
source/fe/mapping_p1.cc [new file with mode: 0644]
source/fe/mapping_p1.inst.in [new file with mode: 0644]
tests/simplex/mapping_p1_01.cc [new file with mode: 0644]
tests/simplex/mapping_p1_01.output [new file with mode: 0644]
tests/simplex/mapping_p1_02.cc [new file with mode: 0644]
tests/simplex/mapping_p1_02.output [new file with mode: 0644]
tests/simplex/mapping_p1_03.cc [new file with mode: 0644]
tests/simplex/mapping_p1_03.output [new file with mode: 0644]
tests/simplex/mapping_p1_04.cc [new file with mode: 0644]
tests/simplex/mapping_p1_04.output [new file with mode: 0644]
tests/simplex/mapping_p1_05.cc [new file with mode: 0644]
tests/simplex/mapping_p1_05.output [new file with mode: 0644]

diff --git a/include/deal.II/fe/mapping_p1.h b/include/deal.II/fe/mapping_p1.h
new file mode 100644 (file)
index 0000000..a565909
--- /dev/null
@@ -0,0 +1,359 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#ifndef dealii_mapping_p1_h
+#define dealii_mapping_p1_h
+
+
+#include <deal.II/base/config.h>
+
+#include <deal.II/base/qprojector.h>
+
+#include <deal.II/fe/mapping.h>
+
+#include <cmath>
+
+
+DEAL_II_NAMESPACE_OPEN
+
+/**
+ * @addtogroup mapping
+ * @{
+ */
+
+/**
+ * @brief Implementation of the classic affine transformation mapping used for
+ * simplices.
+ *
+ * For simplex cells, the transformation mapping the unit to real cell may be
+ * written as an affine transformation: that is
+ *
+ * @f[
+ * \begin{pmatrix}
+ *   x \\
+ *   y
+ * \end{pmatrix}
+ * =
+ * \begin{pmatrix}
+ *   x_1 - x_0 & x_2 - x_0 \\
+ *   y_1 - y_0 & y_2 - y_0
+ * \end{pmatrix}
+ * \begin{pmatrix}
+ *   \hat{x} \\
+ *   \hat{y}
+ * \end{pmatrix}
+ * +
+ * \begin{pmatrix}
+ *   x_0 \\
+ *   y_0
+ * \end{pmatrix}
+ * @f]
+ *
+ * in which $(x_0, y_0)$, $(x_1, y_1)$ and $(x_2, y_2)$ are the vertices of a
+ * triangle (in a codimension zero space). Unlike MappingQ1, this mapping is
+ * affine, not bilinear or trilinear. Hence, this mapping's transformation
+ * matrices (i.e., the covariant and contravariant transformations) and shift
+ * vector are constant on each cell. This property makes this mapping
+ * significantly more efficient than the equivalent MappingFE set up with a
+ * linear FE_SimplexP.
+ */
+template <int dim, int spacedim = dim>
+class MappingP1 : public Mapping<dim, spacedim>
+{
+public:
+  virtual std::unique_ptr<Mapping<dim, spacedim>>
+  clone() const override;
+
+  /**
+   * Return @p true because MappingP1 preserves vertex locations.
+   */
+  virtual bool
+  preserves_vertex_locations() const override;
+
+  /**
+   * This mapping is compatible with simplex reference cells.
+   */
+  virtual bool
+  is_compatible_with(const ReferenceCell &reference_cell) const override;
+
+  /**
+   * @name Mapping points between reference and real cells
+   * @{
+   */
+
+  virtual Point<spacedim>
+  transform_unit_to_real_cell(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const Point<dim> &p) const override;
+
+  virtual Point<dim>
+  transform_real_to_unit_cell(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const Point<spacedim> &p) const override;
+
+  virtual void
+  transform_points_real_to_unit_cell(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const ArrayView<const Point<spacedim>>                     &real_points,
+    const ArrayView<Point<dim>> &unit_points) const override;
+
+  /**
+   * @}
+   */
+
+  /**
+   * @name Functions to transform tensors from reference to real coordinates
+   * @{
+   */
+
+  virtual void
+  transform(const ArrayView<const Tensor<1, dim>>                   &input,
+            const MappingKind                                        kind,
+            const typename Mapping<dim, spacedim>::InternalDataBase &internal,
+            const ArrayView<Tensor<1, spacedim>> &output) const override;
+
+  virtual void
+  transform(const ArrayView<const DerivativeForm<1, dim, spacedim>> &input,
+            const MappingKind                                        kind,
+            const typename Mapping<dim, spacedim>::InternalDataBase &internal,
+            const ArrayView<Tensor<2, spacedim>> &output) const override;
+
+  virtual void
+  transform(const ArrayView<const Tensor<2, dim>>                   &input,
+            const MappingKind                                        kind,
+            const typename Mapping<dim, spacedim>::InternalDataBase &internal,
+            const ArrayView<Tensor<2, spacedim>> &output) const override;
+
+  virtual void
+  transform(const ArrayView<const DerivativeForm<2, dim, spacedim>> &input,
+            const MappingKind                                        kind,
+            const typename Mapping<dim, spacedim>::InternalDataBase &internal,
+            const ArrayView<Tensor<3, spacedim>> &output) const override;
+
+  virtual void
+  transform(const ArrayView<const Tensor<3, dim>>                   &input,
+            const MappingKind                                        kind,
+            const typename Mapping<dim, spacedim>::InternalDataBase &internal,
+            const ArrayView<Tensor<3, spacedim>> &output) const override;
+
+  /**
+   * @}
+   */
+
+  /**
+   * As opposed to the other fill_fe_values() and fill_fe_face_values()
+   * functions that rely on pre-computed information of InternalDataBase, this
+   * function chooses the flexible evaluation path on the cell and points
+   * passed in to the current function.
+   *
+   * @param[in] cell The cell where to evaluate the mapping
+   *
+   * @param[in] unit_points The points in reference coordinates where the
+   * transformation (Jacobians, positions) should be computed.
+   *
+   * @param[in] update_flags The kind of information that should be computed.
+   *
+   * @param[out] output_data A struct containing the evaluated quantities such
+   * as the Jacobian resulting from application of the mapping on the given
+   * cell with its underlying manifolds.
+   */
+  void
+  fill_mapping_data_for_generic_points(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const ArrayView<const Point<dim>>                          &unit_points,
+    const UpdateFlags                                           update_flags,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const;
+
+  /**
+   * @name Interface with FEValues
+   * @{
+   */
+
+  /**
+   * Storage for internal data of the mapping. See Mapping::InternalDataBase
+   * for an extensive description.
+   *
+   * This includes data that is computed once when the object is created (in
+   * get_data()) as well as data the class wants to store from between the
+   * call to fill_fe_values(), fill_fe_face_values(), or
+   * fill_fe_subface_values() until possible later calls from the finite
+   * element to functions such as transform(). The latter class of member
+   * variables are marked as 'mutable'.
+   */
+  class InternalData : public Mapping<dim, spacedim>::InternalDataBase
+  {
+  public:
+    /**
+     * Constructor for use with arbitrary points.
+     */
+    InternalData(const ArrayView<const Point<dim>> &quadrature_points);
+
+    /**
+     * Constructor.
+     */
+    InternalData(const Quadrature<dim> &quadrature);
+
+    virtual void
+    reinit(const UpdateFlags      update_flags,
+           const Quadrature<dim> &quadrature) override;
+
+    /**
+     * Return an estimate (in bytes) for the memory consumption of this object.
+     */
+    virtual std::size_t
+    memory_consumption() const override;
+
+    /**
+     * Affine component of the transformation.
+     */
+    mutable Tensor<1, spacedim> affine_component;
+
+    /**
+     * Linear component of the transformation.
+     */
+    mutable DerivativeForm<1, dim, spacedim> linear_component;
+
+    /**
+     * Determinant of linear_component.
+     */
+    mutable double determinant;
+
+    /**
+     * Quadrature. May be an amalgamation of rules created by, e.g.,
+     * QProjector::project_to_all_faces().
+     */
+    Quadrature<dim> quadrature;
+  };
+
+private:
+  virtual UpdateFlags
+  requires_update_flags(const UpdateFlags update_flags) const override;
+
+  virtual std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
+  get_data(const UpdateFlags, const Quadrature<dim> &quadrature) const override;
+
+  using Mapping<dim, spacedim>::get_face_data;
+
+  virtual std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
+  get_face_data(const UpdateFlags               flags,
+                const hp::QCollection<dim - 1> &quadrature) const override;
+
+  virtual std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
+  get_subface_data(const UpdateFlags          flags,
+                   const Quadrature<dim - 1> &quadrature) const override;
+
+  virtual CellSimilarity::Similarity
+  fill_fe_values(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const CellSimilarity::Similarity                            cell_similarity,
+    const Quadrature<dim>                                      &quadrature,
+    const typename Mapping<dim, spacedim>::InternalDataBase    &internal_data,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const override;
+
+  using Mapping<dim, spacedim>::fill_fe_face_values;
+
+  virtual void
+  fill_fe_face_values(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const unsigned int                                          face_no,
+    const hp::QCollection<dim - 1>                             &quadrature,
+    const typename Mapping<dim, spacedim>::InternalDataBase    &internal_data,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const override;
+
+  virtual void
+  fill_fe_subface_values(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const unsigned int                                          face_no,
+    const unsigned int                                          subface_no,
+    const Quadrature<dim - 1>                                  &quadrature,
+    const typename Mapping<dim, spacedim>::InternalDataBase    &internal_data,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const override;
+
+  /**
+   * @}
+   */
+
+  /**
+   * Update the affine and linear components fields of the incoming InternalData
+   * object.
+   */
+  void
+  update_transformation(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const InternalData                                         &data) const;
+
+  /**
+   * Transform quadrature points from the unit cell to the real cell.
+   */
+  void
+  transform_quadrature_points(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+    const InternalData                                         &data,
+    const typename QProjector<dim>::DataSetDescriptor          &offset,
+    std::vector<Point<spacedim>> &quadrature_points) const;
+
+  /**
+   * Compute the normal vectors if the UpdateFlags of the incoming InternalData
+   * object say that they should be updated.
+   */
+  void
+  maybe_update_normal_vectors(
+    const unsigned int                face_no,
+    const InternalData               &data,
+    std::vector<Tensor<1, spacedim>> &normal_vectors) const;
+
+  /**
+   * Since the Jacobian is constant for this mapping all derivatives of the
+   * Jacobian are identically zero. Fill these quantities with zeros if the
+   * corresponding update flags say that they should be updated.
+   */
+  void
+  maybe_update_jacobian_derivatives(
+    const InternalData              &data,
+    const CellSimilarity::Similarity cell_similarity,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const;
+
+  /**
+   * Compute the Jacobians if the UpdateFlags of the incoming
+   * InternalData object say that they should be updated.
+   */
+  void
+  maybe_update_jacobians(
+    const InternalData              &data,
+    const CellSimilarity::Similarity cell_similarity,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const;
+
+  /**
+   * Compute the inverse Jacobians if the UpdateFlags of the incoming
+   * InternalData object say that they should be updated.
+   */
+  void
+  maybe_update_inverse_jacobians(
+    const InternalData              &data,
+    const CellSimilarity::Similarity cell_similarity,
+    internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+      &output_data) const;
+};
+
+/** @} */
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
index 4d68b04c260400336903e19381e464312bb3be72..06cecd31d95e90e590659d436585ef6998367f62 100644 (file)
@@ -59,6 +59,7 @@ set(_unity_include_src
   mapping_cartesian.cc
   mapping.cc
   mapping_fe.cc
+  mapping_p1.cc
   mapping_q1.cc
   mapping_q.cc
   mapping_q_cache.cc
@@ -137,6 +138,7 @@ set(_inst
   mapping.inst.in
   mapping_fe.inst.in
   mapping_fe_field.inst.in
+  mapping_p1.inst.in
   mapping_q1_eulerian.inst.in
   mapping_q1.inst.in
   mapping_q_cache.inst.in
diff --git a/source/fe/mapping_p1.cc b/source/fe/mapping_p1.cc
new file mode 100644 (file)
index 0000000..ab97307
--- /dev/null
@@ -0,0 +1,894 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#include <deal.II/base/array_view.h>
+#include <deal.II/base/memory_consumption.h>
+#include <deal.II/base/qprojector.h>
+#include <deal.II/base/quadrature.h>
+#include <deal.II/base/tensor.h>
+
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_internal.h>
+#include <deal.II/fe/mapping_p1.h>
+
+#include <deal.II/grid/tria_iterator.h>
+
+#include <algorithm>
+#include <cmath>
+#include <memory>
+
+
+DEAL_II_NAMESPACE_OPEN
+
+namespace
+{
+  template <int dim, int spacedim>
+  DerivativeForm<1, dim, spacedim>
+  compute_linear_transformation(
+    const typename Triangulation<dim, spacedim>::cell_iterator &cell)
+  {
+    DerivativeForm<1, dim, spacedim> result;
+    for (unsigned int j = 0; j < spacedim; ++j)
+      for (unsigned int i = 1; i < dim + 1; ++i)
+        result[j][i - 1] = cell->vertex(i)[j] - cell->vertex(0)[j];
+    return result;
+  }
+} // namespace
+
+
+
+template <int dim, int spacedim>
+MappingP1<dim, spacedim>::InternalData::InternalData(
+  const ArrayView<const Point<dim>> &quadrature_points)
+{
+  quadrature.initialize(quadrature_points);
+}
+
+
+
+template <int dim, int spacedim>
+MappingP1<dim, spacedim>::InternalData::InternalData(
+  const Quadrature<dim> &quadrature)
+  : quadrature(quadrature)
+{}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::InternalData::reinit(
+  const UpdateFlags      update_flags,
+  const Quadrature<dim> &quadrature)
+{
+  this->quadrature  = quadrature;
+  this->update_each = update_flags;
+}
+
+
+
+template <int dim, int spacedim>
+std::size_t
+MappingP1<dim, spacedim>::InternalData::memory_consumption() const
+{
+  return (Mapping<dim, spacedim>::InternalDataBase::memory_consumption() +
+          MemoryConsumption::memory_consumption(affine_component) +
+          MemoryConsumption::memory_consumption(linear_component) +
+          MemoryConsumption::memory_consumption(determinant) +
+          MemoryConsumption::memory_consumption(quadrature));
+}
+
+
+
+template <int dim, int spacedim>
+bool
+MappingP1<dim, spacedim>::preserves_vertex_locations() const
+{
+  return true;
+}
+
+
+
+template <int dim, int spacedim>
+bool
+MappingP1<dim, spacedim>::is_compatible_with(
+  const ReferenceCell &reference_cell) const
+{
+  return reference_cell.is_simplex();
+}
+
+
+
+template <int dim, int spacedim>
+UpdateFlags
+MappingP1<dim, spacedim>::requires_update_flags(const UpdateFlags in) const
+{
+  // Like MappingCartesian, this mapping is simple and has minimal update
+  // interdependencies
+  UpdateFlags out = in;
+  if (out & update_boundary_forms)
+    out |= update_normal_vectors;
+
+  return out;
+}
+
+
+
+template <int dim, int spacedim>
+std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
+MappingP1<dim, spacedim>::get_data(const UpdateFlags      update_flags,
+                                   const Quadrature<dim> &quadrature) const
+{
+  auto data_ptr = std::make_unique<InternalData>(quadrature);
+
+  // verify that we have computed the transitive hull of the required
+  // flags and that FEValues has faithfully passed them on to us
+  Assert(update_flags == requires_update_flags(update_flags),
+         ExcInternalError());
+
+  // store the flags in the internal data object so we can access them
+  // in fill_fe_*_values(). use the transitive hull of the required
+  // flags
+  data_ptr->update_each = requires_update_flags(update_flags);
+
+  return data_ptr;
+}
+
+
+
+template <int dim, int spacedim>
+std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
+MappingP1<dim, spacedim>::get_face_data(
+  const UpdateFlags               update_flags,
+  const hp::QCollection<dim - 1> &quadrature) const
+{
+  auto data_ptr = std::make_unique<InternalData>(
+    QProjector<dim>::project_to_all_faces(ReferenceCells::get_simplex<dim>(),
+                                          quadrature));
+
+  // verify that we have computed the transitive hull of the required
+  // flags and that FEValues has faithfully passed them on to us
+  Assert(update_flags == requires_update_flags(update_flags),
+         ExcInternalError());
+
+  // store the flags in the internal data object so we can access them
+  // in fill_fe_*_values()
+  data_ptr->update_each = update_flags;
+
+  return data_ptr;
+}
+
+
+
+template <int dim, int spacedim>
+std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
+MappingP1<dim, spacedim>::get_subface_data(
+  const UpdateFlags          update_flags,
+  const Quadrature<dim - 1> &quadrature) const
+{
+  auto data_ptr = std::make_unique<InternalData>(
+    QProjector<dim>::project_to_all_subfaces(ReferenceCells::get_simplex<dim>(),
+                                             quadrature));
+
+  // verify that we have computed the transitive hull of the required
+  // flags and that FEValues has faithfully passed them on to us
+  Assert(update_flags == requires_update_flags(update_flags),
+         ExcInternalError());
+
+  // store the flags in the internal data object so we can access them
+  // in fill_fe_*_values()
+  data_ptr->update_each = update_flags;
+
+  return data_ptr;
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::update_transformation(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const InternalData                                         &data) const
+{
+  data.affine_component = cell->vertex(0);
+  data.linear_component = compute_linear_transformation<dim, spacedim>(cell);
+  data.determinant      = data.linear_component.determinant();
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform_quadrature_points(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const InternalData                                         &data,
+  const typename QProjector<dim>::DataSetDescriptor          &offset,
+  std::vector<Point<spacedim>> &quadrature_points) const
+{
+  Assert(cell->vertex(0) == data.affine_component, ExcInternalError());
+  for (unsigned int i = 0; i < quadrature_points.size(); ++i)
+    quadrature_points[i] =
+      data.affine_component +
+      apply_transformation(data.linear_component,
+                           data.quadrature.point(offset + i));
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::maybe_update_normal_vectors(
+  const unsigned int                face_no,
+  const InternalData               &data,
+  std::vector<Tensor<1, spacedim>> &normal_vectors) const
+{
+  const Tensor<1, dim> ref_normal_vector =
+    ReferenceCells::get_simplex<dim>().template unit_normal_vectors<dim>(
+      face_no);
+  Tensor<1, spacedim> normal_vector =
+    apply_transformation(data.linear_component.covariant_form(),
+                         ref_normal_vector);
+  normal_vector /= normal_vector.norm();
+
+  std::fill(normal_vectors.begin(), normal_vectors.end(), normal_vector);
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::maybe_update_jacobian_derivatives(
+  const InternalData              &data,
+  const CellSimilarity::Similarity cell_similarity,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  // The Jacobian is constant so its derivatives are zero
+  if (cell_similarity != CellSimilarity::translation)
+    {
+      if (data.update_each & update_jacobian_grads)
+        std::fill(output_data.jacobian_grads.begin(),
+                  output_data.jacobian_grads.end(),
+                  DerivativeForm<2, dim, spacedim>());
+
+      if (data.update_each & update_jacobian_pushed_forward_grads)
+        std::fill(output_data.jacobian_pushed_forward_grads.begin(),
+                  output_data.jacobian_pushed_forward_grads.end(),
+                  Tensor<3, spacedim>());
+
+      if (data.update_each & update_jacobian_2nd_derivatives)
+        std::fill(output_data.jacobian_2nd_derivatives.begin(),
+                  output_data.jacobian_2nd_derivatives.end(),
+                  DerivativeForm<3, dim, spacedim>());
+
+      if (data.update_each & update_jacobian_pushed_forward_2nd_derivatives)
+        std::fill(output_data.jacobian_pushed_forward_2nd_derivatives.begin(),
+                  output_data.jacobian_pushed_forward_2nd_derivatives.end(),
+                  Tensor<4, spacedim>());
+
+      if (data.update_each & update_jacobian_3rd_derivatives)
+        std::fill(output_data.jacobian_3rd_derivatives.begin(),
+                  output_data.jacobian_3rd_derivatives.end(),
+                  DerivativeForm<4, dim, spacedim>());
+
+      if (data.update_each & update_jacobian_pushed_forward_3rd_derivatives)
+        std::fill(output_data.jacobian_pushed_forward_3rd_derivatives.begin(),
+                  output_data.jacobian_pushed_forward_3rd_derivatives.end(),
+                  Tensor<5, spacedim>());
+    }
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::maybe_update_jacobians(
+  const InternalData              &data,
+  const CellSimilarity::Similarity cell_similarity,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  // "compute" Jacobian at the quadrature points, which are all the
+  // same
+  if (data.update_each & update_jacobians)
+    if (cell_similarity != CellSimilarity::translation)
+      std::fill(output_data.jacobians.begin(),
+                output_data.jacobians.end(),
+                data.linear_component);
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::maybe_update_inverse_jacobians(
+  const InternalData              &data,
+  const CellSimilarity::Similarity cell_similarity,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  if (data.update_each & update_inverse_jacobians)
+    if (cell_similarity != CellSimilarity::translation)
+      {
+        const auto inverse = data.linear_component.covariant_form().transpose();
+        std::fill(output_data.inverse_jacobians.begin(),
+                  output_data.inverse_jacobians.end(),
+                  inverse);
+      }
+}
+
+
+
+template <int dim, int spacedim>
+CellSimilarity::Similarity
+MappingP1<dim, spacedim>::fill_fe_values(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const CellSimilarity::Similarity                            cell_similarity,
+  const Quadrature<dim>                                      &quadrature,
+  const typename Mapping<dim, spacedim>::InternalDataBase    &internal_data,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  Assert(dynamic_cast<const InternalData *>(&internal_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(internal_data);
+
+  update_transformation(cell, data);
+  if (data.update_each & update_quadrature_points)
+    transform_quadrature_points(cell,
+                                data,
+                                QProjector<dim>::DataSetDescriptor::cell(),
+                                output_data.quadrature_points);
+
+  // A special property of this mapping is that the Jacobian is constant over
+  // the cell
+  if (data.update_each & update_JxW_values)
+    if (cell_similarity != CellSimilarity::translation)
+      {
+        for (unsigned int i = 0; i < output_data.JxW_values.size(); ++i)
+          output_data.JxW_values[i] = data.determinant * quadrature.weight(i);
+      }
+
+  maybe_update_jacobians(data, cell_similarity, output_data);
+  maybe_update_jacobian_derivatives(data, cell_similarity, output_data);
+  maybe_update_inverse_jacobians(data, cell_similarity, output_data);
+
+  if (data.update_each & update_normal_vectors)
+    {
+      Assert(spacedim == dim + 1,
+             ExcMessage("There is no (unique) cell normal for " +
+                        Utilities::int_to_string(dim) +
+                        "-dimensional cells in " +
+                        Utilities::int_to_string(spacedim) +
+                        "-dimensional space. This only works if the "
+                        "space dimension is one greater than the "
+                        "dimensionality of the mesh cells."));
+
+      Tensor<1, spacedim> normal;
+      // avoid warnings by only computing cross products in supported dimensions
+      if constexpr (dim == 1 && spacedim == 2)
+        normal = cross_product_2d(-data.linear_component.transpose()[0]);
+      else if constexpr (dim == 2 && spacedim == 3)
+        {
+          const auto transpose = data.linear_component.transpose();
+          normal               = cross_product_3d(transpose[0], transpose[1]);
+        }
+      else
+        DEAL_II_ASSERT_UNREACHABLE();
+      normal /= normal.norm();
+
+      if (cell->direction_flag() == false)
+        normal *= -1.0;
+
+      std::fill(output_data.normal_vectors.begin(),
+                output_data.normal_vectors.end(),
+                normal);
+    }
+
+  return cell_similarity;
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::fill_mapping_data_for_generic_points(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const ArrayView<const Point<dim>>                          &unit_points,
+  const UpdateFlags                                           update_flags,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  if (update_flags == update_default)
+    return;
+
+  Assert(update_flags & update_inverse_jacobians ||
+           update_flags & update_jacobians ||
+           update_flags & update_quadrature_points,
+         ExcNotImplemented());
+
+  output_data.initialize(unit_points.size(), update_flags);
+
+  InternalData data(unit_points);
+  data.update_each = update_flags;
+  update_transformation(cell, data);
+
+  if (data.update_each & update_quadrature_points)
+    transform_quadrature_points(cell,
+                                data,
+                                QProjector<dim>::DataSetDescriptor::cell(),
+                                output_data.quadrature_points);
+
+  maybe_update_jacobians(data, CellSimilarity::none, output_data);
+  maybe_update_inverse_jacobians(data, CellSimilarity::none, output_data);
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::fill_fe_face_values(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const unsigned int                                          face_no,
+  const hp::QCollection<dim - 1> &quadrature_collection,
+  const typename Mapping<dim, spacedim>::InternalDataBase &internal_data,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  Assert(dynamic_cast<const InternalData *>(&internal_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(internal_data);
+
+  update_transformation(cell, data);
+  const auto offset =
+    QProjector<dim>::DataSetDescriptor::face(cell->reference_cell(),
+                                             face_no,
+                                             cell->combined_face_orientation(
+                                               face_no),
+                                             quadrature_collection);
+  if (data.update_each & update_quadrature_points)
+    transform_quadrature_points(cell,
+                                data,
+                                offset,
+                                output_data.quadrature_points);
+
+  maybe_update_normal_vectors(face_no, data, output_data.normal_vectors);
+
+  if (data.update_each & (update_JxW_values | update_boundary_forms))
+    {
+      // Since the quadrature weights presently sum to
+      // cell->reference_cell().face_measure(face_no), we have to rescale so
+      // they sum to the area of the face
+      const double J = cell->face(face_no)->measure() /
+                       cell->reference_cell().face_measure(face_no);
+      if (data.update_each & update_JxW_values)
+        for (unsigned int i = 0; i < output_data.JxW_values.size(); ++i)
+          output_data.JxW_values[i] = J * data.quadrature.weight(i + offset);
+
+      if (data.update_each & update_boundary_forms)
+        for (unsigned int i = 0; i < output_data.boundary_forms.size(); ++i)
+          output_data.boundary_forms[i] = J * output_data.normal_vectors[i];
+    }
+
+  maybe_update_jacobians(data, CellSimilarity::none, output_data);
+  maybe_update_jacobian_derivatives(data, CellSimilarity::none, output_data);
+  maybe_update_inverse_jacobians(data, CellSimilarity::none, output_data);
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::fill_fe_subface_values(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const unsigned int                                          face_no,
+  const unsigned int                                          subface_no,
+  const Quadrature<dim - 1>                                  &quadrature,
+  const typename Mapping<dim, spacedim>::InternalDataBase    &internal_data,
+  internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
+    &output_data) const
+{
+  Assert(dynamic_cast<const InternalData *>(&internal_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(internal_data);
+
+  update_transformation(cell, data);
+  const auto offset =
+    QProjector<dim>::DataSetDescriptor::subface(cell->reference_cell(),
+                                                face_no,
+                                                subface_no,
+                                                cell->combined_face_orientation(
+                                                  face_no),
+                                                quadrature.size(),
+                                                cell->subface_case(face_no));
+  if (data.update_each & update_quadrature_points)
+    transform_quadrature_points(cell,
+                                data,
+                                offset,
+                                output_data.quadrature_points);
+
+  maybe_update_normal_vectors(face_no, data, output_data.normal_vectors);
+
+  if (data.update_each & (update_JxW_values | update_boundary_forms))
+    {
+      // Same as fill_fe_face_values()
+      const double J =
+        cell->face(face_no)->measure() /
+        cell->face(face_no)->reference_cell().volume() /
+        // TODO: once we support 3d refinement this should be updated to the
+        // simplex version of GeometryInfo::subface_ratio()
+        (dim == 2 ? 2 : 4);
+      if (data.update_each & update_JxW_values)
+        for (unsigned int i = 0; i < output_data.JxW_values.size(); ++i)
+          output_data.JxW_values[i] = J * quadrature.weight(i);
+
+      if (data.update_each & update_boundary_forms)
+        for (unsigned int i = 0; i < output_data.boundary_forms.size(); ++i)
+          output_data.boundary_forms[i] = J * output_data.normal_vectors[i];
+    }
+
+  maybe_update_jacobians(data, CellSimilarity::none, output_data);
+  maybe_update_jacobian_derivatives(data, CellSimilarity::none, output_data);
+  maybe_update_inverse_jacobians(data, CellSimilarity::none, output_data);
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform(
+  const ArrayView<const Tensor<1, dim>>                   &input,
+  const MappingKind                                        mapping_kind,
+  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
+  const ArrayView<Tensor<1, spacedim>>                    &output) const
+{
+  AssertDimension(input.size(), output.size());
+  Assert(dynamic_cast<const InternalData *>(&mapping_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(mapping_data);
+
+  switch (mapping_kind)
+    {
+      case mapping_covariant:
+        {
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = apply_transformation(covariant, input[i]);
+          return;
+        }
+
+      case mapping_contravariant:
+        {
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = apply_transformation(data.linear_component, input[i]);
+          return;
+        }
+      case mapping_piola:
+        {
+          auto transformation = data.linear_component;
+          Assert(data.determinant > 0.0, ExcDivideByZero());
+          for (unsigned int d = 0; d < spacedim; ++d)
+            transformation[d] /= data.determinant;
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = apply_transformation(transformation, input[i]);
+          return;
+        }
+      default:
+        DEAL_II_NOT_IMPLEMENTED();
+    }
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform(
+  const ArrayView<const DerivativeForm<1, dim, spacedim>> &input,
+  const MappingKind                                        mapping_kind,
+  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
+  const ArrayView<Tensor<2, spacedim>>                    &output) const
+{
+  AssertDimension(input.size(), output.size());
+  Assert(dynamic_cast<const InternalData *>(&mapping_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(mapping_data);
+
+  switch (mapping_kind)
+    {
+      case mapping_covariant:
+        {
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = apply_transformation(covariant, input[i]);
+
+          return;
+        }
+      default:
+        DEAL_II_NOT_IMPLEMENTED();
+    }
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform(
+  const ArrayView<const Tensor<2, dim>>                   &input,
+  const MappingKind                                        mapping_kind,
+  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
+  const ArrayView<Tensor<2, spacedim>>                    &output) const
+{
+  AssertDimension(input.size(), output.size());
+  Assert(dynamic_cast<const InternalData *>(&mapping_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(mapping_data);
+
+  switch (mapping_kind)
+    {
+      case mapping_covariant:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = apply_transformation(covariant, input[i]);
+          return;
+        }
+
+      case mapping_contravariant:
+        {
+          Assert(data.update_each & update_contravariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_contravariant_transformation"));
+
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = apply_transformation(data.linear_component, input[i]);
+          return;
+        }
+
+      case mapping_covariant_gradient:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            {
+              const DerivativeForm<1, spacedim, dim> A =
+                apply_transformation(covariant, transpose(input[i]));
+              output[i] = apply_transformation(covariant, A.transpose());
+            }
+          return;
+        }
+
+      case mapping_contravariant_gradient:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            {
+              const DerivativeForm<1, spacedim, dim> A =
+                apply_transformation(data.linear_component,
+                                     transpose(input[i]));
+              output[i] = apply_transformation(covariant, A.transpose());
+            }
+
+          return;
+        }
+
+      case mapping_piola_gradient:
+        {
+          Assert(data.update_each & update_contravariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_contravariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          auto       scaled_contravariant = data.linear_component;
+          for (unsigned int d = 0; d < spacedim; ++d)
+            scaled_contravariant[d] /= data.determinant;
+          for (unsigned int i = 0; i < output.size(); ++i)
+            {
+              const DerivativeForm<1, spacedim, dim> A =
+                apply_transformation(covariant, input[i]);
+              const Tensor<2, spacedim> T =
+                apply_transformation(scaled_contravariant, A.transpose());
+
+              output[i] = transpose(T);
+            }
+
+          return;
+        }
+
+      default:
+        Assert(false, ExcNotImplemented());
+    }
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform(
+  const ArrayView<const DerivativeForm<2, dim, spacedim>> &input,
+  const MappingKind                                        mapping_kind,
+  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
+  const ArrayView<Tensor<3, spacedim>>                    &output) const
+{
+  AssertDimension(input.size(), output.size());
+  Assert(dynamic_cast<const InternalData *>(&mapping_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(mapping_data);
+
+  switch (mapping_kind)
+    {
+      case mapping_covariant_gradient:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = internal::apply_covariant_gradient(covariant, input[i]);
+
+          return;
+        }
+      default:
+        DEAL_II_NOT_IMPLEMENTED();
+    }
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform(
+  const ArrayView<const Tensor<3, dim>>                   &input,
+  const MappingKind                                        mapping_kind,
+  const typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
+  const ArrayView<Tensor<3, spacedim>>                    &output) const
+{
+  AssertDimension(input.size(), output.size());
+  Assert(dynamic_cast<const InternalData *>(&mapping_data) != nullptr,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData &>(mapping_data);
+
+  switch (mapping_kind)
+    {
+      case mapping_contravariant_hessian:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+          Assert(data.update_each & update_contravariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_contravariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] =
+              internal::apply_contravariant_hessian(covariant,
+                                                    data.linear_component,
+                                                    input[i]);
+
+          return;
+        }
+
+      case mapping_covariant_hessian:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = internal::apply_covariant_hessian(covariant, input[i]);
+
+          return;
+        }
+
+      case mapping_piola_hessian:
+        {
+          Assert(data.update_each & update_covariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_covariant_transformation"));
+          Assert(data.update_each & update_contravariant_transformation,
+                 typename FEValuesBase<dim>::ExcAccessToUninitializedField(
+                   "update_contravariant_transformation"));
+
+          const auto covariant = data.linear_component.covariant_form();
+          for (unsigned int i = 0; i < output.size(); ++i)
+            output[i] = internal::apply_piola_hessian(covariant,
+                                                      data.linear_component,
+                                                      data.determinant,
+                                                      input[i]);
+
+          return;
+        }
+
+      default:
+        DEAL_II_NOT_IMPLEMENTED();
+    }
+}
+
+
+
+template <int dim, int spacedim>
+Point<spacedim>
+MappingP1<dim, spacedim>::transform_unit_to_real_cell(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const Point<dim>                                           &p) const
+{
+  const DerivativeForm<1, dim, spacedim> linear_component =
+    compute_linear_transformation<dim, spacedim>(cell);
+  const Tensor<1, spacedim> sheared = apply_transformation(linear_component, p);
+  return cell->vertex(0) + sheared;
+}
+
+
+
+template <int dim, int spacedim>
+Point<dim>
+MappingP1<dim, spacedim>::transform_real_to_unit_cell(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const Point<spacedim>                                      &p) const
+{
+  const DerivativeForm<1, spacedim, dim> linear_component =
+    compute_linear_transformation<dim, spacedim>(cell)
+      .covariant_form()
+      .transpose();
+  const Tensor<1, spacedim> offset = cell->vertex(0);
+  return Point<dim>(apply_transformation(linear_component, p - offset));
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingP1<dim, spacedim>::transform_points_real_to_unit_cell(
+  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+  const ArrayView<const Point<spacedim>>                     &real_points,
+  const ArrayView<Point<dim>>                                &unit_points) const
+{
+  const DerivativeForm<1, spacedim, dim> linear_component =
+    compute_linear_transformation<dim, spacedim>(cell)
+      .covariant_form()
+      .transpose();
+  const Tensor<1, spacedim> offset = cell->vertex(0);
+  for (unsigned int i = 0; i < real_points.size(); ++i)
+    unit_points[i] = Point<dim>(
+      apply_transformation(linear_component, real_points[i] - offset));
+}
+
+
+
+template <int dim, int spacedim>
+std::unique_ptr<Mapping<dim, spacedim>>
+MappingP1<dim, spacedim>::clone() const
+{
+  return std::make_unique<MappingP1<dim, spacedim>>(*this);
+}
+
+
+//---------------------------------------------------------------------------
+// explicit instantiations
+#include "fe/mapping_p1.inst"
+
+
+DEAL_II_NAMESPACE_CLOSE
diff --git a/source/fe/mapping_p1.inst.in b/source/fe/mapping_p1.inst.in
new file mode 100644 (file)
index 0000000..7c104e7
--- /dev/null
@@ -0,0 +1,21 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
+    template class MappingP1<deal_II_dimension, deal_II_space_dimension>;
+#endif
+  }
diff --git a/tests/simplex/mapping_p1_01.cc b/tests/simplex/mapping_p1_01.cc
new file mode 100644 (file)
index 0000000..21342a0
--- /dev/null
@@ -0,0 +1,264 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_simplex_p.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_fe.h>
+#include <deal.II/fe/mapping_p1.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_tools_topology.h>
+#include <deal.II/grid/tria.h>
+
+#include "../tests.h"
+
+
+// Test MappingP1's cell values for mapping quantities by comparing with
+// MappingFE.
+
+using namespace dealii;
+
+template <int dim, int spacedim = dim>
+void
+test()
+{
+  deallog << "MappingP1<" << dim << ", " << spacedim << ">" << std::endl;
+
+  const auto reference_cell = ReferenceCells::get_simplex<dim>();
+
+  Triangulation<dim, spacedim> tria;
+  if constexpr (dim == 1)
+    GridGenerator::subdivided_hyper_cube(tria, 1, 1.0, 2.0, true);
+  else if constexpr (dim == 2 && spacedim == 3)
+    {
+      Triangulation<dim> tria_2d;
+      GridGenerator::subdivided_hyper_cube_with_simplices(
+        tria_2d, 1, 1.0, 2.0, true);
+      std::vector<Point<dim>>    points_2d;
+      std::vector<CellData<dim>> cell_data;
+      SubCellData                subcell_data;
+      std::tie(points_2d, cell_data, subcell_data) =
+        GridTools::get_coarse_mesh_description(tria_2d);
+
+      std::vector<Point<spacedim>> points_3d;
+      for (const auto &p : points_2d)
+        points_3d.emplace_back(p[0], p[1], 1.0 + p[0] * p[0] + p[1] * p[1]);
+
+      tria.create_triangulation(points_3d, cell_data, subcell_data);
+    }
+  else
+    GridGenerator::subdivided_hyper_cube_with_simplices(
+      tria, 1, 1.0, 2.0, true);
+  FE_SimplexP<dim, spacedim> fe(1);
+  MappingP1<dim, spacedim>   mapping;
+  MappingFE<dim, spacedim>   mapping_fe(fe);
+
+  QGaussSimplex<dim> quadrature(2);
+
+  UpdateFlags flags =
+    update_quadrature_points | update_JxW_values | update_jacobians |
+    update_jacobian_grads | update_inverse_jacobians |
+    update_jacobian_pushed_forward_grads | update_jacobian_2nd_derivatives |
+    update_jacobian_pushed_forward_2nd_derivatives |
+    update_jacobian_3rd_derivatives |
+    update_jacobian_pushed_forward_3rd_derivatives | update_volume_elements;
+  if (dim + 1 == spacedim)
+    flags |= update_normal_vectors | update_boundary_forms;
+
+  FEValues<dim, spacedim> fe_values(mapping, fe, quadrature, flags);
+  FEValues<dim, spacedim> fe_values_2(mapping_fe, fe, quadrature, flags);
+
+  for (const auto &cell : tria.active_cell_iterators())
+    {
+      deallog << std::endl;
+      fe_values.reinit(cell);
+      fe_values_2.reinit(cell);
+
+      deallog << "cell vertices" << std::endl;
+      for (const unsigned int vertex_no : cell->vertex_indices())
+        deallog << "  " << cell->vertex(vertex_no) << std::endl;
+      deallog << std::endl;
+
+      deallog << "transform_unit_to_real_cell" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          const Point<spacedim> p =
+            mapping.transform_unit_to_real_cell(cell, quadrature.point(qp_n));
+          deallog << "  " << p << std::endl;
+
+          Assert((p - fe_values_2.quadrature_point(qp_n)).norm() < 1e-12,
+                 ExcInternalError());
+        }
+      deallog << std::endl;
+
+      deallog << "transform_real_to_unit_cell" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          const Point<dim> p = mapping.transform_real_to_unit_cell(
+            cell, fe_values_2.quadrature_point(qp_n));
+          deallog << "  " << p << std::endl;
+
+          Assert((quadrature.point(qp_n) - p).norm() < 1e-12,
+                 ExcInternalError());
+        }
+      deallog << std::endl;
+
+      deallog << "JxW" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  " << fe_values.JxW(qp_n) << std::endl;
+
+          Assert(std::abs((fe_values.JxW(qp_n) - fe_values_2.JxW(qp_n))) <
+                   1e-12,
+                 ExcInternalError());
+        }
+      deallog << std::endl;
+
+      deallog << "quadrature points" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          const Point<dim> p = mapping.transform_real_to_unit_cell(
+            cell, fe_values.quadrature_point(qp_n));
+          deallog << "  " << p << " -> " << fe_values.quadrature_point(qp_n)
+                  << std::endl;
+          Assert(reference_cell.contains_point(p, 1e-12), ExcInternalError());
+
+          Assert((fe_values.quadrature_point(qp_n) -
+                  fe_values_2.quadrature_point(qp_n))
+                     .norm() < 1e-12,
+                 ExcInternalError());
+        }
+      deallog << std::endl;
+
+      if constexpr (dim + 1 == spacedim)
+        {
+          deallog << "normal vectors" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << fe_values.normal_vector(qp_n) << std::endl;
+
+              Assert((fe_values.normal_vector(qp_n) -
+                      fe_values_2.normal_vector(qp_n))
+                         .norm() < 1e-12,
+                     ExcInternalError());
+            }
+          deallog << std::endl;
+        }
+
+      deallog << "Jacobians" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  " << fe_values.jacobian(qp_n) << std::endl;
+
+          for (unsigned int d = 0; d < spacedim; ++d)
+            Assert((fe_values.jacobian(qp_n)[d] - fe_values_2.jacobian(qp_n)[d])
+                       .norm() < 1e-12,
+                   ExcInternalError());
+        }
+      deallog << std::endl;
+
+      deallog << "Jacobian gradients" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  all zero = "
+                  << (fe_values.jacobian_grad(qp_n).norm() == 0) << std::endl;
+
+          for (unsigned int d = 0; d < spacedim; ++d)
+            Assert((fe_values.jacobian_grad(qp_n)[d] -
+                    fe_values_2.jacobian_grad(qp_n)[d])
+                       .norm() < 1e-12,
+                   ExcInternalError());
+        }
+      deallog << std::endl;
+
+      deallog << "inverse jacobians" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  " << fe_values.inverse_jacobian(qp_n) << std::endl;
+
+          for (unsigned int d = 0; d < dim; ++d)
+            Assert((fe_values.inverse_jacobian(qp_n)[d] -
+                    fe_values_2.inverse_jacobian(qp_n)[d])
+                       .norm() < 1e-12,
+                   ExcInternalError());
+        }
+      deallog << std::endl;
+
+      deallog << "Jacobian push forward gradients" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  all zero = "
+                  << (fe_values.jacobian_pushed_forward_grad(qp_n).norm() == 0)
+                  << std::endl;
+        }
+      deallog << std::endl;
+
+      deallog << "Jacobian 2nd derivatives" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  all zero = "
+                  << (fe_values.jacobian_2nd_derivative(qp_n).norm() == 0)
+                  << std::endl;
+        }
+      deallog << std::endl;
+
+      deallog << "Jacobian push forward 2nd derivatives" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  all zero = "
+                  << (fe_values.jacobian_pushed_forward_2nd_derivative(qp_n)
+                        .norm() == 0)
+                  << std::endl;
+        }
+      deallog << std::endl;
+
+      deallog << "Jacobian 3rd derivatives" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  all zero = "
+                  << (fe_values.jacobian_3rd_derivative(qp_n).norm() == 0)
+                  << std::endl;
+        }
+      deallog << std::endl;
+
+      deallog << "Jacobian push forward 3rd derivatives" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          deallog << "  all zero = "
+                  << (fe_values.jacobian_pushed_forward_3rd_derivative(qp_n)
+                        .norm() == 0)
+                  << std::endl;
+        }
+      deallog << std::endl;
+    }
+
+  deallog << std::endl;
+}
+
+int
+main()
+{
+  initlog();
+
+  test<1>();
+  test<1, 2>();
+  test<2>();
+  test<2, 3>();
+  test<3>();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/simplex/mapping_p1_01.output b/tests/simplex/mapping_p1_01.output
new file mode 100644 (file)
index 0000000..4afd7d1
--- /dev/null
@@ -0,0 +1,961 @@
+
+DEAL::MappingP1<1, 1>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000
+DEAL::  2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.21132
+DEAL::  1.78868
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.211325
+DEAL::  0.788675
+DEAL::
+DEAL::JxW
+DEAL::  0.500000
+DEAL::  0.500000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 -> 1.21132
+DEAL::  0.788675 -> 1.78868
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000
+DEAL::  1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000
+DEAL::  1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<1, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 0.00000
+DEAL::  2.00000 0.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.21132 0.00000
+DEAL::  1.78868 0.00000
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.211325
+DEAL::  0.788675
+DEAL::
+DEAL::JxW
+DEAL::  0.500000
+DEAL::  0.500000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 -> 1.21132 0.00000
+DEAL::  0.788675 -> 1.78868 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::-0.00000 1.00000
+DEAL::-0.00000 1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000  0.00000
+DEAL::  1.00000  0.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000
+DEAL::  1.00000 0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000
+DEAL::  2.00000 1.00000
+DEAL::  1.00000 2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.17856 1.15505
+DEAL::  1.07503 1.64495
+DEAL::  1.66639 1.15505
+DEAL::  1.28002 1.64495
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.178559 0.155051
+DEAL::  0.0750311 0.644949
+DEAL::  0.666390 0.155051
+DEAL::  0.280020 0.644949
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 -> 1.17856 1.15505
+DEAL::  0.0750311 0.644949 -> 1.07503 1.64495
+DEAL::  0.666390 0.155051 -> 1.66639 1.15505
+DEAL::  0.280020 0.644949 -> 1.28002 1.64495
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000
+DEAL::  1.00000 2.00000
+DEAL::  2.00000 1.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.82144 1.84495
+DEAL::  1.92497 1.35505
+DEAL::  1.33361 1.84495
+DEAL::  1.71998 1.35505
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.178559 0.155051
+DEAL::  0.0750311 0.644949
+DEAL::  0.666390 0.155051
+DEAL::  0.280020 0.644949
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 -> 1.82144 1.84495
+DEAL::  0.0750311 0.644949 -> 1.92497 1.35505
+DEAL::  0.666390 0.155051 -> 1.33361 1.84495
+DEAL::  0.280020 0.644949 -> 1.71998 1.35505
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 3.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.17856 1.15505 4.00083
+DEAL::  1.07503 1.64495 5.15994
+DEAL::  1.66639 1.15505 5.46432
+DEAL::  1.28002 1.64495 5.77491
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.178559 0.155051
+DEAL::  0.0750311 0.644949
+DEAL::  0.666390 0.155051
+DEAL::  0.280020 0.644949
+DEAL::
+DEAL::JxW
+DEAL::  0.693155
+DEAL::  0.396570
+DEAL::  0.693155
+DEAL::  0.396570
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 -> 1.17856 1.15505 4.00083
+DEAL::  0.0750311 0.644949 -> 1.07503 1.64495 5.15994
+DEAL::  0.666390 0.155051 -> 1.66639 1.15505 5.46432
+DEAL::  0.280020 0.644949 -> 1.28002 1.64495 5.77491
+DEAL::
+DEAL::normal vectors
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000 9.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.82144 1.84495 7.99917
+DEAL::  1.92497 1.35505 6.84006
+DEAL::  1.33361 1.84495 6.53568
+DEAL::  1.71998 1.35505 6.22509
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.178559 0.155051
+DEAL::  0.0750311 0.644949
+DEAL::  0.666390 0.155051
+DEAL::  0.280020 0.644949
+DEAL::
+DEAL::JxW
+DEAL::  0.693155
+DEAL::  0.396570
+DEAL::  0.693155
+DEAL::  0.396570
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 -> 1.82144 1.84495 7.99917
+DEAL::  0.0750311 0.644949 -> 1.92497 1.35505 6.84006
+DEAL::  0.666390 0.155051 -> 1.33361 1.84495 6.53568
+DEAL::  0.280020 0.644949 -> 1.71998 1.35505 6.22509
+DEAL::
+DEAL::normal vectors
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::-0.688247 -0.688247 0.229416
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<3, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.16200 1.18385 1.01272
+DEAL::  1.01091 1.28152 1.36213
+DEAL::  1.19012 1.01140 1.35862
+DEAL::  1.17082 1.15282 1.63849
+DEAL::  1.15869 1.58566 1.13085
+DEAL::  1.57123 1.14692 1.14037
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.162001 0.183850 0.0127184
+DEAL::  0.0109052 0.281524 0.362127
+DEAL::  0.190117 0.0114033 0.358621
+DEAL::  0.170817 0.152818 0.638493
+DEAL::  0.158685 0.585663 0.130847
+DEAL::  0.571226 0.146918 0.140373
+DEAL::
+DEAL::JxW
+DEAL::  0.0203870
+DEAL::  0.0213444
+DEAL::  0.0220947
+DEAL::  0.0234374
+DEAL::  0.0374025
+DEAL::  0.0420007
+DEAL::
+DEAL::quadrature points
+DEAL::  0.162001 0.183850 0.0127184 -> 1.16200 1.18385 1.01272
+DEAL::  0.0109052 0.281524 0.362127 -> 1.01091 1.28152 1.36213
+DEAL::  0.190117 0.0114033 0.358621 -> 1.19012 1.01140 1.35862
+DEAL::  0.170817 0.152818 0.638493 -> 1.17082 1.15282 1.63849
+DEAL::  0.158685 0.585663 0.130847 -> 1.15869 1.58566 1.13085
+DEAL::  0.571226 0.146918 0.140373 -> 1.57123 1.14692 1.14037
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  2.00000 2.00000 1.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.35857 1.83800 1.01272
+DEAL::  1.65456 1.98909 1.36213
+DEAL::  1.56014 1.80988 1.35862
+DEAL::  1.96213 1.82918 1.63849
+DEAL::  1.87520 1.84131 1.13085
+DEAL::  1.85852 1.42877 1.14037
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.162001 0.183850 0.0127184
+DEAL::  0.0109052 0.281524 0.362127
+DEAL::  0.190117 0.0114033 0.358621
+DEAL::  0.170817 0.152818 0.638493
+DEAL::  0.158685 0.585663 0.130847
+DEAL::  0.571226 0.146918 0.140373
+DEAL::
+DEAL::JxW
+DEAL::  0.0203870
+DEAL::  0.0213444
+DEAL::  0.0220947
+DEAL::  0.0234374
+DEAL::  0.0374025
+DEAL::  0.0420007
+DEAL::
+DEAL::quadrature points
+DEAL::  0.162001 0.183850 0.0127184 -> 1.35857 1.83800 1.01272
+DEAL::  0.0109052 0.281524 0.362127 -> 1.65456 1.98909 1.36213
+DEAL::  0.190117 0.0114033 0.358621 -> 1.56014 1.80988 1.35862
+DEAL::  0.170817 0.152818 0.638493 -> 1.96213 1.82918 1.63849
+DEAL::  0.158685 0.585663 0.130847 -> 1.87520 1.84131 1.13085
+DEAL::  0.571226 0.146918 0.140373 -> 1.85852 1.42877 1.14037
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.83800 1.01272 1.35857
+DEAL::  1.98909 1.36213 1.65456
+DEAL::  1.80988 1.35862 1.56014
+DEAL::  1.82918 1.63849 1.96213
+DEAL::  1.84131 1.13085 1.87520
+DEAL::  1.42877 1.14037 1.85852
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.162001 0.183850 0.0127184
+DEAL::  0.0109052 0.281524 0.362127
+DEAL::  0.190117 0.0114033 0.358621
+DEAL::  0.170817 0.152818 0.638493
+DEAL::  0.158685 0.585663 0.130847
+DEAL::  0.571226 0.146918 0.140373
+DEAL::
+DEAL::JxW
+DEAL::  0.0203870
+DEAL::  0.0213444
+DEAL::  0.0220947
+DEAL::  0.0234374
+DEAL::  0.0374025
+DEAL::  0.0420007
+DEAL::
+DEAL::quadrature points
+DEAL::  0.162001 0.183850 0.0127184 -> 1.83800 1.01272 1.35857
+DEAL::  0.0109052 0.281524 0.362127 -> 1.98909 1.36213 1.65456
+DEAL::  0.190117 0.0114033 0.358621 -> 1.80988 1.35862 1.56014
+DEAL::  0.170817 0.152818 0.638493 -> 1.82918 1.63849 1.96213
+DEAL::  0.158685 0.585663 0.130847 -> 1.84131 1.13085 1.87520
+DEAL::  0.571226 0.146918 0.140373 -> 1.42877 1.14037 1.85852
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::  1.00000 2.00000 2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.18385 1.83800 1.35857
+DEAL::  1.28152 1.98909 1.65456
+DEAL::  1.01140 1.80988 1.56014
+DEAL::  1.15282 1.82918 1.96213
+DEAL::  1.58566 1.84131 1.87520
+DEAL::  1.14692 1.42877 1.85852
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.162001 0.183850 0.0127184
+DEAL::  0.0109052 0.281524 0.362127
+DEAL::  0.190117 0.0114033 0.358621
+DEAL::  0.170817 0.152818 0.638493
+DEAL::  0.158685 0.585663 0.130847
+DEAL::  0.571226 0.146918 0.140373
+DEAL::
+DEAL::JxW
+DEAL::  0.0203870
+DEAL::  0.0213444
+DEAL::  0.0220947
+DEAL::  0.0234374
+DEAL::  0.0374025
+DEAL::  0.0420007
+DEAL::
+DEAL::quadrature points
+DEAL::  0.162001 0.183850 0.0127184 -> 1.18385 1.83800 1.35857
+DEAL::  0.0109052 0.281524 0.362127 -> 1.28152 1.98909 1.65456
+DEAL::  0.190117 0.0114033 0.358621 -> 1.01140 1.80988 1.56014
+DEAL::  0.170817 0.152818 0.638493 -> 1.15282 1.82918 1.96213
+DEAL::  0.158685 0.585663 0.130847 -> 1.58566 1.84131 1.87520
+DEAL::  0.571226 0.146918 0.140373 -> 1.14692 1.42877 1.85852
+DEAL::
+DEAL::Jacobians
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::transform_unit_to_real_cell
+DEAL::  1.65415 1.17472 1.19657
+DEAL::  1.70757 1.37303 1.64365
+DEAL::  1.79848 1.54874 1.37002
+DEAL::  1.67636 1.80931 1.79131
+DEAL::  1.25565 1.28953 1.71651
+DEAL::  1.28186 1.71160 1.28729
+DEAL::
+DEAL::transform_real_to_unit_cell
+DEAL::  0.162001 0.183850 0.0127184
+DEAL::  0.0109052 0.281524 0.362127
+DEAL::  0.190117 0.0114033 0.358621
+DEAL::  0.170817 0.152818 0.638493
+DEAL::  0.158685 0.585663 0.130847
+DEAL::  0.571226 0.146918 0.140373
+DEAL::
+DEAL::JxW
+DEAL::  0.0407740
+DEAL::  0.0426888
+DEAL::  0.0441893
+DEAL::  0.0468748
+DEAL::  0.0748051
+DEAL::  0.0840013
+DEAL::
+DEAL::quadrature points
+DEAL::  0.162001 0.183850 0.0127184 -> 1.65415 1.17472 1.19657
+DEAL::  0.0109052 0.281524 0.362127 -> 1.70757 1.37303 1.64365
+DEAL::  0.190117 0.0114033 0.358621 -> 1.79848 1.54874 1.37002
+DEAL::  0.170817 0.152818 0.638493 -> 1.67636 1.80931 1.79131
+DEAL::  0.158685 0.585663 0.130847 -> 1.25565 1.28953 1.71651
+DEAL::  0.571226 0.146918 0.140373 -> 1.28186 1.71160 1.28729
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::OK
diff --git a/tests/simplex/mapping_p1_02.cc b/tests/simplex/mapping_p1_02.cc
new file mode 100644 (file)
index 0000000..cd430b3
--- /dev/null
@@ -0,0 +1,259 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_simplex_p.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_fe.h>
+#include <deal.II/fe/mapping_p1.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_tools_topology.h>
+#include <deal.II/grid/tria.h>
+
+#include "../tests.h"
+
+
+// Test MappingP1's face values by comparing with MappingFE.
+
+using namespace dealii;
+
+template <int dim, int spacedim = dim>
+void
+test()
+{
+  deallog << "MappingP1<" << dim << ", " << spacedim << ">" << std::endl;
+
+  const auto reference_cell = ReferenceCells::get_simplex<dim>();
+
+  Triangulation<dim, spacedim> tria;
+  if constexpr (dim == 1)
+    GridGenerator::subdivided_hyper_cube(tria, 1, 1.0, 2.0, true);
+  else if constexpr (dim == 2 && spacedim == 3)
+    {
+      Triangulation<dim> tria_2d;
+      GridGenerator::subdivided_hyper_cube_with_simplices(
+        tria_2d, 1, 1.0, 2.0, true);
+      std::vector<Point<dim>>    points_2d;
+      std::vector<CellData<dim>> cell_data;
+      SubCellData                subcell_data;
+      std::tie(points_2d, cell_data, subcell_data) =
+        GridTools::get_coarse_mesh_description(tria_2d);
+
+      std::vector<Point<spacedim>> points_3d;
+      for (const auto &p : points_2d)
+        points_3d.emplace_back(p[0], p[1], 1.0 + p[0] * p[0] + p[1] * p[1]);
+
+      tria.create_triangulation(points_3d, cell_data, subcell_data);
+    }
+  else
+    GridGenerator::subdivided_hyper_cube_with_simplices(
+      tria, 1, 1.0, 2.0, true);
+  FE_SimplexP<dim, spacedim> fe(1);
+  MappingP1<dim, spacedim>   mapping;
+  MappingFE<dim, spacedim>   mapping_fe(fe);
+
+  QGaussSimplex<dim - 1> quadrature(2);
+
+  UpdateFlags flags =
+    update_quadrature_points | update_JxW_values | update_jacobians |
+    update_jacobian_grads | update_inverse_jacobians |
+    update_jacobian_pushed_forward_grads | update_jacobian_2nd_derivatives |
+    update_jacobian_pushed_forward_2nd_derivatives |
+    update_jacobian_3rd_derivatives |
+    update_jacobian_pushed_forward_3rd_derivatives | update_boundary_forms;
+  if (dim == spacedim)
+    flags |= update_normal_vectors;
+
+  FEFaceValues<dim, spacedim> fe_values(mapping, fe, quadrature, flags);
+  FEFaceValues<dim, spacedim> fe_values_2(mapping_fe, fe, quadrature, flags);
+
+  for (const auto &cell : tria.active_cell_iterators())
+    {
+      deallog << std::endl;
+
+      deallog << "cell vertices" << std::endl;
+      for (const unsigned int vertex_no : cell->vertex_indices())
+        deallog << "  " << cell->vertex(vertex_no) << std::endl;
+      deallog << std::endl;
+
+      for (unsigned int face_no : cell->face_indices())
+        {
+          fe_values.reinit(cell, face_no);
+          fe_values_2.reinit(cell, face_no);
+
+          deallog << "JxW" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  " << fe_values.JxW(qp_n) << std::endl;
+
+              Assert(std::abs((fe_values.JxW(qp_n) - fe_values_2.JxW(qp_n))) <
+                       1e-12,
+                     ExcInternalError());
+            }
+          deallog << std::endl;
+
+          deallog << "quadrature points" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              const Point<dim> p = mapping.transform_real_to_unit_cell(
+                cell, fe_values.quadrature_point(qp_n));
+              deallog << "  " << p << " -> " << fe_values.quadrature_point(qp_n)
+                      << std::endl;
+              Assert(reference_cell.contains_point(p, 1e-12),
+                     ExcInternalError());
+
+              Assert((fe_values.quadrature_point(qp_n) -
+                      fe_values_2.quadrature_point(qp_n))
+                         .norm() < 1e-12,
+                     ExcInternalError());
+            }
+          deallog << std::endl;
+
+          deallog << "boundary forms" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << fe_values.normal_vector(qp_n) << std::endl;
+
+              Assert((fe_values.boundary_form(qp_n) -
+                      fe_values_2.boundary_form(qp_n))
+                         .norm() < 1e-12,
+                     ExcInternalError());
+            }
+          deallog << std::endl;
+
+          if constexpr (dim == spacedim)
+            {
+              deallog << "normal vectors" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << fe_values.normal_vector(qp_n) << std::endl;
+
+                  Assert((fe_values.normal_vector(qp_n) -
+                          fe_values_2.normal_vector(qp_n))
+                             .norm() < 1e-12,
+                         ExcInternalError());
+                }
+              deallog << std::endl;
+            }
+
+          deallog << "Jacobians" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  " << fe_values.jacobian(qp_n) << std::endl;
+
+              for (unsigned int d = 0; d < spacedim; ++d)
+                Assert((fe_values.jacobian(qp_n)[d] -
+                        fe_values_2.jacobian(qp_n)[d])
+                           .norm() < 1e-12,
+                       ExcInternalError());
+            }
+          deallog << std::endl;
+
+          deallog << "Jacobian gradients" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  all zero = "
+                      << (fe_values.jacobian_grad(qp_n).norm() == 0)
+                      << std::endl;
+
+              for (unsigned int d = 0; d < spacedim; ++d)
+                Assert((fe_values.jacobian_grad(qp_n)[d] -
+                        fe_values_2.jacobian_grad(qp_n)[d])
+                           .norm() < 1e-12,
+                       ExcInternalError());
+            }
+          deallog << std::endl;
+
+          deallog << "inverse jacobians" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  " << fe_values.inverse_jacobian(qp_n) << std::endl;
+
+              for (unsigned int d = 0; d < dim; ++d)
+                Assert((fe_values.inverse_jacobian(qp_n)[d] -
+                        fe_values_2.inverse_jacobian(qp_n)[d])
+                           .norm() < 1e-12,
+                       ExcInternalError());
+            }
+          deallog << std::endl;
+
+          deallog << "Jacobian push forward gradients" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  all zero = "
+                      << (fe_values.jacobian_pushed_forward_grad(qp_n).norm() ==
+                          0)
+                      << std::endl;
+            }
+          deallog << std::endl;
+
+          deallog << "Jacobian 2nd derivatives" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  all zero = "
+                      << (fe_values.jacobian_2nd_derivative(qp_n).norm() == 0)
+                      << std::endl;
+            }
+          deallog << std::endl;
+
+          deallog << "Jacobian push forward 2nd derivatives" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  all zero = "
+                      << (fe_values.jacobian_pushed_forward_2nd_derivative(qp_n)
+                            .norm() == 0)
+                      << std::endl;
+            }
+          deallog << std::endl;
+
+          deallog << "Jacobian 3rd derivatives" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  all zero = "
+                      << (fe_values.jacobian_3rd_derivative(qp_n).norm() == 0)
+                      << std::endl;
+            }
+          deallog << std::endl;
+
+          deallog << "Jacobian push forward 3rd derivatives" << std::endl;
+          for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+            {
+              deallog << "  all zero = "
+                      << (fe_values.jacobian_pushed_forward_3rd_derivative(qp_n)
+                            .norm() == 0)
+                      << std::endl;
+            }
+          deallog << std::endl;
+        }
+    }
+
+  deallog << std::endl;
+}
+
+int
+main()
+{
+  initlog();
+
+  test<1>();
+  test<1, 2>();
+  test<2>();
+  test<2, 3>();
+  test<3>();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/simplex/mapping_p1_02.output b/tests/simplex/mapping_p1_02.output
new file mode 100644 (file)
index 0000000..1529107
--- /dev/null
@@ -0,0 +1,2211 @@
+
+DEAL::MappingP1<1, 1>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000
+DEAL::  2.00000
+DEAL::
+DEAL::JxW
+DEAL::  1.00000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 -> 1.00000
+DEAL::
+DEAL::boundary forms
+DEAL::-1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::-1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  1.00000
+DEAL::
+DEAL::quadrature points
+DEAL::  1.00000 -> 2.00000
+DEAL::
+DEAL::boundary forms
+DEAL::1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<1, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 0.00000
+DEAL::  2.00000 0.00000
+DEAL::
+DEAL::JxW
+DEAL::  1.00000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 -> 1.00000 0.00000
+DEAL::
+DEAL::boundary forms
+DEAL::-1.00000 -0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000  0.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  1.00000
+DEAL::
+DEAL::quadrature points
+DEAL::  1.00000 -> 2.00000 0.00000
+DEAL::
+DEAL::boundary forms
+DEAL::1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000  0.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000
+DEAL::  2.00000 1.00000
+DEAL::  1.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.500000
+DEAL::  0.500000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 0.00000 -> 1.21132 1.00000
+DEAL::  0.788675 0.00000 -> 1.78868 1.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 -1.00000
+DEAL::0.00000 -1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 -1.00000
+DEAL::0.00000 -1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.707107
+DEAL::  0.707107
+DEAL::
+DEAL::quadrature points
+DEAL::  0.788675 0.211325 -> 1.78868 1.21132
+DEAL::  0.211325 0.788675 -> 1.21132 1.78868
+DEAL::
+DEAL::boundary forms
+DEAL::0.707107 0.707107
+DEAL::0.707107 0.707107
+DEAL::
+DEAL::normal vectors
+DEAL::0.707107 0.707107
+DEAL::0.707107 0.707107
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.500000
+DEAL::  0.500000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.788675 -> 1.00000 1.78868
+DEAL::  0.00000 0.211325 -> 1.00000 1.21132
+DEAL::
+DEAL::boundary forms
+DEAL::-1.00000 0.00000
+DEAL::-1.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::-1.00000 0.00000
+DEAL::-1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000
+DEAL::  1.00000 2.00000
+DEAL::  2.00000 1.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.500000
+DEAL::  0.500000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 0.00000 -> 1.78868 2.00000
+DEAL::  0.788675 0.00000 -> 1.21132 2.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 1.00000
+DEAL::0.00000 1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 1.00000
+DEAL::0.00000 1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.707107
+DEAL::  0.707107
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 0.788675 -> 1.78868 1.21132
+DEAL::  0.788675 0.211325 -> 1.21132 1.78868
+DEAL::
+DEAL::boundary forms
+DEAL::-0.707107 -0.707107
+DEAL::-0.707107 -0.707107
+DEAL::
+DEAL::normal vectors
+DEAL::-0.707107 -0.707107
+DEAL::-0.707107 -0.707107
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.500000
+DEAL::  0.500000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.788675 -> 2.00000 1.21132
+DEAL::  0.00000 0.211325 -> 2.00000 1.78868
+DEAL::
+DEAL::boundary forms
+DEAL::1.00000 0.00000
+DEAL::1.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::1.00000 0.00000
+DEAL::1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 3.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::
+DEAL::JxW
+DEAL::  1.58114
+DEAL::  1.58114
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 0.00000 -> 1.21132 1.00000 3.63397
+DEAL::  0.788675 1.11022e-16 -> 1.78868 1.00000 5.36603
+DEAL::
+DEAL::boundary forms
+DEAL::0.652929 -0.725476 -0.217643
+DEAL::0.652929 -0.725476 -0.217643
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.707107
+DEAL::  0.707107
+DEAL::
+DEAL::quadrature points
+DEAL::  0.788675 0.211325 -> 1.78868 1.21132 6.00000
+DEAL::  0.211325 0.788675 -> 1.21132 1.78868 6.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.162221 0.162221 0.973329
+DEAL::0.162221 0.162221 0.973329
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  1.58114
+DEAL::  1.58114
+DEAL::
+DEAL::quadrature points
+DEAL::  1.11022e-16 0.788675 -> 1.00000 1.78868 5.36603
+DEAL::  6.93889e-17 0.211325 -> 1.00000 1.21132 3.63397
+DEAL::
+DEAL::boundary forms
+DEAL::-0.725476 0.652929 -0.217643
+DEAL::-0.725476 0.652929 -0.217643
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000 9.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::
+DEAL::JxW
+DEAL::  1.58114
+DEAL::  1.58114
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 -6.93889e-17 -> 1.78868 2.00000 8.36603
+DEAL::  0.788675 1.11022e-16 -> 1.21132 2.00000 6.63397
+DEAL::
+DEAL::boundary forms
+DEAL::-0.652929 0.725476 0.217643
+DEAL::-0.652929 0.725476 0.217643
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.707107
+DEAL::  0.707107
+DEAL::
+DEAL::quadrature points
+DEAL::  0.211325 0.788675 -> 1.78868 1.21132 6.00000
+DEAL::  0.788675 0.211325 -> 1.21132 1.78868 6.00000
+DEAL::
+DEAL::boundary forms
+DEAL::-0.162221 -0.162221 -0.973329
+DEAL::-0.162221 -0.162221 -0.973329
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  1.58114
+DEAL::  1.58114
+DEAL::
+DEAL::quadrature points
+DEAL::  1.11022e-16 0.788675 -> 2.00000 1.21132 6.63397
+DEAL::  -6.93889e-17 0.211325 -> 2.00000 1.78868 8.36603
+DEAL::
+DEAL::boundary forms
+DEAL::0.725476 -0.652929 0.217643
+DEAL::0.725476 -0.652929 0.217643
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<3, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 0.00000 -> 1.17856 1.15505 1.00000
+DEAL::  0.0750311 0.644949 0.00000 -> 1.07503 1.64495 1.00000
+DEAL::  0.666390 0.155051 0.00000 -> 1.66639 1.15505 1.00000
+DEAL::  0.280020 0.644949 0.00000 -> 1.28002 1.64495 1.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.666390 0.00000 0.155051 -> 1.66639 1.00000 1.15505
+DEAL::  0.280020 0.00000 0.644949 -> 1.28002 1.00000 1.64495
+DEAL::  0.178559 0.00000 0.155051 -> 1.17856 1.00000 1.15505
+DEAL::  0.0750311 0.00000 0.644949 -> 1.07503 1.00000 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.178559 0.155051 -> 1.00000 1.17856 1.15505
+DEAL::  0.00000 0.0750311 0.644949 -> 1.00000 1.07503 1.64495
+DEAL::  0.00000 0.666390 0.155051 -> 1.00000 1.66639 1.15505
+DEAL::  0.00000 0.280020 0.644949 -> 1.00000 1.28002 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.666390 0.155051 -> 1.17856 1.66639 1.15505
+DEAL::  0.0750311 0.280020 0.644949 -> 1.07503 1.28002 1.64495
+DEAL::  0.666390 0.178559 0.155051 -> 1.66639 1.17856 1.15505
+DEAL::  0.280020 0.0750311 0.644949 -> 1.28002 1.07503 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::0.577350 0.577350 0.577350
+DEAL::0.577350 0.577350 0.577350
+DEAL::0.577350 0.577350 0.577350
+DEAL::0.577350 0.577350 0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::0.577350 0.577350 0.577350
+DEAL::0.577350 0.577350 0.577350
+DEAL::0.577350 0.577350 0.577350
+DEAL::0.577350 0.577350 0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 0.00000 0.00000  0.00000 1.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  2.00000 2.00000 1.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 0.00000 -> 1.33361 1.82144 1.00000
+DEAL::  0.0750311 0.644949 0.00000 -> 1.71998 1.92497 1.00000
+DEAL::  0.666390 0.155051 0.00000 -> 1.82144 1.33361 1.00000
+DEAL::  0.280020 0.644949 0.00000 -> 1.92497 1.71998 1.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::0.00000 0.00000 -1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.666390 2.22045e-16 0.155051 -> 1.82144 1.33361 1.15505
+DEAL::  0.280020 0.00000 0.644949 -> 1.92497 1.71998 1.64495
+DEAL::  0.178559 2.22045e-16 0.155051 -> 1.33361 1.82144 1.15505
+DEAL::  0.0750311 0.00000 0.644949 -> 1.71998 1.92497 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::-0.577350 -0.577350 0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.178559 0.155051 -> 1.33361 2.00000 1.15505
+DEAL::  0.00000 0.0750311 0.644949 -> 1.71998 2.00000 1.64495
+DEAL::  0.00000 0.666390 0.155051 -> 1.82144 2.00000 1.15505
+DEAL::  0.00000 0.280020 0.644949 -> 1.92497 2.00000 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.666390 0.155051 -> 2.00000 1.82144 1.15505
+DEAL::  0.0750311 0.280020 0.644949 -> 2.00000 1.92497 1.64495
+DEAL::  0.666390 0.178559 0.155051 -> 2.00000 1.33361 1.15505
+DEAL::  0.280020 0.0750311 0.644949 -> 2.00000 1.71998 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::  1.00000 1.00000 1.00000  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 1.00000 -1.00000  -0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 0.00000 -> 1.82144 1.00000 1.33361
+DEAL::  0.0750311 0.644949 0.00000 -> 1.92497 1.00000 1.71998
+DEAL::  0.666390 0.155051 0.00000 -> 1.33361 1.00000 1.82144
+DEAL::  0.280020 0.644949 0.00000 -> 1.71998 1.00000 1.92497
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.666390 2.22045e-16 0.155051 -> 1.33361 1.15505 1.82144
+DEAL::  0.280020 0.00000 0.644949 -> 1.71998 1.64495 1.92497
+DEAL::  0.178559 2.22045e-16 0.155051 -> 1.82144 1.15505 1.33361
+DEAL::  0.0750311 0.00000 0.644949 -> 1.92497 1.64495 1.71998
+DEAL::
+DEAL::boundary forms
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::-0.577350 0.577350 -0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.178559 0.155051 -> 2.00000 1.15505 1.33361
+DEAL::  0.00000 0.0750311 0.644949 -> 2.00000 1.64495 1.71998
+DEAL::  0.00000 0.666390 0.155051 -> 2.00000 1.15505 1.82144
+DEAL::  0.00000 0.280020 0.644949 -> 2.00000 1.64495 1.92497
+DEAL::
+DEAL::boundary forms
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::1.00000 0.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.666390 0.155051 -> 1.82144 1.15505 2.00000
+DEAL::  0.0750311 0.280020 0.644949 -> 1.92497 1.64495 2.00000
+DEAL::  0.666390 0.178559 0.155051 -> 1.33361 1.15505 2.00000
+DEAL::  0.280020 0.0750311 0.644949 -> 1.71998 1.64495 2.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::  -1.00000 0.00000 0.00000  0.00000 0.00000 1.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::  -1.00000 0.00000 0.00000  1.00000 -1.00000 1.00000  0.00000 1.00000 -0.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::  1.00000 2.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.155051 0.00000 -> 1.15505 1.82144 1.33361
+DEAL::  0.0750311 0.644949 -2.22045e-16 -> 1.64495 1.92497 1.71998
+DEAL::  0.666390 0.155051 2.22045e-16 -> 1.15505 1.33361 1.82144
+DEAL::  0.280020 0.644949 -2.22045e-16 -> 1.64495 1.71998 1.92497
+DEAL::
+DEAL::boundary forms
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::0.577350 -0.577350 -0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.666390 0.00000 0.155051 -> 1.00000 1.33361 1.82144
+DEAL::  0.280020 0.00000 0.644949 -> 1.00000 1.71998 1.92497
+DEAL::  0.178559 0.00000 0.155051 -> 1.00000 1.82144 1.33361
+DEAL::  0.0750311 0.00000 0.644949 -> 1.00000 1.92497 1.71998
+DEAL::
+DEAL::boundary forms
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::-1.00000 0.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.178559 0.155051 -> 1.17856 2.00000 1.33361
+DEAL::  0.00000 0.0750311 0.644949 -> 1.07503 2.00000 1.71998
+DEAL::  0.00000 0.666390 0.155051 -> 1.66639 2.00000 1.82144
+DEAL::  0.00000 0.280020 0.644949 -> 1.28002 2.00000 1.92497
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::  0.159021
+DEAL::  0.0909793
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.666390 0.155051 -> 1.66639 1.82144 2.00000
+DEAL::  0.0750311 0.280020 0.644949 -> 1.28002 1.92497 2.00000
+DEAL::  0.666390 0.178559 0.155051 -> 1.17856 1.33361 2.00000
+DEAL::  0.280020 0.0750311 0.644949 -> 1.07503 1.71998 2.00000
+DEAL::
+DEAL::boundary forms
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 0.00000 1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::  0.00000 1.00000 0.00000  -1.00000 0.00000 0.00000  1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::  0.00000 -1.00000 0.00000  1.00000 0.00000 -0.00000  -1.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.666390 0.155051 -1.11022e-16 -> 1.17856 1.66639 1.15505
+DEAL::  0.280020 0.644949 0.00000 -> 1.07503 1.28002 1.64495
+DEAL::  0.178559 0.155051 -1.11022e-16 -> 1.66639 1.17856 1.15505
+DEAL::  0.0750311 0.644949 0.00000 -> 1.28002 1.07503 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::-0.577350 -0.577350 -0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.178559 0.00000 0.155051 -> 1.82144 1.33361 1.15505
+DEAL::  0.0750311 1.11022e-16 0.644949 -> 1.92497 1.71998 1.64495
+DEAL::  0.666390 -1.11022e-16 0.155051 -> 1.33361 1.82144 1.15505
+DEAL::  0.280020 1.11022e-16 0.644949 -> 1.71998 1.92497 1.64495
+DEAL::
+DEAL::boundary forms
+DEAL::0.577350 0.577350 -0.577350
+DEAL::0.577350 0.577350 -0.577350
+DEAL::0.577350 0.577350 -0.577350
+DEAL::0.577350 0.577350 -0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::0.577350 0.577350 -0.577350
+DEAL::0.577350 0.577350 -0.577350
+DEAL::0.577350 0.577350 -0.577350
+DEAL::0.577350 0.577350 -0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  -1.11022e-16 0.666390 0.155051 -> 1.33361 1.15505 1.82144
+DEAL::  0.00000 0.280020 0.644949 -> 1.71998 1.64495 1.92497
+DEAL::  -1.11022e-16 0.178559 0.155051 -> 1.82144 1.15505 1.33361
+DEAL::  0.00000 0.0750311 0.644949 -> 1.92497 1.64495 1.71998
+DEAL::
+DEAL::boundary forms
+DEAL::0.577350 -0.577350 0.577350
+DEAL::0.577350 -0.577350 0.577350
+DEAL::0.577350 -0.577350 0.577350
+DEAL::0.577350 -0.577350 0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::0.577350 -0.577350 0.577350
+DEAL::0.577350 -0.577350 0.577350
+DEAL::0.577350 -0.577350 0.577350
+DEAL::0.577350 -0.577350 0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::  0.275432
+DEAL::  0.157581
+DEAL::
+DEAL::quadrature points
+DEAL::  0.666390 0.178559 0.155051 -> 1.15505 1.82144 1.33361
+DEAL::  0.280020 0.0750311 0.644949 -> 1.64495 1.92497 1.71998
+DEAL::  0.178559 0.666390 0.155051 -> 1.15505 1.33361 1.82144
+DEAL::  0.0750311 0.280020 0.644949 -> 1.64495 1.71998 1.92497
+DEAL::
+DEAL::boundary forms
+DEAL::-0.577350 0.577350 0.577350
+DEAL::-0.577350 0.577350 0.577350
+DEAL::-0.577350 0.577350 0.577350
+DEAL::-0.577350 0.577350 0.577350
+DEAL::
+DEAL::normal vectors
+DEAL::-0.577350 0.577350 0.577350
+DEAL::-0.577350 0.577350 0.577350
+DEAL::-0.577350 0.577350 0.577350
+DEAL::-0.577350 0.577350 0.577350
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::  -1.00000 -1.00000 0.00000  1.00000 0.00000 1.00000  0.00000 1.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::  -0.500000 0.500000 -0.500000  -0.500000 -0.500000 0.500000  0.500000 0.500000 0.500000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::OK
diff --git a/tests/simplex/mapping_p1_03.cc b/tests/simplex/mapping_p1_03.cc
new file mode 100644 (file)
index 0000000..ce00e89
--- /dev/null
@@ -0,0 +1,261 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_simplex_p.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_fe.h>
+#include <deal.II/fe/mapping_p1.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_tools_topology.h>
+#include <deal.II/grid/tria.h>
+
+#include "../tests.h"
+
+
+// Test MappingP1's subface values by comparing with MappingFE.
+
+using namespace dealii;
+
+template <int dim, int spacedim = dim>
+void
+test()
+{
+  deallog << "MappingP1<" << dim << ", " << spacedim << ">" << std::endl;
+
+  const auto reference_cell = ReferenceCells::get_simplex<dim>();
+
+  Triangulation<dim, spacedim> tria;
+  if constexpr (dim == 1)
+    GridGenerator::subdivided_hyper_cube(tria, 1, 1.0, 2.0, true);
+  else if constexpr (dim == 2 && spacedim == 3)
+    {
+      Triangulation<dim> tria_2d;
+      GridGenerator::subdivided_hyper_cube_with_simplices(
+        tria_2d, 1, 1.0, 2.0, true);
+      std::vector<Point<dim>>    points_2d;
+      std::vector<CellData<dim>> cell_data;
+      SubCellData                subcell_data;
+      std::tie(points_2d, cell_data, subcell_data) =
+        GridTools::get_coarse_mesh_description(tria_2d);
+
+      std::vector<Point<spacedim>> points_3d;
+      for (const auto &p : points_2d)
+        points_3d.emplace_back(p[0], p[1], 1.0 + p[0] * p[0] + p[1] * p[1]);
+
+      tria.create_triangulation(points_3d, cell_data, subcell_data);
+    }
+  else
+    GridGenerator::subdivided_hyper_cube_with_simplices(
+      tria, 1, 1.0, 2.0, true);
+  FE_SimplexP<dim, spacedim> fe(1);
+  MappingP1<dim, spacedim>   mapping;
+  MappingFE<dim, spacedim>   mapping_fe(fe);
+
+  QGaussSimplex<dim - 1> quadrature(2);
+
+  UpdateFlags flags =
+    update_quadrature_points | update_JxW_values | update_jacobians |
+    update_jacobian_grads | update_inverse_jacobians |
+    update_jacobian_pushed_forward_grads | update_jacobian_2nd_derivatives |
+    update_jacobian_pushed_forward_2nd_derivatives |
+    update_jacobian_3rd_derivatives |
+    update_jacobian_pushed_forward_3rd_derivatives;
+  if (dim == spacedim)
+    flags |= update_normal_vectors;
+
+  FESubfaceValues<dim, spacedim> fe_values(mapping, fe, quadrature, flags);
+  FESubfaceValues<dim, spacedim> fe_values_2(mapping_fe, fe, quadrature, flags);
+
+  // Same as the other tests: bypass the check for whether or not the current
+  // face actually has children by using a DoFHandler instead of a Triangulation
+  DoFHandler<dim, spacedim> dof_handler(tria);
+  dof_handler.distribute_dofs(fe);
+
+  for (const auto &cell : dof_handler.active_cell_iterators())
+    {
+      deallog << std::endl;
+
+      deallog << "cell vertices" << std::endl;
+      for (const unsigned int vertex_no : cell->vertex_indices())
+        deallog << "  " << cell->vertex(vertex_no) << std::endl;
+      deallog << std::endl;
+
+      for (unsigned int face_no : cell->face_indices())
+        {
+          for (unsigned int subface_no = 0; subface_no < (dim == 2 ? 2 : 4);
+               ++subface_no)
+
+            {
+              fe_values.reinit(cell, face_no, subface_no);
+              fe_values_2.reinit(cell, face_no, subface_no);
+
+              deallog << "JxW" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  " << fe_values.JxW(qp_n) << std::endl;
+
+                  Assert(std::abs((fe_values.JxW(qp_n) -
+                                   fe_values_2.JxW(qp_n))) < 1e-12,
+                         ExcInternalError());
+                }
+              deallog << std::endl;
+
+              deallog << "quadrature points" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  const Point<dim> p = mapping.transform_real_to_unit_cell(
+                    cell, fe_values.quadrature_point(qp_n));
+                  deallog << "  " << p << " -> "
+                          << fe_values.quadrature_point(qp_n) << std::endl;
+                  Assert(reference_cell.contains_point(p, 1e-12),
+                         ExcInternalError());
+
+                  Assert((fe_values.quadrature_point(qp_n) -
+                          fe_values_2.quadrature_point(qp_n))
+                             .norm() < 1e-12,
+                         ExcInternalError());
+                }
+              deallog << std::endl;
+
+              if constexpr (dim == spacedim)
+                {
+                  deallog << "normal vectors" << std::endl;
+                  for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                    {
+                      deallog << fe_values.normal_vector(qp_n) << std::endl;
+
+                      Assert((fe_values.normal_vector(qp_n) -
+                              fe_values_2.normal_vector(qp_n))
+                                 .norm() < 1e-12,
+                             ExcInternalError());
+                    }
+                  deallog << std::endl;
+                }
+
+              deallog << "Jacobians" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  " << fe_values.jacobian(qp_n) << std::endl;
+
+                  for (unsigned int d = 0; d < spacedim; ++d)
+                    Assert((fe_values.jacobian(qp_n)[d] -
+                            fe_values_2.jacobian(qp_n)[d])
+                               .norm() < 1e-12,
+                           ExcInternalError());
+                }
+              deallog << std::endl;
+
+              deallog << "Jacobian gradients" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  all zero = "
+                          << (fe_values.jacobian_grad(qp_n).norm() == 0)
+                          << std::endl;
+
+                  for (unsigned int d = 0; d < spacedim; ++d)
+                    Assert((fe_values.jacobian_grad(qp_n)[d] -
+                            fe_values_2.jacobian_grad(qp_n)[d])
+                               .norm() < 1e-12,
+                           ExcInternalError());
+                }
+              deallog << std::endl;
+
+              deallog << "inverse jacobians" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  " << fe_values.inverse_jacobian(qp_n)
+                          << std::endl;
+
+                  for (unsigned int d = 0; d < dim; ++d)
+                    Assert((fe_values.inverse_jacobian(qp_n)[d] -
+                            fe_values_2.inverse_jacobian(qp_n)[d])
+                               .norm() < 1e-12,
+                           ExcInternalError());
+                }
+              deallog << std::endl;
+
+              deallog << "Jacobian push forward gradients" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  all zero = "
+                          << (fe_values.jacobian_pushed_forward_grad(qp_n)
+                                .norm() == 0)
+                          << std::endl;
+                }
+              deallog << std::endl;
+
+              deallog << "Jacobian 2nd derivatives" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  all zero = "
+                          << (fe_values.jacobian_2nd_derivative(qp_n).norm() ==
+                              0)
+                          << std::endl;
+                }
+              deallog << std::endl;
+
+              deallog << "Jacobian push forward 2nd derivatives" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  all zero = "
+                          << (fe_values
+                                .jacobian_pushed_forward_2nd_derivative(qp_n)
+                                .norm() == 0)
+                          << std::endl;
+                }
+              deallog << std::endl;
+
+              deallog << "Jacobian 3rd derivatives" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  all zero = "
+                          << (fe_values.jacobian_3rd_derivative(qp_n).norm() ==
+                              0)
+                          << std::endl;
+                }
+              deallog << std::endl;
+
+              deallog << "Jacobian push forward 3rd derivatives" << std::endl;
+              for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+                {
+                  deallog << "  all zero = "
+                          << (fe_values
+                                .jacobian_pushed_forward_3rd_derivative(qp_n)
+                                .norm() == 0)
+                          << std::endl;
+                }
+              deallog << std::endl;
+            }
+        }
+    }
+
+  deallog << std::endl;
+}
+
+int
+main()
+{
+  initlog();
+
+  test<2>();
+  test<2, 3>();
+  // At the present time we do not support tetrahedral subfaces
+  // test<3>();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/simplex/mapping_p1_03.output b/tests/simplex/mapping_p1_03.output
new file mode 100644 (file)
index 0000000..6c1f12f
--- /dev/null
@@ -0,0 +1,1038 @@
+
+DEAL::MappingP1<2, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000
+DEAL::  2.00000 1.00000
+DEAL::  1.00000 2.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.105662 0.00000 -> 1.10566 1.00000
+DEAL::  0.394338 0.00000 -> 1.39434 1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 -1.00000
+DEAL::0.00000 -1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.605662 0.00000 -> 1.60566 1.00000
+DEAL::  0.894338 0.00000 -> 1.89434 1.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 -1.00000
+DEAL::0.00000 -1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.894338 0.105662 -> 1.89434 1.10566
+DEAL::  0.605662 0.394338 -> 1.60566 1.39434
+DEAL::
+DEAL::normal vectors
+DEAL::0.707107 0.707107
+DEAL::0.707107 0.707107
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.394338 0.605662 -> 1.39434 1.60566
+DEAL::  0.105662 0.894338 -> 1.10566 1.89434
+DEAL::
+DEAL::normal vectors
+DEAL::0.707107 0.707107
+DEAL::0.707107 0.707107
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.894338 -> 1.00000 1.89434
+DEAL::  0.00000 0.605662 -> 1.00000 1.60566
+DEAL::
+DEAL::normal vectors
+DEAL::-1.00000 0.00000
+DEAL::-1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.394338 -> 1.00000 1.39434
+DEAL::  0.00000 0.105662 -> 1.00000 1.10566
+DEAL::
+DEAL::normal vectors
+DEAL::-1.00000 0.00000
+DEAL::-1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::  1.00000 -0.00000  -0.00000 1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000
+DEAL::  1.00000 2.00000
+DEAL::  2.00000 1.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.105662 0.00000 -> 1.89434 2.00000
+DEAL::  0.394338 0.00000 -> 1.60566 2.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 1.00000
+DEAL::0.00000 1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.605662 0.00000 -> 1.39434 2.00000
+DEAL::  0.894338 0.00000 -> 1.10566 2.00000
+DEAL::
+DEAL::normal vectors
+DEAL::0.00000 1.00000
+DEAL::0.00000 1.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.105662 0.894338 -> 1.89434 1.10566
+DEAL::  0.394338 0.605662 -> 1.60566 1.39434
+DEAL::
+DEAL::normal vectors
+DEAL::-0.707107 -0.707107
+DEAL::-0.707107 -0.707107
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.605662 0.394338 -> 1.39434 1.60566
+DEAL::  0.894338 0.105662 -> 1.10566 1.89434
+DEAL::
+DEAL::normal vectors
+DEAL::-0.707107 -0.707107
+DEAL::-0.707107 -0.707107
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.894338 -> 2.00000 1.10566
+DEAL::  0.00000 0.605662 -> 2.00000 1.39434
+DEAL::
+DEAL::normal vectors
+DEAL::1.00000 0.00000
+DEAL::1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.250000
+DEAL::  0.250000
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.394338 -> 2.00000 1.60566
+DEAL::  0.00000 0.105662 -> 2.00000 1.89434
+DEAL::
+DEAL::normal vectors
+DEAL::1.00000 0.00000
+DEAL::1.00000 0.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::  -1.00000 -0.00000  -0.00000 -1.00000
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 3.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  0.105662 9.02056e-17 -> 1.10566 1.00000 3.31699
+DEAL::  0.394338 -5.55112e-17 -> 1.39434 1.00000 4.18301
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  0.605662 2.22045e-16 -> 1.60566 1.00000 4.81699
+DEAL::  0.894338 0.00000 -> 1.89434 1.00000 5.68301
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.894338 0.105662 -> 1.89434 1.10566 6.00000
+DEAL::  0.605662 0.394338 -> 1.60566 1.39434 6.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.394338 0.605662 -> 1.39434 1.60566 6.00000
+DEAL::  0.105662 0.894338 -> 1.10566 1.89434 6.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.894338 -> 1.00000 1.89434 5.68301
+DEAL::  2.22045e-16 0.605662 -> 1.00000 1.60566 4.81699
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  -5.55112e-17 0.394338 -> 1.00000 1.39434 4.18301
+DEAL::  9.02056e-17 0.105662 -> 1.00000 1.10566 3.31699
+DEAL::
+DEAL::Jacobians
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::  1.00000 0.00000  0.00000 1.00000  3.00000 3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::  0.526316 -0.473684 0.157895  -0.473684 0.526316 0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000 9.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  0.105662 1.59595e-16 -> 1.89434 2.00000 8.68301
+DEAL::  0.394338 -5.55112e-17 -> 1.60566 2.00000 7.81699
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  0.605662 2.22045e-16 -> 1.39434 2.00000 7.18301
+DEAL::  0.894338 0.00000 -> 1.10566 2.00000 6.31699
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.105662 0.894338 -> 1.89434 1.10566 6.00000
+DEAL::  0.394338 0.605662 -> 1.60566 1.39434 6.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.353553
+DEAL::  0.353553
+DEAL::
+DEAL::quadrature points
+DEAL::  0.605662 0.394338 -> 1.39434 1.60566 6.00000
+DEAL::  0.894338 0.105662 -> 1.10566 1.89434 6.00000
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  0.00000 0.894338 -> 2.00000 1.10566 6.31699
+DEAL::  2.22045e-16 0.605662 -> 2.00000 1.39434 7.18301
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::JxW
+DEAL::  0.790569
+DEAL::  0.790569
+DEAL::
+DEAL::quadrature points
+DEAL::  -5.55112e-17 0.394338 -> 2.00000 1.60566 7.81699
+DEAL::  1.59595e-16 0.105662 -> 2.00000 1.89434 8.68301
+DEAL::
+DEAL::Jacobians
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::  -1.00000 0.00000  0.00000 -1.00000  -3.00000 -3.00000
+DEAL::
+DEAL::Jacobian gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::inverse jacobians
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::  -0.526316 0.473684 -0.157895  0.473684 -0.526316 -0.157895
+DEAL::
+DEAL::Jacobian push forward gradients
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 2nd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::Jacobian push forward 3rd derivatives
+DEAL::  all zero = 1
+DEAL::  all zero = 1
+DEAL::
+DEAL::
+DEAL::OK
diff --git a/tests/simplex/mapping_p1_04.cc b/tests/simplex/mapping_p1_04.cc
new file mode 100644 (file)
index 0000000..315d588
--- /dev/null
@@ -0,0 +1,168 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_simplex_p.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_fe.h>
+#include <deal.II/fe/mapping_p1.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_tools_topology.h>
+#include <deal.II/grid/tria.h>
+
+#include "../tests.h"
+
+
+// Test MappingP1's cell values for FE quantities by comparing with MappingFE.
+
+using namespace dealii;
+
+template <int dim, int spacedim = dim>
+void
+test()
+{
+  deallog << "MappingP1<" << dim << ", " << spacedim << ">" << std::endl;
+
+  const auto reference_cell = ReferenceCells::get_simplex<dim>();
+
+  Triangulation<dim, spacedim> tria;
+  if constexpr (dim == 1)
+    GridGenerator::subdivided_hyper_cube(tria, 1, 1.0, 2.0, true);
+  else if constexpr (dim == 2 && spacedim == 3)
+    {
+      Triangulation<dim> tria_2d;
+      GridGenerator::subdivided_hyper_cube_with_simplices(
+        tria_2d, 1, 1.0, 2.0, true);
+      std::vector<Point<dim>>    points_2d;
+      std::vector<CellData<dim>> cell_data;
+      SubCellData                subcell_data;
+      std::tie(points_2d, cell_data, subcell_data) =
+        GridTools::get_coarse_mesh_description(tria_2d);
+
+      std::vector<Point<spacedim>> points_3d;
+      for (const auto &p : points_2d)
+        points_3d.emplace_back(p[0], p[1], 1.0 + p[0] * p[0] + p[1] * p[1]);
+
+      tria.create_triangulation(points_3d, cell_data, subcell_data);
+    }
+  else
+    GridGenerator::subdivided_hyper_cube_with_simplices(
+      tria, 1, 1.0, 2.0, true);
+  FE_SimplexP<dim, spacedim> fe(3);
+  MappingP1<dim, spacedim>   mapping;
+  MappingFE<dim, spacedim>   mapping_fe(fe);
+
+  QGaussSimplex<dim> quadrature(2);
+
+  UpdateFlags flags =
+    update_values | update_gradients | update_hessians | update_3rd_derivatives;
+
+  FEValues<dim, spacedim> fe_values(mapping, fe, quadrature, flags);
+  FEValues<dim, spacedim> fe_values_2(mapping_fe, fe, quadrature, flags);
+
+  for (const auto &cell : tria.active_cell_iterators())
+    {
+      deallog << std::endl;
+      fe_values.reinit(cell);
+      fe_values_2.reinit(cell);
+
+      deallog << "cell vertices" << std::endl;
+      for (const unsigned int vertex_no : cell->vertex_indices())
+        deallog << "  " << cell->vertex(vertex_no) << std::endl;
+      deallog << std::endl;
+
+      deallog << "shape_values" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          for (unsigned int i = 0; i < fe.dofs_per_cell; ++i)
+            {
+              // here and below, only print out values for a single shape
+              // function so that the output isn't tens of thousands of lines
+              // long
+              if (i == fe.dofs_per_cell / 2)
+                deallog << "  " << fe_values.shape_value(i, qp_n) << std::endl;
+              Assert(std::abs(fe_values.shape_value(i, qp_n) -
+                              fe_values_2.shape_value(i, qp_n)) < 1e-12,
+                     ExcInternalError());
+            }
+        }
+      deallog << std::endl;
+
+      deallog << "shape_gradients" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          for (unsigned int i = 0; i < fe.dofs_per_cell; ++i)
+            {
+              if (i == fe.dofs_per_cell / 2)
+                deallog << "  " << fe_values.shape_grad(i, qp_n) << std::endl;
+              Assert((fe_values.shape_grad(i, qp_n) -
+                      fe_values_2.shape_grad(i, qp_n))
+                         .norm() < 1e-12,
+                     ExcInternalError());
+            }
+        }
+      deallog << std::endl;
+
+      deallog << "shape_hessians" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          for (unsigned int i = 0; i < fe.dofs_per_cell; ++i)
+            {
+              if (i == fe.dofs_per_cell / 2)
+                deallog << "  " << fe_values.shape_hessian(i, qp_n)
+                        << std::endl;
+              Assert((fe_values.shape_hessian(i, qp_n) -
+                      fe_values_2.shape_hessian(i, qp_n))
+                         .norm() < 1e-12,
+                     ExcInternalError());
+            }
+        }
+      deallog << std::endl;
+
+      deallog << "shape_3rd_derivatives" << std::endl;
+      for (unsigned int qp_n = 0; qp_n < quadrature.size(); ++qp_n)
+        {
+          for (unsigned int i = 0; i < fe.dofs_per_cell; ++i)
+            {
+              if (i == fe.dofs_per_cell / 2)
+                deallog << "  " << fe_values.shape_3rd_derivative(i, qp_n)
+                        << std::endl;
+              Assert((fe_values.shape_3rd_derivative(i, qp_n) -
+                      fe_values_2.shape_3rd_derivative(i, qp_n))
+                         .norm() < 1e-08,
+                     ExcInternalError());
+            }
+        }
+      deallog << std::endl;
+    }
+
+  deallog << std::endl;
+}
+
+int
+main()
+{
+  initlog();
+
+  test<1>();
+  test<1, 2>();
+  test<2>();
+  test<2, 3>();
+  test<3>();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/simplex/mapping_p1_04.output b/tests/simplex/mapping_p1_04.output
new file mode 100644 (file)
index 0000000..46c7bbb
--- /dev/null
@@ -0,0 +1,369 @@
+
+DEAL::MappingP1<1, 1>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000
+DEAL::  2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  1.02452
+DEAL::  -0.274519
+DEAL::
+DEAL::shape_gradients
+DEAL::  1.29904
+DEAL::  -1.29904
+DEAL::
+DEAL::shape_hessians
+DEAL::  -27.8827
+DEAL::  18.8827
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  81.0000
+DEAL::  81.0000
+DEAL::
+DEAL::
+DEAL::MappingP1<1, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 0.00000
+DEAL::  2.00000 0.00000
+DEAL::
+DEAL::shape_values
+DEAL::  1.02452
+DEAL::  -0.274519
+DEAL::
+DEAL::shape_gradients
+DEAL::  1.29904 0.00000
+DEAL::  -1.29904 -0.00000
+DEAL::
+DEAL::shape_hessians
+DEAL::  -27.8827 -0.00000  -0.00000 -0.00000
+DEAL::  18.8827 0.00000  0.00000 0.00000
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  81.0000 0.00000  0.00000 0.00000   0.00000 0.00000  0.00000 0.00000
+DEAL::  81.0000 0.00000  0.00000 0.00000   0.00000 0.00000  0.00000 0.00000
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000
+DEAL::  2.00000 1.00000
+DEAL::  1.00000 2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  -0.0578481
+DEAL::  -0.168744
+DEAL::  0.464575
+DEAL::  -0.129982
+DEAL::
+DEAL::shape_gradients
+DEAL::  0.0497847 -0.373091
+DEAL::  -1.59571 -0.261639
+DEAL::  2.09203 2.99627
+DEAL::  1.97389 -0.201539
+DEAL::
+DEAL::shape_hessians
+DEAL::  4.18638 0.321086  0.321086 0.00000
+DEAL::  17.4136 -2.47416  -2.47416 0.00000
+DEAL::  4.18638 13.4925  13.4925 0.00000
+DEAL::  17.4136 3.06054  3.06054 0.00000
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  0.00000 27.0000  27.0000 0.00000   27.0000 0.00000  0.00000 0.00000
+DEAL::  0.00000 27.0000  27.0000 0.00000   27.0000 0.00000  0.00000 0.00000
+DEAL::  0.00000 27.0000  27.0000 0.00000   27.0000 0.00000  0.00000 0.00000
+DEAL::  0.00000 27.0000  27.0000 0.00000   27.0000 0.00000  0.00000 0.00000
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000
+DEAL::  1.00000 2.00000
+DEAL::  2.00000 1.00000
+DEAL::
+DEAL::shape_values
+DEAL::  -0.0578481
+DEAL::  -0.168744
+DEAL::  0.464575
+DEAL::  -0.129982
+DEAL::
+DEAL::shape_gradients
+DEAL::  -0.0497847 0.373091
+DEAL::  1.59571 0.261639
+DEAL::  -2.09203 -2.99627
+DEAL::  -1.97389 0.201539
+DEAL::
+DEAL::shape_hessians
+DEAL::  4.18638 0.321086  0.321086 0.00000
+DEAL::  17.4136 -2.47416  -2.47416 -0.00000
+DEAL::  4.18638 13.4925  13.4925 0.00000
+DEAL::  17.4136 3.06054  3.06054 0.00000
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  -0.00000 -27.0000  -27.0000 -0.00000   -27.0000 -0.00000  -0.00000 -0.00000
+DEAL::  -0.00000 -27.0000  -27.0000 -0.00000   -27.0000 -0.00000  -0.00000 -0.00000
+DEAL::  -0.00000 -27.0000  -27.0000 -0.00000   -27.0000 -0.00000  -0.00000 -0.00000
+DEAL::  -0.00000 -27.0000  -27.0000 -0.00000   -27.0000 -0.00000  -0.00000 -0.00000
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 3.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::
+DEAL::shape_values
+DEAL::  -0.0578481
+DEAL::  -0.168744
+DEAL::  0.464575
+DEAL::  -0.129982
+DEAL::
+DEAL::shape_gradients
+DEAL::  0.202930 -0.219946 -0.0510483
+DEAL::  -0.715911 0.618156 -0.293265
+DEAL::  -0.318216 0.586022 0.803416
+DEAL::  1.13436 -1.04107 0.279845
+DEAL::
+DEAL::shape_hessians
+DEAL::  0.999563 -0.882708 0.350567  -0.882708 0.779228 -0.310440  0.350567 -0.310440 0.120379
+DEAL::  6.05737 -5.58185 1.42655  -5.58185 5.14086 -1.32296  1.42655 -1.32296 0.310769
+DEAL::  -5.56792 5.72126 0.460025  5.72126 -5.78825 -0.200982  0.460025 -0.200982 0.777128
+DEAL::  3.29769 -2.80684 1.47255  -2.80684 2.38118 -1.27697  1.47255 -1.27697 0.586738
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  -10.6284 10.3135 -0.944744  10.3135 -9.95524 1.07465  -0.944744 1.07465 0.389707   10.3135 -9.95524 1.07465  -9.95524 9.56553 -1.16912  1.07465 -1.16912 -0.283423   -0.944744 1.07465 0.389707  1.07465 -1.16912 -0.283423  0.389707 -0.283423 0.318851
+DEAL::  -10.6284 10.3135 -0.944744  10.3135 -9.95524 1.07465  -0.944744 1.07465 0.389707   10.3135 -9.95524 1.07465  -9.95524 9.56553 -1.16912  1.07465 -1.16912 -0.283423   -0.944744 1.07465 0.389707  1.07465 -1.16912 -0.283423  0.389707 -0.283423 0.318851
+DEAL::  -10.6284 10.3135 -0.944744  10.3135 -9.95524 1.07465  -0.944744 1.07465 0.389707   10.3135 -9.95524 1.07465  -9.95524 9.56553 -1.16912  1.07465 -1.16912 -0.283423   -0.944744 1.07465 0.389707  1.07465 -1.16912 -0.283423  0.389707 -0.283423 0.318851
+DEAL::  -10.6284 10.3135 -0.944744  10.3135 -9.95524 1.07465  -0.944744 1.07465 0.389707   10.3135 -9.95524 1.07465  -9.95524 9.56553 -1.16912  1.07465 -1.16912 -0.283423   -0.944744 1.07465 0.389707  1.07465 -1.16912 -0.283423  0.389707 -0.283423 0.318851
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000 9.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::
+DEAL::shape_values
+DEAL::  -0.0578481
+DEAL::  -0.168744
+DEAL::  0.464575
+DEAL::  -0.129982
+DEAL::
+DEAL::shape_gradients
+DEAL::  -0.202930 0.219946 0.0510483
+DEAL::  0.715911 -0.618156 0.293265
+DEAL::  0.318216 -0.586022 -0.803416
+DEAL::  -1.13436 1.04107 -0.279845
+DEAL::
+DEAL::shape_hessians
+DEAL::  0.999563 -0.882708 0.350567  -0.882708 0.779228 -0.310440  0.350567 -0.310440 0.120379
+DEAL::  6.05737 -5.58185 1.42655  -5.58185 5.14086 -1.32296  1.42655 -1.32296 0.310769
+DEAL::  -5.56792 5.72126 0.460025  5.72126 -5.78825 -0.200982  0.460025 -0.200982 0.777128
+DEAL::  3.29769 -2.80684 1.47255  -2.80684 2.38118 -1.27697  1.47255 -1.27697 0.586738
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  10.6284 -10.3135 0.944744  -10.3135 9.95524 -1.07465  0.944744 -1.07465 -0.389707   -10.3135 9.95524 -1.07465  9.95524 -9.56553 1.16912  -1.07465 1.16912 0.283423   0.944744 -1.07465 -0.389707  -1.07465 1.16912 0.283423  -0.389707 0.283423 -0.318851
+DEAL::  10.6284 -10.3135 0.944744  -10.3135 9.95524 -1.07465  0.944744 -1.07465 -0.389707   -10.3135 9.95524 -1.07465  9.95524 -9.56553 1.16912  -1.07465 1.16912 0.283423   0.944744 -1.07465 -0.389707  -1.07465 1.16912 0.283423  -0.389707 0.283423 -0.318851
+DEAL::  10.6284 -10.3135 0.944744  -10.3135 9.95524 -1.07465  0.944744 -1.07465 -0.389707   -10.3135 9.95524 -1.07465  9.95524 -9.56553 1.16912  -1.07465 1.16912 0.283423   0.944744 -1.07465 -0.389707  -1.07465 1.16912 0.283423  -0.389707 0.283423 -0.318851
+DEAL::  10.6284 -10.3135 0.944744  -10.3135 9.95524 -1.07465  0.944744 -1.07465 -0.389707   -10.3135 9.95524 -1.07465  9.95524 -9.56553 1.16912  -1.07465 1.16912 0.283423   0.944744 -1.07465 -0.389707  -1.07465 1.16912 0.283423  -0.389707 0.283423 -0.318851
+DEAL::
+DEAL::
+DEAL::MappingP1<3, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  0.0339313
+DEAL::  0.0204525
+DEAL::  0.226849
+DEAL::  -0.0964507
+DEAL::  -0.0459722
+DEAL::  -0.0514379
+DEAL::
+DEAL::shape_gradients
+DEAL::  -0.163032 -0.163032 2.50487
+DEAL::  -1.74798 -1.74798 -1.69150
+DEAL::  -2.64526 -2.64526 -2.01270
+DEAL::  2.22034 2.22034 2.06928
+DEAL::  0.147892 0.147892 -0.203450
+DEAL::  0.0954487 0.0954487 -0.270989
+DEAL::
+DEAL::shape_hessians
+DEAL::  0.343396 0.343396 -12.4752  0.343396 0.343396 -12.4752  -12.4752 -12.4752 -25.2938
+DEAL::  9.77742 9.77742 4.95043  9.77742 9.77742 4.95043  4.95043 4.95043 0.123440
+DEAL::  9.68276 9.68276 2.30657  9.68276 9.68276 2.30657  2.30657 2.30657 -5.06962
+DEAL::  17.2393 17.2393 20.7168  17.2393 17.2393 20.7168  20.7168 20.7168 24.1943
+DEAL::  3.53287 3.53287 4.66314  3.53287 3.53287 4.66314  4.66314 4.66314 5.79341
+DEAL::  3.79007 3.79007 4.47003  3.79007 3.79007 4.47003  4.47003 4.47003 5.15000
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   27.0000 27.0000 54.0000  27.0000 27.0000 54.0000  54.0000 54.0000 81.0000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   27.0000 27.0000 54.0000  27.0000 27.0000 54.0000  54.0000 54.0000 81.0000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   27.0000 27.0000 54.0000  27.0000 27.0000 54.0000  54.0000 54.0000 81.0000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   27.0000 27.0000 54.0000  27.0000 27.0000 54.0000  54.0000 54.0000 81.0000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   27.0000 27.0000 54.0000  27.0000 27.0000 54.0000  54.0000 54.0000 81.0000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   0.00000 0.00000 27.0000  0.00000 0.00000 27.0000  27.0000 27.0000 54.0000   27.0000 27.0000 54.0000  27.0000 27.0000 54.0000  54.0000 54.0000 81.0000
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  2.00000 2.00000 1.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  0.0339313
+DEAL::  0.0204525
+DEAL::  0.226849
+DEAL::  -0.0964507
+DEAL::  -0.0459722
+DEAL::  -0.0514379
+DEAL::
+DEAL::shape_gradients
+DEAL::  -0.163032 0.00000 2.66790
+DEAL::  -1.74798 0.00000 0.0564788
+DEAL::  -2.64526 0.00000 0.632559
+DEAL::  2.22034 0.00000 -0.151060
+DEAL::  0.147892 0.00000 -0.351342
+DEAL::  0.0954487 0.00000 -0.366438
+DEAL::
+DEAL::shape_hessians
+DEAL::  0.343396 0.00000 -12.8186  0.00000 0.00000 0.00000  -12.8186 0.00000 0.00000
+DEAL::  9.77742 0.00000 -4.82699  0.00000 0.00000 0.00000  -4.82699 0.00000 0.00000
+DEAL::  9.68276 0.00000 -7.37619  0.00000 0.00000 0.00000  -7.37619 0.00000 -1.77636e-15
+DEAL::  17.2393 0.00000 3.47747  0.00000 0.00000 0.00000  3.47747 0.00000 3.55271e-15
+DEAL::  3.53287 0.00000 1.13027  0.00000 0.00000 0.00000  1.13027 0.00000 4.44089e-16
+DEAL::  3.79007 0.00000 0.679966  0.00000 0.00000 0.00000  0.679966 0.00000 8.88178e-16
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 0.00000  27.0000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   27.0000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 0.00000  27.0000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   27.0000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 0.00000  27.0000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   27.0000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 0.00000  27.0000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   27.0000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 0.00000  27.0000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   27.0000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000
+DEAL::  0.00000 0.00000 27.0000  0.00000 0.00000 0.00000  27.0000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   27.0000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  0.0339313
+DEAL::  0.0204525
+DEAL::  0.226849
+DEAL::  -0.0964507
+DEAL::  -0.0459722
+DEAL::  -0.0514379
+DEAL::
+DEAL::shape_gradients
+DEAL::  0.00000 2.66790 -0.163032
+DEAL::  0.00000 0.0564788 -1.74798
+DEAL::  0.00000 0.632559 -2.64526
+DEAL::  0.00000 -0.151060 2.22034
+DEAL::  0.00000 -0.351342 0.147892
+DEAL::  0.00000 -0.366438 0.0954487
+DEAL::
+DEAL::shape_hessians
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 -12.8186  0.00000 -12.8186 0.343396
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 -4.82699  0.00000 -4.82699 9.77742
+DEAL::  0.00000 0.00000 0.00000  0.00000 -1.77636e-15 -7.37619  0.00000 -7.37619 9.68276
+DEAL::  0.00000 0.00000 0.00000  0.00000 3.55271e-15 3.47747  0.00000 3.47747 17.2393
+DEAL::  0.00000 0.00000 0.00000  0.00000 4.44089e-16 1.13027  0.00000 1.13027 3.53287
+DEAL::  0.00000 0.00000 0.00000  0.00000 8.88178e-16 0.679966  0.00000 0.679966 3.79007
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 27.0000  0.00000 27.0000 0.00000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 27.0000  0.00000 27.0000 0.00000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 27.0000  0.00000 27.0000 0.00000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 27.0000  0.00000 27.0000 0.00000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 27.0000  0.00000 27.0000 0.00000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 27.0000  0.00000 27.0000 0.00000
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::  1.00000 2.00000 2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  0.0339313
+DEAL::  0.0204525
+DEAL::  0.226849
+DEAL::  -0.0964507
+DEAL::  -0.0459722
+DEAL::  -0.0514379
+DEAL::
+DEAL::shape_gradients
+DEAL::  -2.66790 2.66790 2.50487
+DEAL::  -0.0564788 0.0564788 -1.69150
+DEAL::  -0.632559 0.632559 -2.01270
+DEAL::  0.151060 -0.151060 2.06928
+DEAL::  0.351342 -0.351342 -0.203450
+DEAL::  0.366438 -0.366438 -0.270989
+DEAL::
+DEAL::shape_hessians
+DEAL::  0.00000 0.00000 12.8186  0.00000 0.00000 -12.8186  12.8186 -12.8186 -25.2938
+DEAL::  0.00000 0.00000 4.82699  0.00000 0.00000 -4.82699  4.82699 -4.82699 0.123440
+DEAL::  -1.77636e-15 1.77636e-15 7.37619  1.77636e-15 -1.77636e-15 -7.37619  7.37619 -7.37619 -5.06962
+DEAL::  3.55271e-15 -3.55271e-15 -3.47747  -3.55271e-15 3.55271e-15 3.47747  -3.47747 3.47747 24.1943
+DEAL::  4.44089e-16 -4.44089e-16 -1.13027  -4.44089e-16 4.44089e-16 1.13027  -1.13027 1.13027 5.79341
+DEAL::  8.88178e-16 -8.88178e-16 -0.679966  -8.88178e-16 8.88178e-16 0.679966  -0.679966 0.679966 5.15000
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 -27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 -27.0000  0.00000 0.00000 27.0000  -27.0000 27.0000 81.0000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 -27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 -27.0000  0.00000 0.00000 27.0000  -27.0000 27.0000 81.0000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 -27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 -27.0000  0.00000 0.00000 27.0000  -27.0000 27.0000 81.0000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 -27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 -27.0000  0.00000 0.00000 27.0000  -27.0000 27.0000 81.0000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 -27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 -27.0000  0.00000 0.00000 27.0000  -27.0000 27.0000 81.0000
+DEAL::  0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 -27.0000   0.00000 0.00000 0.00000  0.00000 0.00000 0.00000  0.00000 0.00000 27.0000   0.00000 0.00000 -27.0000  0.00000 0.00000 27.0000  -27.0000 27.0000 81.0000
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::shape_values
+DEAL::  0.0339313
+DEAL::  0.0204525
+DEAL::  0.226849
+DEAL::  -0.0964507
+DEAL::  -0.0459722
+DEAL::  -0.0514379
+DEAL::
+DEAL::shape_gradients
+DEAL::  1.41547 1.25243 1.25243
+DEAL::  0.902231 -0.845752 -0.845752
+DEAL::  1.63891 -1.00635 -1.00635
+DEAL::  -1.18570 1.03464 1.03464
+DEAL::  -0.249617 -0.101725 -0.101725
+DEAL::  -0.230943 -0.135495 -0.135495
+DEAL::
+DEAL::shape_hessians
+DEAL::  6.49515 -0.0858490 -0.0858490  -0.0858490 -6.32345 -6.32345  -0.0858490 -6.32345 -6.32345
+DEAL::  4.85785 -2.44436 -2.44436  -2.44436 0.0308600 0.0308600  -2.44436 0.0308600 0.0308600
+DEAL::  6.10879 -2.42069 -2.42069  -2.42069 -1.26741 -1.26741  -2.42069 -1.26741 -1.26741
+DEAL::  2.57110 -4.30983 -4.30983  -4.30983 6.04856 6.04856  -4.30983 6.04856 6.04856
+DEAL::  0.318084 -0.883218 -0.883218  -0.883218 1.44835 1.44835  -0.883218 1.44835 1.44835
+DEAL::  0.607534 -0.947516 -0.947516  -0.947516 1.28750 1.28750  -0.947516 1.28750 1.28750
+DEAL::
+DEAL::shape_3rd_derivatives
+DEAL::  10.1250 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250
+DEAL::  10.1250 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250
+DEAL::  10.1250 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250
+DEAL::  10.1250 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250
+DEAL::  10.1250 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250
+DEAL::  10.1250 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500  -3.37500 -3.37500 -3.37500   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250   -3.37500 -3.37500 -3.37500  -3.37500 10.1250 10.1250  -3.37500 10.1250 10.1250
+DEAL::
+DEAL::
+DEAL::OK
diff --git a/tests/simplex/mapping_p1_05.cc b/tests/simplex/mapping_p1_05.cc
new file mode 100644 (file)
index 0000000..84ce005
--- /dev/null
@@ -0,0 +1,364 @@
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2025 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_simplex_p.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_fe.h>
+#include <deal.II/fe/mapping_p1.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_tools_topology.h>
+#include <deal.II/grid/tria.h>
+
+#include "../tests.h"
+
+
+// Test MappingP1::transform() by comparing with MappingFE.
+
+
+// To call Mapping::transform() we have to get the mapping data, which requires
+// accessing a protected member of FEValuesBase:
+template <int dim, int spacedim>
+class FEValues2 : public FEValues<dim, spacedim>
+{
+public:
+  using FEValues<dim, spacedim>::FEValues;
+
+  const typename Mapping<dim, spacedim>::InternalDataBase &
+  get_mapping_data() const
+  {
+    Assert(this->mapping_data, ExcInternalError());
+    return *this->mapping_data;
+  }
+};
+
+using namespace dealii;
+
+void
+fill_tensor(double &t)
+{
+  t = random_value<double>();
+}
+
+template <int rank, int dim>
+void
+fill_tensor(Tensor<rank, dim> &t)
+{
+  for (unsigned int d = 0; d < dim; ++d)
+    fill_tensor(t[d]);
+}
+
+template <int dim>
+void
+fill_tensor(Tensor<1, dim> &t)
+{
+  for (unsigned int d = 0; d < dim; ++d)
+    t[d] = random_value<double>();
+}
+
+template <int dim, int spacedim = dim>
+void
+test()
+{
+  deallog << "MappingP1<" << dim << ", " << spacedim << ">" << std::endl;
+
+  const auto reference_cell = ReferenceCells::get_simplex<dim>();
+
+  Triangulation<dim, spacedim> tria;
+  if constexpr (dim == 1)
+    GridGenerator::subdivided_hyper_cube(tria, 1, 1.0, 2.0, true);
+  else if constexpr (dim == 2 && spacedim == 3)
+    {
+      Triangulation<dim> tria_2d;
+      GridGenerator::subdivided_hyper_cube_with_simplices(
+        tria_2d, 1, 1.0, 2.0, true);
+      std::vector<Point<dim>>    points_2d;
+      std::vector<CellData<dim>> cell_data;
+      SubCellData                subcell_data;
+      std::tie(points_2d, cell_data, subcell_data) =
+        GridTools::get_coarse_mesh_description(tria_2d);
+
+      std::vector<Point<spacedim>> points_3d;
+      for (const auto &p : points_2d)
+        points_3d.emplace_back(p[0], p[1], 1.0 + p[0] * p[0] + p[1] * p[1]);
+
+      tria.create_triangulation(points_3d, cell_data, subcell_data);
+    }
+  else
+    GridGenerator::subdivided_hyper_cube_with_simplices(
+      tria, 1, 1.0, 2.0, true);
+  FE_SimplexP<dim, spacedim> fe(3);
+  MappingP1<dim, spacedim>   mapping;
+  MappingFE<dim, spacedim>   mapping_fe(fe);
+
+  QGaussSimplex<dim> quadrature(2);
+
+  UpdateFlags flags = update_values | update_gradients | update_hessians |
+                      update_3rd_derivatives |
+                      update_contravariant_transformation;
+
+  FEValues2<dim, spacedim> fe_values(mapping, fe, quadrature, flags);
+  FEValues2<dim, spacedim> fe_values_2(mapping_fe, fe, quadrature, flags);
+
+  for (const auto &cell : tria.active_cell_iterators())
+    {
+      deallog << std::endl;
+
+      // We need to update the internal states before we can
+      // compute values with transform():
+      fe_values.reinit(cell);
+      fe_values_2.reinit(cell);
+
+      deallog << "cell vertices" << std::endl;
+      for (const unsigned int vertex_no : cell->vertex_indices())
+        deallog << "  " << cell->vertex(vertex_no) << std::endl;
+      deallog << std::endl;
+
+      // First transform():
+      {
+        std::vector<Tensor<1, dim>> input(quadrature.size());
+        for (auto &v : input)
+          fill_tensor(v);
+        auto input_2 = input;
+
+        auto test_mapping = [&](const MappingKind &mapping_kind,
+                                const std::string &mapping_name) {
+          deallog << "transform Tensor<1, " << spacedim << "> with "
+                  << mapping_name << ":" << std::endl;
+
+          std::vector<Tensor<1, spacedim>> output(quadrature.size());
+          auto                             output_2 = output;
+
+          mapping.transform(make_array_view(input),
+                            mapping_kind,
+                            fe_values.get_mapping_data(),
+                            make_array_view(output));
+          mapping_fe.transform(make_array_view(input_2),
+                               mapping_kind,
+                               fe_values_2.get_mapping_data(),
+                               make_array_view(output_2));
+
+          for (unsigned int i = 0; i < input.size(); ++i)
+            {
+              Assert((output[i] - output_2[i]).norm() < 1e-12,
+                     ExcInternalError());
+              if (i == input.size() / 2)
+                deallog << output[i] << std::endl;
+            }
+        };
+
+        test_mapping(MappingKind::mapping_covariant, "mapping_covariant");
+        test_mapping(MappingKind::mapping_contravariant,
+                     "mapping_contravariant");
+        test_mapping(MappingKind::mapping_piola, "mapping_piola");
+      }
+      deallog << std::endl;
+
+      // Second transform():
+      {
+        std::vector<DerivativeForm<1, dim, spacedim>> input(quadrature.size());
+        for (auto &v : input)
+          for (unsigned int d = 0; d < spacedim; ++d)
+            fill_tensor(v[d]);
+        auto input_2 = input;
+
+        auto test_mapping = [&](const MappingKind &mapping_kind,
+                                const std::string &mapping_name) {
+          deallog << "transform DerivativeForm<1, " << dim << ", " << spacedim
+                  << "> with " << mapping_name << ":" << std::endl;
+
+          std::vector<Tensor<2, spacedim>> output(quadrature.size());
+          auto                             output_2 = output;
+
+          mapping.transform(make_array_view(input),
+                            mapping_kind,
+                            fe_values.get_mapping_data(),
+                            make_array_view(output));
+          mapping_fe.transform(make_array_view(input_2),
+                               mapping_kind,
+                               fe_values_2.get_mapping_data(),
+                               make_array_view(output_2));
+
+          for (unsigned int i = 0; i < input.size(); ++i)
+            {
+              Assert((output[i] - output_2[i]).norm() < 1e-12,
+                     ExcInternalError());
+              if (i == input.size() / 2)
+                deallog << output[i] << std::endl;
+            }
+        };
+
+        test_mapping(MappingKind::mapping_covariant, "mapping_covariant");
+        // Other mappings are not yet implemented for MappingFE so we do not
+        // have them in MappingP1 (or tests here)
+#if 0
+        test_mapping(MappingKind::mapping_contravariant,
+                     "mapping_contravariant");
+        test_mapping(MappingKind::mapping_piola, "mapping_piola");
+#endif
+      }
+      deallog << std::endl;
+
+      // Third transform():
+      //
+      // these transformations are only implemented for codim 0
+      if (dim == spacedim)
+        {
+          std::vector<Tensor<2, dim>> input(quadrature.size());
+          for (auto &v : input)
+            fill_tensor(v);
+          auto input_2 = input;
+
+          auto test_mapping = [&](const MappingKind &mapping_kind,
+                                  const std::string &mapping_name) {
+            deallog << "transform Tensor<2, " << dim << "> with "
+                    << mapping_name << ":" << std::endl;
+
+            std::vector<Tensor<2, spacedim>> output(quadrature.size());
+            auto                             output_2 = output;
+
+            mapping.transform(make_array_view(input),
+                              mapping_kind,
+                              fe_values.get_mapping_data(),
+                              make_array_view(output));
+            mapping_fe.transform(make_array_view(input_2),
+                                 mapping_kind,
+                                 fe_values_2.get_mapping_data(),
+                                 make_array_view(output_2));
+
+            for (unsigned int i = 0; i < input.size(); ++i)
+              {
+                Assert((output[i] - output_2[i]).norm() < 1e-12,
+                       ExcInternalError());
+                if (i == input.size() / 2)
+                  deallog << output[i] << std::endl;
+              }
+          };
+
+          // not yet implemented by MappingFE
+#if 0
+        test_mapping(MappingKind::mapping_covariant, "mapping_covariant");
+#endif
+          test_mapping(MappingKind::mapping_contravariant,
+                       "mapping_contravariant");
+          test_mapping(MappingKind::mapping_covariant_gradient,
+                       "mapping_covariant_gradient");
+          test_mapping(MappingKind::mapping_contravariant_gradient,
+                       "mapping_contravariant_gradient");
+          test_mapping(MappingKind::mapping_piola_gradient,
+                       "mapping_piola_gradient");
+        }
+      deallog << std::endl;
+
+      {
+        std::vector<DerivativeForm<2, dim, spacedim>> input(quadrature.size());
+        for (auto &v : input)
+          for (unsigned int d = 0; d < spacedim; ++d)
+            fill_tensor(v[d]);
+        auto input_2 = input;
+
+        auto test_mapping = [&](const MappingKind &mapping_kind,
+                                const std::string &mapping_name) {
+          deallog << "transform DerivativeForm<2, " << dim << ", " << spacedim
+                  << "> with " << mapping_name << ":" << std::endl;
+
+          std::vector<Tensor<3, spacedim>> output(quadrature.size());
+          auto                             output_2 = output;
+
+          mapping.transform(make_array_view(input),
+                            mapping_kind,
+                            fe_values.get_mapping_data(),
+                            make_array_view(output));
+          mapping_fe.transform(make_array_view(input_2),
+                               mapping_kind,
+                               fe_values_2.get_mapping_data(),
+                               make_array_view(output_2));
+
+          for (unsigned int i = 0; i < input.size(); ++i)
+            {
+              Assert((output[i] - output_2[i]).norm() < 1e-12,
+                     ExcInternalError());
+              if (i == input.size() / 2)
+                deallog << output[i] << std::endl;
+            }
+        };
+
+        // This is the only mapping implemented for MappingFE
+        test_mapping(MappingKind::mapping_covariant_gradient,
+                     "mapping_covariant_gradient");
+      }
+      deallog << std::endl;
+
+      {
+        std::vector<Tensor<3, dim>> input(quadrature.size());
+        for (auto &v : input)
+          fill_tensor(v);
+        auto input_2 = input;
+
+        auto test_mapping = [&](const MappingKind &mapping_kind,
+                                const std::string &mapping_name) {
+          deallog << "transform Tensor<3, " << dim << "> with " << mapping_name
+                  << ":" << std::endl;
+
+          std::vector<Tensor<3, spacedim>> output(quadrature.size());
+          auto                             output_2 = output;
+
+          mapping.transform(make_array_view(input),
+                            mapping_kind,
+                            fe_values.get_mapping_data(),
+                            make_array_view(output));
+          mapping_fe.transform(make_array_view(input_2),
+                               mapping_kind,
+                               fe_values_2.get_mapping_data(),
+                               make_array_view(output_2));
+
+          for (unsigned int i = 0; i < input.size(); ++i)
+            {
+              Assert((output[i] - output_2[i]).norm() < 1e-12,
+                     ExcInternalError());
+              if (i == input.size() / 2)
+                deallog << output[i] << std::endl;
+            }
+        };
+
+        // This is the only mapping implemented for MappingFE
+        test_mapping(MappingKind::mapping_contravariant_hessian,
+                     "mapping_contravariant_hessian");
+        test_mapping(MappingKind::mapping_covariant_hessian,
+                     "mapping_covariant_hessian");
+        test_mapping(MappingKind::mapping_piola_hessian,
+                     "mapping_piola_hessian");
+      }
+      deallog << std::endl;
+    }
+
+  deallog << std::endl;
+}
+
+int
+main()
+{
+  initlog();
+
+  test<1>();
+  test<1, 2>();
+  test<2>();
+  test<2, 3>();
+  test<3>();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/simplex/mapping_p1_05.output b/tests/simplex/mapping_p1_05.output
new file mode 100644 (file)
index 0000000..043cbdf
--- /dev/null
@@ -0,0 +1,376 @@
+
+DEAL::MappingP1<1, 1>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000
+DEAL::  2.00000
+DEAL::
+DEAL::transform Tensor<1, 1> with mapping_covariant:
+DEAL::0.394383
+DEAL::transform Tensor<1, 1> with mapping_contravariant:
+DEAL::0.394383
+DEAL::transform Tensor<1, 1> with mapping_piola:
+DEAL::0.394383
+DEAL::
+DEAL::transform DerivativeForm<1, 1, 1> with mapping_covariant:
+DEAL::0.798440
+DEAL::
+DEAL::transform Tensor<2, 1> with mapping_contravariant:
+DEAL::0.197551
+DEAL::transform Tensor<2, 1> with mapping_covariant_gradient:
+DEAL::0.197551
+DEAL::transform Tensor<2, 1> with mapping_contravariant_gradient:
+DEAL::0.197551
+DEAL::transform Tensor<2, 1> with mapping_piola_gradient:
+DEAL::0.197551
+DEAL::
+DEAL::transform DerivativeForm<2, 1, 1> with mapping_covariant_gradient:
+DEAL::0.768230
+DEAL::
+DEAL::transform Tensor<3, 1> with mapping_contravariant_hessian:
+DEAL::0.553970
+DEAL::transform Tensor<3, 1> with mapping_covariant_hessian:
+DEAL::0.553970
+DEAL::transform Tensor<3, 1> with mapping_piola_hessian:
+DEAL::0.553970
+DEAL::
+DEAL::
+DEAL::MappingP1<1, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 0.00000
+DEAL::  2.00000 0.00000
+DEAL::
+DEAL::transform Tensor<1, 2> with mapping_covariant:
+DEAL::0.628871 0.00000
+DEAL::transform Tensor<1, 2> with mapping_contravariant:
+DEAL::0.628871 0.00000
+DEAL::transform Tensor<1, 2> with mapping_piola:
+DEAL::0.628871 0.00000
+DEAL::
+DEAL::transform DerivativeForm<1, 1, 2> with mapping_covariant:
+DEAL::0.952230 0.00000  0.916195 0.00000
+DEAL::
+DEAL::
+DEAL::transform DerivativeForm<2, 1, 2> with mapping_covariant_gradient:
+DEAL::0.141603 0.00000  0.00000 0.00000   0.606969 0.00000  0.00000 0.00000
+DEAL::
+DEAL::transform Tensor<3, 1> with mapping_contravariant_hessian:
+DEAL::0.242887 0.00000  0.00000 0.00000   0.00000 0.00000  0.00000 0.00000
+DEAL::transform Tensor<3, 1> with mapping_covariant_hessian:
+DEAL::0.242887 0.00000  0.00000 0.00000   0.00000 0.00000  0.00000 0.00000
+DEAL::transform Tensor<3, 1> with mapping_piola_hessian:
+DEAL::0.242887 0.00000  0.00000 0.00000   0.00000 0.00000  0.00000 0.00000
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 2>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000
+DEAL::  2.00000 1.00000
+DEAL::  1.00000 2.00000
+DEAL::
+DEAL::transform Tensor<1, 2> with mapping_covariant:
+DEAL::0.129790 0.108809
+DEAL::transform Tensor<1, 2> with mapping_contravariant:
+DEAL::0.129790 0.108809
+DEAL::transform Tensor<1, 2> with mapping_piola:
+DEAL::0.129790 0.108809
+DEAL::
+DEAL::transform DerivativeForm<1, 2, 2> with mapping_covariant:
+DEAL::0.292517 0.771358  0.526745 0.769914
+DEAL::
+DEAL::transform Tensor<2, 2> with mapping_contravariant:
+DEAL::0.890233 0.348893  0.0641713 0.0200230
+DEAL::transform Tensor<2, 2> with mapping_covariant_gradient:
+DEAL::0.890233 0.348893  0.0641713 0.0200230
+DEAL::transform Tensor<2, 2> with mapping_contravariant_gradient:
+DEAL::0.890233 0.348893  0.0641713 0.0200230
+DEAL::transform Tensor<2, 2> with mapping_piola_gradient:
+DEAL::0.890233 0.348893  0.0641713 0.0200230
+DEAL::
+DEAL::transform DerivativeForm<2, 2, 2> with mapping_covariant_gradient:
+DEAL::0.639979 0.354049  0.687861 0.165974   0.440105 0.880075  0.829201 0.330337
+DEAL::
+DEAL::transform Tensor<3, 2> with mapping_contravariant_hessian:
+DEAL::0.786002 0.307458  0.447034 0.226107   0.187533 0.276235  0.556444 0.416501
+DEAL::transform Tensor<3, 2> with mapping_covariant_hessian:
+DEAL::0.786002 0.307458  0.447034 0.226107   0.187533 0.276235  0.556444 0.416501
+DEAL::transform Tensor<3, 2> with mapping_piola_hessian:
+DEAL::0.786002 0.307458  0.447034 0.226107   0.187533 0.276235  0.556444 0.416501
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000
+DEAL::  1.00000 2.00000
+DEAL::  2.00000 1.00000
+DEAL::
+DEAL::transform Tensor<1, 2> with mapping_covariant:
+DEAL::-0.294160 -0.232262
+DEAL::transform Tensor<1, 2> with mapping_contravariant:
+DEAL::-0.294160 -0.232262
+DEAL::transform Tensor<1, 2> with mapping_piola:
+DEAL::-0.294160 -0.232262
+DEAL::
+DEAL::transform DerivativeForm<1, 2, 2> with mapping_covariant:
+DEAL::-0.0525293 -0.521563  -0.176211 -0.240062
+DEAL::
+DEAL::transform Tensor<2, 2> with mapping_contravariant:
+DEAL::-0.461420 -0.819677  -0.573319 -0.755581
+DEAL::transform Tensor<2, 2> with mapping_covariant_gradient:
+DEAL::0.461420 0.819677  0.573319 0.755581
+DEAL::transform Tensor<2, 2> with mapping_contravariant_gradient:
+DEAL::0.461420 0.819677  0.573319 0.755581
+DEAL::transform Tensor<2, 2> with mapping_piola_gradient:
+DEAL::0.461420 0.819677  0.573319 0.755581
+DEAL::
+DEAL::transform DerivativeForm<2, 2, 2> with mapping_covariant_gradient:
+DEAL::0.579430 0.452576  0.687387 0.0996401   0.530808 0.757294  0.304295 0.992228
+DEAL::
+DEAL::transform Tensor<3, 2> with mapping_contravariant_hessian:
+DEAL::-0.700620 -0.316867  -0.328777 -0.231428   -0.0741610 -0.633072  -0.223656 -0.651132
+DEAL::transform Tensor<3, 2> with mapping_covariant_hessian:
+DEAL::-0.700620 -0.316867  -0.328777 -0.231428   -0.0741610 -0.633072  -0.223656 -0.651132
+DEAL::transform Tensor<3, 2> with mapping_piola_hessian:
+DEAL::-0.700620 -0.316867  -0.328777 -0.231428   -0.0741610 -0.633072  -0.223656 -0.651132
+DEAL::
+DEAL::
+DEAL::MappingP1<2, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 3.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::0.227161 -0.204121 0.0691176
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::0.434513 0.00323146 1.31323
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::0.0996842 0.000741348 0.301277
+DEAL::
+DEAL::transform DerivativeForm<1, 2, 3> with mapping_covariant:
+DEAL::0.0526633 0.0163670 0.207091  0.0952398 -0.0672536 0.0839587  0.0235072 0.0415593 0.195200
+DEAL::
+DEAL::
+DEAL::transform DerivativeForm<2, 2, 3> with mapping_covariant_gradient:
+DEAL::0.00262227 0.0128906 0.0465387  0.00478225 -0.0110389 -0.0187698  0.0222136 0.00555525 0.0833064   -0.0593771 0.0528572 -0.0195595  0.0369649 -0.0250018 0.0358894  -0.0672364 0.0835663 0.0489898   -0.136412 0.161354 0.0748259  0.158493 -0.175333 -0.0505202  0.0662434 -0.0419377 0.0729172
+DEAL::
+DEAL::transform Tensor<3, 2> with mapping_contravariant_hessian:
+DEAL::0.0765510 -0.0940676 -0.0525499  -0.0959432 0.118322 0.0671376  -0.0581766 0.0727643 0.0437630   0.0715061 -0.0703671 0.00341720  -0.0590654 0.0667505 0.0230554  0.0373223 -0.0108497 0.0794178   0.444171 -0.493304 -0.147398  -0.465026 0.555219 0.270579  -0.0625630 0.185744 0.369542
+DEAL::transform Tensor<3, 2> with mapping_covariant_hessian:
+DEAL::0.00641866 -0.0161775 -0.0292765  -0.0225181 0.0306563 0.0244146  -0.0482983 0.0434363 -0.0145858   0.00137382 0.00752305 0.0266906  0.0143597 -0.0209156 -0.0196676  0.0472007 -0.0401777 0.0210690   0.0233774 -0.0259634 -0.00775780  -0.0244750 0.0292220 0.0142410  -0.00329279 0.00977599 0.0194496
+DEAL::transform Tensor<3, 2> with mapping_piola_hessian:
+DEAL::0.0175620 -0.0215806 -0.0120558  -0.0220109 0.0271450 0.0154024  -0.0133466 0.0166933 0.0100399   0.0164046 -0.0161433 0.000783959  -0.0135505 0.0153136 0.00528927  0.00856232 -0.00248909 0.0182197   0.101900 -0.113172 -0.0338155  -0.106684 0.127376 0.0620751  -0.0143529 0.0426125 0.0847788
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 2.00000 9.00000
+DEAL::  1.00000 2.00000 6.00000
+DEAL::  2.00000 1.00000 6.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::-0.131238 0.108999 -0.0667160
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::-0.331386 -0.0911486 -1.26760
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::-0.0760251 -0.0209109 -0.290808
+DEAL::
+DEAL::transform DerivativeForm<1, 2, 3> with mapping_covariant:
+DEAL::-0.249994 0.185556 -0.193315  0.0258343 -0.0558522 -0.0900538  -0.0813533 0.00935259 -0.216002
+DEAL::
+DEAL::
+DEAL::transform DerivativeForm<2, 2, 3> with mapping_covariant_gradient:
+DEAL::0.183983 -0.170222 0.0412823  -0.187246 0.178591 -0.0259633  -0.00978860 0.0251076 0.0459570   -0.0389647 0.0458142 0.0205486  0.0492430 -0.0503709 -0.00338381  0.0308348 -0.0136700 0.0514944   -0.217988 0.234920 0.0507959  0.213229 -0.225065 -0.0355099  -0.0142786 0.0295646 0.0458580
+DEAL::
+DEAL::transform Tensor<3, 2> with mapping_contravariant_hessian:
+DEAL::0.171381 -0.155668 0.0471369  -0.161334 0.139290 -0.0661346  0.0301384 -0.0491361 -0.0569932   0.0258343 -0.0238077 0.00607977  -0.0193061 0.0135366 -0.0173086  0.0195844 -0.0308133 -0.0336866   0.591645 -0.538428 0.159650  -0.541922 0.458479 -0.250330  0.149169 -0.239848 -0.272039
+DEAL::transform Tensor<3, 2> with mapping_covariant_hessian:
+DEAL::0.0779630 -0.0706534 0.0219290  -0.0757679 0.0668982 -0.0266089  0.00658547 -0.0112653 -0.0140396   -0.0675833 0.0612073 -0.0191281  0.0662605 -0.0588548 0.0222171  -0.00396848 0.00705748 0.00926701   0.0311392 -0.0283383 0.00840263  -0.0285222 0.0241305 -0.0131753  0.00785098 -0.0126236 -0.0143179
+DEAL::transform Tensor<3, 2> with mapping_piola_hessian:
+DEAL::0.0393174 -0.0357128 0.0108139  -0.0370127 0.0319552 -0.0151723  0.00691422 -0.0112726 -0.0130751   0.00592679 -0.00546186 0.00139480  -0.00442913 0.00310551 -0.00397087  0.00449298 -0.00706906 -0.00772823   0.135733 -0.123524 0.0366262  -0.124325 0.105182 -0.0574296  0.0342216 -0.0550250 -0.0624101
+DEAL::
+DEAL::
+DEAL::MappingP1<3, 3>
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 1.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::0.311950 0.645889 0.00600477
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::0.311950 0.645889 0.00600477
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::0.311950 0.645889 0.00600477
+DEAL::
+DEAL::transform DerivativeForm<1, 3, 3> with mapping_covariant:
+DEAL::0.503461 0.828957 0.675654  0.904170 0.191112 0.394521  0.706067 0.868924 0.547397
+DEAL::
+DEAL::transform Tensor<2, 3> with mapping_contravariant:
+DEAL::0.0484997 0.814351 0.384658  0.637656 0.452122 0.143982  0.413078 0.247033 0.406767
+DEAL::transform Tensor<2, 3> with mapping_covariant_gradient:
+DEAL::0.0484997 0.814351 0.384658  0.637656 0.452122 0.143982  0.413078 0.247033 0.406767
+DEAL::transform Tensor<2, 3> with mapping_contravariant_gradient:
+DEAL::0.0484997 0.814351 0.384658  0.637656 0.452122 0.143982  0.413078 0.247033 0.406767
+DEAL::transform Tensor<2, 3> with mapping_piola_gradient:
+DEAL::0.0484997 0.814351 0.384658  0.637656 0.452122 0.143982  0.413078 0.247033 0.406767
+DEAL::
+DEAL::transform DerivativeForm<2, 3, 3> with mapping_covariant_gradient:
+DEAL::0.227552 0.946925 0.0138663  0.160824 0.119989 0.461848  0.648545 0.915221 0.100857   0.614227 0.0705570 0.393746  0.496431 0.436585 0.293177  0.244069 0.912391 0.566164   0.190709 0.0347164 0.431844  0.813904 0.753383 0.356383  0.997970 0.0356664 0.523548
+DEAL::
+DEAL::transform Tensor<3, 3> with mapping_contravariant_hessian:
+DEAL::0.129976 0.0812650 0.377997  0.136956 0.659878 0.114459  0.880683 0.582450 0.210863   0.668326 0.528885 0.312343  0.943222 0.768206 0.122086  0.0382648 0.514936 0.399300   0.211565 0.452650 0.160162  0.308247 0.433758 0.00543489  0.649787 0.126222 0.461949
+DEAL::transform Tensor<3, 3> with mapping_covariant_hessian:
+DEAL::0.129976 0.0812650 0.377997  0.136956 0.659878 0.114459  0.880683 0.582450 0.210863   0.668326 0.528885 0.312343  0.943222 0.768206 0.122086  0.0382648 0.514936 0.399300   0.211565 0.452650 0.160162  0.308247 0.433758 0.00543489  0.649787 0.126222 0.461949
+DEAL::transform Tensor<3, 3> with mapping_piola_hessian:
+DEAL::0.129976 0.0812650 0.377997  0.136956 0.659878 0.114459  0.880683 0.582450 0.210863   0.668326 0.528885 0.312343  0.943222 0.768206 0.122086  0.0382648 0.514936 0.399300   0.211565 0.452650 0.160162  0.308247 0.433758 0.00543489  0.649787 0.126222 0.461949
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  2.00000 2.00000 1.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::0.142119 -0.794231 0.152483
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::1.37307 -0.936349 0.294601
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::1.37307 -0.936349 0.294601
+DEAL::
+DEAL::transform DerivativeForm<1, 3, 3> with mapping_covariant:
+DEAL::0.599644 0.327455 -0.531410  0.432199 -0.469350 0.449033  0.460652 -0.214198 0.0109871
+DEAL::
+DEAL::transform Tensor<2, 3> with mapping_contravariant:
+DEAL::1.00705 -0.460067 0.00584319  1.15368 -0.268684 0.693370  1.33354 -0.444097 0.653087
+DEAL::transform Tensor<2, 3> with mapping_covariant_gradient:
+DEAL::0.191630 -0.0770539 0.501740  -0.349509 -0.158126 1.03704  0.0447295 -0.130684 -0.0850131
+DEAL::transform Tensor<2, 3> with mapping_contravariant_gradient:
+DEAL::0.969130 -0.203719 0.383170  -0.541140 -0.0810721 0.535296  0.236360 -0.207738 0.416727
+DEAL::transform Tensor<2, 3> with mapping_piola_gradient:
+DEAL::0.969130 -0.203719 0.383170  -0.541140 -0.0810721 0.535296  0.236360 -0.207738 0.416727
+DEAL::
+DEAL::transform DerivativeForm<2, 3, 3> with mapping_covariant_gradient:
+DEAL::0.889511 0.191415 -0.877830  0.508799 0.540404 -0.504072  -0.712811 -0.901059 1.34033   0.275884 -0.594169 0.271839  -0.649495 -1.37132 0.521523  0.552738 1.26759 -0.877482   0.461250 -0.0845347 0.395576  0.00856861 -0.424305 -0.0125271  -0.0745805 -0.438308 0.173866
+DEAL::
+DEAL::transform Tensor<3, 3> with mapping_contravariant_hessian:
+DEAL::1.20258 -0.498151 0.458070  0.234632 -0.925455 1.20947  0.819576 1.46319 -0.809469   -0.478869 0.168679 -0.234331  -0.211786 0.404109 -0.466375  0.211735 0.151384 0.0667253   0.0604589 -0.524539 0.0221181  -0.0672838 -0.457334 0.0487371  0.708616 1.15132 0.198349
+DEAL::transform Tensor<3, 3> with mapping_covariant_hessian:
+DEAL::0.663252 0.195067 0.201622  0.0901297 -0.0640118 0.694359  0.322695 0.463253 -0.941092   0.184382 0.363746 -0.0327093  -0.121656 0.340097 0.227984  0.534430 0.614637 -0.874367   -0.602793 -0.719606 -0.179503  -0.157414 -0.393322 -0.645622  0.385921 0.688071 1.13944
+DEAL::transform Tensor<3, 3> with mapping_piola_hessian:
+DEAL::1.20258 -0.498151 0.458070  0.234632 -0.925455 1.20947  0.819576 1.46319 -0.809469   -0.478869 0.168679 -0.234331  -0.211786 0.404109 -0.466375  0.211735 0.151384 0.0667253   0.0604589 -0.524539 0.0221181  -0.0672838 -0.457334 0.0487371  0.708616 1.15132 0.198349
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::-0.201739 -0.288793 0.538055
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::-0.739794 0.249262 1.52711
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::-0.739794 0.249262 1.52711
+DEAL::
+DEAL::transform DerivativeForm<1, 3, 3> with mapping_covariant:
+DEAL::-0.755795 0.503068 0.0365160  0.100272 -0.408905 0.429613  0.149429 0.385547 0.563161
+DEAL::
+DEAL::transform Tensor<2, 3> with mapping_contravariant:
+DEAL::-0.519048 0.722377 1.85468  -0.993110 0.527017 1.99397  -0.501480 0.123969 0.734536
+DEAL::transform Tensor<2, 3> with mapping_covariant_gradient:
+DEAL::-0.613476 -0.0559461 -0.139413  0.126877 -0.0382939 -0.364754  -0.519269 0.0531764 0.473841
+DEAL::transform Tensor<2, 3> with mapping_contravariant_gradient:
+DEAL::-0.0942063 -0.109123 -0.613254  -0.392393 0.0148825 0.109087  -0.817456 0.177181 1.19618
+DEAL::transform Tensor<2, 3> with mapping_piola_gradient:
+DEAL::-0.0942063 -0.109123 -0.613254  -0.392393 0.0148825 0.109087  -0.817456 0.177181 1.19618
+DEAL::
+DEAL::transform DerivativeForm<2, 3, 3> with mapping_covariant_gradient:
+DEAL::0.708186 -0.463812 0.678878  -0.290548 -0.00385977 -0.0553032  0.263845 -0.617082 0.843894   0.279304 0.126941 0.0520103  0.796179 -1.21941 0.845005  -0.315036 0.736193 0.0988576   0.626390 -0.591605 -0.0904713  -0.163415 0.227708 -0.271097  0.361253 -0.402947 0.483742
+DEAL::
+DEAL::transform Tensor<3, 3> with mapping_contravariant_hessian:
+DEAL::0.510503 -0.751498 0.00294762  0.373528 -0.0630112 0.0180202  -0.287593 0.0866658 -0.927706   0.174945 0.228774 -0.388907  -0.0141391 -0.292582 0.587891  0.225515 0.211570 0.339732   -0.859328 1.10637 -0.487316  0.305308 -0.105013 0.792600  -0.125698 0.196409 1.31618
+DEAL::transform Tensor<3, 3> with mapping_covariant_hessian:
+DEAL::-0.0132674 -0.625403 -0.0925139  1.06650 0.0615460 0.240750  -0.926400 0.158170 -0.878967   0.698715 0.102679 -0.293445  -0.707114 -0.417139 0.365162  0.864322 0.140066 0.290993   -0.523770 0.126095 -0.0954615  0.692975 0.124557 0.222729  -0.638807 0.0715042 0.0487385
+DEAL::transform Tensor<3, 3> with mapping_piola_hessian:
+DEAL::0.510503 -0.751498 0.00294762  0.373528 -0.0630112 0.0180202  -0.287593 0.0866658 -0.927706   0.174945 0.228774 -0.388907  -0.0141391 -0.292582 0.587891  0.225515 0.211570 0.339732   -0.859328 1.10637 -0.487316  0.305308 -0.105013 0.792600  -0.125698 0.196409 1.31618
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::  1.00000 2.00000 2.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::0.689174 -0.345145 0.129542
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::0.818716 -0.474687 1.42295
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::0.818716 -0.474687 1.42295
+DEAL::
+DEAL::transform DerivativeForm<1, 3, 3> with mapping_covariant:
+DEAL::-0.117110 -0.174875 0.518436  -0.186362 0.392333 0.776374  0.0790493 -0.506194 0.326868
+DEAL::
+DEAL::transform Tensor<2, 3> with mapping_contravariant:
+DEAL::0.565959 -0.158316 0.894023  0.971047 -0.425894 1.64463  0.132400 -0.543165 0.694498
+DEAL::transform Tensor<2, 3> with mapping_covariant_gradient:
+DEAL::0.609895 0.346023 0.228752  -0.282743 -0.535664 -0.150815  0.113467 -0.524232 0.0189329
+DEAL::transform Tensor<2, 3> with mapping_contravariant_gradient:
+DEAL::0.723362 -0.178209 0.247685  -0.396211 -0.0114324 -0.169748  1.23304 -0.691009 0.436366
+DEAL::transform Tensor<2, 3> with mapping_piola_gradient:
+DEAL::0.723362 -0.178209 0.247685  -0.396211 -0.0114324 -0.169748  1.23304 -0.691009 0.436366
+DEAL::
+DEAL::transform DerivativeForm<2, 3, 3> with mapping_covariant_gradient:
+DEAL::0.750328 -0.830659 -0.645453  0.0377798 0.314893 0.0955697  -0.684099 0.318815 0.883299   0.673094 -0.945303 -0.192734  -0.498593 1.00664 0.427445  -0.503149 0.457608 0.551681   -0.939741 -0.581062 0.112035  0.319098 0.447242 -0.0649697  0.407552 0.490195 0.572763
+DEAL::
+DEAL::transform Tensor<3, 3> with mapping_contravariant_hessian:
+DEAL::-0.878496 0.964399 0.470082  0.0992492 0.538159 0.219427  0.658270 -0.179485 0.316945   0.395950 -0.0233784 -0.285767  0.345599 -0.685760 0.0181557  -0.237005 -0.265367 -0.280851   -0.857045 0.0640299 0.198368  0.434100 1.10683 -0.0797541  0.752795 0.162933 1.30432
+DEAL::transform Tensor<3, 3> with mapping_covariant_hessian:
+DEAL::-1.29590 1.88815 1.02756  -0.581201 0.655244 0.500452  0.800751 -0.256537 -0.389577   0.813352 -0.947126 -0.843248  1.02605 -0.802845 -0.262869  -0.379485 -0.188315 0.425671   0.417402 -0.923748 -0.557481  0.680450 -0.117085 -0.281025  -0.142480 0.0770515 0.706522
+DEAL::transform Tensor<3, 3> with mapping_piola_hessian:
+DEAL::-0.878496 0.964399 0.470082  0.0992492 0.538159 0.219427  0.658270 -0.179485 0.316945   0.395950 -0.0233784 -0.285767  0.345599 -0.685760 0.0181557  -0.237005 -0.265367 -0.280851   -0.857045 0.0640299 0.198368  0.434100 1.10683 -0.0797541  0.752795 0.162933 1.30432
+DEAL::
+DEAL::
+DEAL::cell vertices
+DEAL::  2.00000 1.00000 1.00000
+DEAL::  1.00000 2.00000 1.00000
+DEAL::  1.00000 1.00000 2.00000
+DEAL::  2.00000 2.00000 2.00000
+DEAL::
+DEAL::transform Tensor<1, 3> with mapping_covariant:
+DEAL::-0.138167 0.210714 0.632515
+DEAL::transform Tensor<1, 3> with mapping_contravariant:
+DEAL::-1.11956 1.19211 1.61391
+DEAL::transform Tensor<1, 3> with mapping_piola:
+DEAL::-0.559782 0.596056 0.806956
+DEAL::
+DEAL::transform DerivativeForm<1, 3, 3> with mapping_covariant:
+DEAL::-0.260762 0.591629 0.297525  -0.513961 -0.116214 0.257420  0.0158942 0.445645 0.265161
+DEAL::
+DEAL::transform Tensor<2, 3> with mapping_contravariant:
+DEAL::-1.17591 1.17360 1.50907  -1.67814 1.30168 1.18473  -0.853347 1.32694 1.34097
+DEAL::transform Tensor<2, 3> with mapping_covariant_gradient:
+DEAL::0.437617 -0.0114326 -0.113683  0.226351 0.197520 0.430744  -0.199383 0.249108 0.0299119
+DEAL::transform Tensor<2, 3> with mapping_contravariant_gradient:
+DEAL::0.848266 -0.469493 -0.688022  -0.184298 0.655580 1.00508  -0.610031 0.707169 0.604251
+DEAL::transform Tensor<2, 3> with mapping_piola_gradient:
+DEAL::0.424133 -0.234747 -0.344011  -0.0921488 0.327790 0.502541  -0.305016 0.353584 0.302125
+DEAL::
+DEAL::transform DerivativeForm<2, 3, 3> with mapping_covariant_gradient:
+DEAL::0.237939 -0.0862134 -0.0840394  0.0247836 0.178493 -0.274922  -0.0274792 0.103165 0.577786   0.296266 0.0721105 -0.200318  -0.199723 0.230421 0.195743  -0.241162 0.224749 0.107578   -0.164602 -0.238117 -0.520660  -0.120001 0.336527 -0.410995  -0.189660 -0.00922999 0.158203
+DEAL::
+DEAL::transform Tensor<3, 3> with mapping_contravariant_hessian:
+DEAL::-0.426893 0.561782 0.291059  -0.146023 -0.310761 -0.526594  0.432111 -0.0482769 0.234212   0.0128203 -0.534156 -0.0947411  -0.127332 0.175298 0.467218  -0.313362 0.219626 0.213252   -0.212251 -0.825377 -0.389515  -0.411318 0.0137232 0.149544  -0.312396 0.294629 0.0206458
+DEAL::transform Tensor<3, 3> with mapping_covariant_hessian:
+DEAL::-0.370027 0.0814534 0.0972304  -0.244180 -0.185816 -0.240755  0.167643 0.0923559 0.234134   -0.0440452 -0.0538272 0.0990877  -0.0291750 0.0503523 0.181379  -0.0488949 0.0789929 0.213331   -0.269117 -0.345048 -0.195686  -0.313162 -0.111222 -0.136295  -0.0479291 0.153996 0.0207243
+DEAL::transform Tensor<3, 3> with mapping_piola_hessian:
+DEAL::-0.213447 0.280891 0.145530  -0.0730117 -0.155381 -0.263297  0.216055 -0.0241384 0.117106   0.00641017 -0.267078 -0.0473706  -0.0636659 0.0876490 0.233609  -0.156681 0.109813 0.106626   -0.106126 -0.412688 -0.194757  -0.205659 0.00686162 0.0747721  -0.156198 0.147314 0.0103229
+DEAL::
+DEAL::
+DEAL::OK

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.