]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Added get_position_vector to VectorTools
authorLuca Heltai <luca.heltai@sissa.it>
Sat, 11 Apr 2015 14:48:07 +0000 (16:48 +0200)
committerLuca Heltai <luca.heltai@sissa.it>
Thu, 16 Apr 2015 14:20:13 +0000 (16:20 +0200)
Removed references to update_euler_vector from tets.

18 files changed:
doc/news/changes.h
include/deal.II/fe/mapping_fe_field.h
include/deal.II/numerics/vector_tools.h
include/deal.II/numerics/vector_tools.templates.h
source/fe/mapping_fe_field.cc
source/numerics/vector_tools_interpolate.inst.in
tests/fe/mapping_fe_field_real_to_unit_b1.cc
tests/fe/mapping_fe_field_real_to_unit_b2_curved.cc
tests/fe/mapping_fe_field_real_to_unit_b2_mask.cc
tests/fe/mapping_fe_field_real_to_unit_b3_curved.cc
tests/fe/mapping_fe_field_real_to_unit_b4_curved.cc
tests/fe/mapping_fe_field_real_to_unit_b5_curved.cc
tests/fe/mapping_fe_field_real_to_unit_q1.cc
tests/fe/mapping_fe_field_real_to_unit_q2_curved.cc
tests/fe/mapping_fe_field_real_to_unit_q2_mask.cc
tests/fe/mapping_fe_field_real_to_unit_q3_curved.cc
tests/fe/mapping_fe_field_real_to_unit_q4_curved.cc
tests/fe/mapping_fe_field_real_to_unit_q5_curved.cc

index 2c3d4c119bf8efd3efd0b279063029ddaf0d7be0..d3ef58962dafd8beaeed439eded8edadc684fc29 100644 (file)
@@ -459,6 +459,20 @@ inconvenience this causes.
   (Luca Heltai, 2015/04/12)
   </li>
 
+  <li> New: A new VectorTools::get_position_vector() function has been 
+  added to the library that allows one to interpolate the Geometry of 
+  a (possibly curved) triangulation to vector finite element fields 
+  of at least spacedim components.
+  <br>
+  (Luca Heltai, 2015/04/11)
+  <li>
+
+  <li> New: A new MappingFEField() class has been added to the library
+  that generalizes MappingQEulerian to allow arbitrary FiniteElements.
+  <br>
+  (Marco Tezzele, Luca Heltai, 2015/04/06)
+  <li>
+
   <li> Changed: The cells of coarse meshes in
   parallel::distributed::Triangulation used to be ordered in a Cuthill-McKee
   numbering, which yields very high surface-to-volume ratios of the individual
@@ -511,12 +525,6 @@ inconvenience this causes.
   (Wolfgang Bangerth, 2015/04/08)
   </li>
 
-  <li> New: A new MappingFEField() class has been added to the library
-  that generalizes MappingQEulerian to allow arbitrary FiniteElements.
-  <br>
-  (Marco Tezzele, Luca Heltai, 2015/04/06)
-  <li>
-
   <li> Changed: In the spirit of the changes made to the distinction
   between Point and Tensor objects discussed above, the first argument
   to GridTools::shift() has been changed from a Point to a Tensor@<1,dim@>.
index 7e065af27ca906334464a8e26517b50054cf10f9..6ecb446bb5c9743ed18ee50ba4a01da5106c23e3 100644 (file)
@@ -51,7 +51,7 @@ DEAL_II_NAMESPACE_OPEN
  * components of the FiniteElement to use for the mapping.
  *
  * Typically, the DoFHandler operates on a finite element that is
- * constructed as a system element (FESystem) from continuous FE_Q()
+ * constructed as a system element (FESystem()) from continuous FE_Q()
  * (for iso-parametric discretizations) or FE_Bernstein() (for
  * iso-geometric discretizations) objects. An example is shown below:
  *
@@ -61,9 +61,10 @@ DEAL_II_NAMESPACE_OPEN
  *    DoFHandler<dim,spacedim> dhq(triangulation);
  *    dhq.distribute_dofs(fesystem);
  *    Vector<double> eulerq(dhq.n_dofs());
+ *    // Fills the euler vector with information from the Triangulation
+ *    VectorTools::get_position_vector(dhq, eulerq);
  *    const ComponentMask mask(spacedim, true);
  *    MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
- *    map.update_euler_vector_using_triangulation(eulerq);
  * @endcode
  *
  * @author Luca Heltai, Marco Tezzele 2013, 2015
@@ -89,16 +90,10 @@ public:
    * euler_vector actually represents a valid geometry (i.e., one with
    * no inverted cells, or with no zero-volume cells).
    *
-   * In order to facilitate the user, we provide an
-   * update_euler_vector_using_triangulation() method to initialize a
-   * euler_vector in a way similar to what happens in
-   * MappingQEulerian, by creating a euler_vector which interpolates
-   * the underlying Triangulation.
-   *
    * If the underlying FiniteElement is a system of FE_Q(), and
    * euler_vector is initialized using
-   * update_euler_vector_using_triangulation(), then this class is in
-   * all respects identical to MappingQ().
+   * VectorTools::get_position_vector(), then this class is in all
+   * respects identical to MappingQ().
    *
    * The optional ComponentMask argument can be used to specify what
    * components of the FiniteElement to use for the geometrical
@@ -126,24 +121,6 @@ public:
    */
   MappingFEField (const MappingFEField<dim,spacedim,VECTOR,DH> &mapping);
 
-  /**
-   * Helper function to fill the given euler vector with information
-   * coming from the triangulation, by interpolating the geometry of
-   * the Triangulation associated with the DoFHandler used at
-   * construction time.
-   *
-   * The resulting map is guaranteed to be interpolatory at the
-   * vertices of the Triangulation. Notice that this may or may not be
-   * meaningful, depending on the FiniteElement you have used to
-   * construct this MappingFEField.
-   *
-   * If the underlying FiniteElement is a system of FE_Q(), and
-   * euler_vector is initialized using this function, then this class
-   * is in all respects identical to MappingQ().
-   */
-  void update_euler_vector_using_triangulation(VECTOR &vector) const;
-
-
 
   /**
    * Transforms the point @p p on the unit cell to the point @p p_real on the
index b4c5c2b041fb50b00210e0117857f1a54686ea98..ee6c85d6f90fb0ddd47eaa799da8d21f6eb58b5f 100644 (file)
@@ -2188,7 +2188,44 @@ namespace VectorTools
                              const InVector                 &v,
                              const unsigned int              component);
   //@}
+  /**
+   * Geometrical interpolation
+   */
+  //@{
+  /**
+   * Given a DoFHandler containing at least a spacedim vector field,
+   * this function interpolates the Triangulation at the support
+   * points of a FE_Q() finite element of the same degree as
+   * dh->get_fe().degree.
+   *
+   * Curved manifold are respected, and the resulting VECTOR will be
+   * geometrically consistent.
+   *
+   * The resulting map is guaranteed to be interpolatory at the
+   * support points of a FE_Q() finite element of the same degree as
+   * dh->get_fe().degree. Notice that this may or may not be
+   * meaningful, depending on the FiniteElement you have distribed in
+   * dh.
+   *
+   * If the underlying finite element is an FE_Q(1)^spacedim, then the
+   * resulting VECTOR is a finite element field representation of the
+   * vertices of the Triangulation.
+   *
+   * The optional ComponentMask argument can be used to specify what
+   * components of the FiniteElement to use to describe the
+   * geometry. If no mask is specified at construction time, then a
+   * default one is used, i.e., the first spacedim components of the
+   * FiniteElement are assumed to represent the geometry of the
+   * problem.
+   *
+   * @author Luca Heltai, 2015
+   */
+  template<class DH, class VECTOR>
+  void get_position_vector(const DH &dh,
+                           VECTOR &vector,
+                           const ComponentMask mask=ComponentMask());
 
+  //@}
 
   /**
    * Exception
index 0a41091f162489bd90563b8f10ccea90ee563333..d156bb0ac3c4a2e240c2fe4ac905ba397fc0a1bd 100644 (file)
@@ -6880,6 +6880,98 @@ namespace VectorTools
   {
     return compute_mean_value(StaticMappingQ1<dim,spacedim>::mapping, dof, quadrature, v, component);
   }
+
+
+  template<class DH, class VECTOR>
+  void get_position_vector(const DH &dh,
+                           VECTOR &vector,
+                           const ComponentMask mask)
+  {
+    AssertDimension(vector.size(), dh.n_dofs());
+
+    const unsigned int dim=DH::dimension;
+    const unsigned int spacedim=DH::space_dimension;
+    const FiniteElement<dim, spacedim> &fe = dh.get_fe();
+
+
+    // Construct default fe_mask;
+    const ComponentMask fe_mask(mask.size() ? mask :
+                                ComponentMask(fe.get_nonzero_components(0).size(), true));
+
+    AssertDimension(fe_mask.size(), fe.get_nonzero_components(0).size());
+
+    std::vector<unsigned int> fe_to_real(fe_mask.size(), numbers::invalid_unsigned_int);
+    unsigned int size = 0;
+    for (unsigned int i=0; i<fe_mask.size(); ++i)
+      {
+        if (fe_mask[i])
+          fe_to_real[i] = size++;
+      }
+    Assert(size == spacedim,
+           ExcMessage("The Component Mask you provided is invalid. It has to select exactly spacedim entries."));
+
+
+    if ( fe.has_support_points() )
+      {
+        typename DH::active_cell_iterator cell;
+        const Quadrature<dim> quad(fe.get_unit_support_points());
+
+        MappingQ<dim,spacedim> map_q(fe.degree);
+        FEValues<dim,spacedim> fe_v(map_q, fe, quad, update_quadrature_points);
+        std::vector<types::global_dof_index> dofs(fe.dofs_per_cell);
+
+        AssertDimension(fe.dofs_per_cell, fe.get_unit_support_points().size());
+        Assert(fe.is_primitive(), ExcMessage("FE is not Primitive! This won't work."));
+
+        for (cell = dh.begin_active(); cell != dh.end(); ++cell)
+          {
+            fe_v.reinit(cell);
+            cell->get_dof_indices(dofs);
+            const std::vector<Point<spacedim> > &points = fe_v.get_quadrature_points();
+            for (unsigned int q = 0; q < points.size(); ++q)
+              {
+                unsigned int comp = fe.system_to_component_index(q).first;
+                if (fe_mask[comp])
+                  vector(dofs[q]) = points[q][fe_to_real[comp]];
+              }
+          }
+      }
+    else
+      {
+        // Construct a FiniteElement with FE_Q^spacedim, and call this
+        // function again.
+        //
+        // Once we have this, interpolate with the given finite element
+        // to get a Mapping which is interpolatory at the support points
+        // of FE_Q(fe.degree())
+        FESystem<dim,spacedim> feq(FE_Q<dim,spacedim>(fe.degree), spacedim);
+        DH dhq(dh.get_tria());
+        dhq.distribute_dofs(feq);
+        Vector<double> eulerq(dhq.n_dofs());
+        const ComponentMask maskq(spacedim, true);
+        get_position_vector(dhq, eulerq);
+
+        FullMatrix<double> transfer(fe.dofs_per_cell, feq.dofs_per_cell);
+        const std::vector<Point<dim> > &points = feq.get_unit_support_points();
+
+        // Here construct the interpolation matrix from FE_Q^spacedim to
+        // the FiniteElement used by euler_dof_handler.
+        //
+        // The interpolation matrix is then passed to the
+        // VectorTools::interpolate() function to generate
+        for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
+          {
+            unsigned int comp_i = fe.system_to_component_index(i).first;
+            if (fe_mask[comp_i])
+              for (unsigned int j=0; j<points.size(); ++j)
+                {
+                  if ( fe_to_real[comp_i] == feq.system_to_component_index(j).first)
+                    transfer(i, j) = fe.shape_value(i, points[j]);
+                }
+          }
+        interpolate(dhq, dh, transfer, eulerq, vector);
+      }
+  }
 }
 
 DEAL_II_NAMESPACE_CLOSE
index c2a199fc73c24c2f7f4b4ef9f8eeb0181b414648..7d7e1d8c7ab6c5f159e6a76faf3de2f764eb7b5f 100644 (file)
@@ -1241,79 +1241,6 @@ MappingFEField<dim,spacedim,VECTOR,DH>::update_internal_dofs (
     local_dofs[i] = (*euler_vector)(dof_indices[i]);
 }
 
-
-template<int dim, int spacedim, class VECTOR, class DH>
-void MappingFEField<dim,spacedim,VECTOR,DH>::update_euler_vector_using_triangulation
-(VECTOR &vector) const
-{
-  AssertDimension(vector.size(), euler_dof_handler->n_dofs());
-  if ( fe->has_support_points() )
-    {
-      typename DH::active_cell_iterator cell;
-      const Quadrature<dim> quad(fe->get_unit_support_points());
-
-      MappingQ<dim,spacedim> map_q(fe->degree);
-      FEValues<dim,spacedim> fe_v(map_q, *fe, quad, update_quadrature_points);
-      std::vector<types::global_dof_index> dofs(fe->dofs_per_cell);
-
-      AssertDimension(fe->dofs_per_cell, fe->get_unit_support_points().size());
-      Assert(fe->is_primitive(), ExcMessage("FE is not Primitive! This won't work."));
-
-      for (cell = euler_dof_handler->begin_active(); cell != euler_dof_handler->end(); ++cell)
-        {
-          fe_v.reinit(cell);
-          cell->get_dof_indices(dofs);
-          const std::vector<Point<spacedim> > &points = fe_v.get_quadrature_points();
-          for (unsigned int q = 0; q < points.size(); ++q)
-            {
-              unsigned int comp = fe->system_to_component_index(q).first;
-              if (fe_mask[comp])
-                vector(dofs[q]) = points[q][fe_to_real[comp]];
-            }
-        }
-    }
-  else
-    {
-      // Construct a MappingFEField with an FEQ, and construct a
-      // standard iso-parametric interpolation on the Triangulation.
-      //
-      // Once we have this, interpolate with the given finite element
-      // to get a Mapping which is interpolatory at the support points
-      // of FE_Q(fe->degree())
-      FESystem<dim,spacedim> feq(FE_Q<dim,spacedim>(fe->degree), spacedim);
-      DH dhq(euler_dof_handler->get_tria());
-      dhq.distribute_dofs(feq);
-      VECTOR eulerq(dhq.n_dofs());
-      const ComponentMask maskq(spacedim, true);
-      MappingFEField<dim,spacedim,VECTOR,DH> newfe(eulerq, dhq, maskq);
-
-      newfe.update_euler_vector_using_triangulation(eulerq);
-
-      FullMatrix<double> transfer(fe->dofs_per_cell, feq.dofs_per_cell);
-      const std::vector<Point<dim> > &points = feq.get_unit_support_points();
-
-      // Here construct the interpolation matrix from FE_Q^spacedim to
-      // the FiniteElement used by euler_dof_handler.
-      //
-      // The interpolation matrix is then passed to the
-      // VectorTools::interpolate() function to generate
-      for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
-        {
-          unsigned int comp_i = fe->system_to_component_index(i).first;
-          if (fe_mask[comp_i])
-            for (unsigned int j=0; j<points.size(); ++j)
-              {
-                if ( fe_to_real[comp_i] == feq.system_to_component_index(j).first)
-                  transfer(i, j) = fe->shape_value(i, points[j]);
-              }
-        }
-      VectorTools::interpolate(dhq, *euler_dof_handler, transfer, eulerq, vector);
-    }
-}
-
-
-
-
 // explicit instantiations
 #include "mapping_fe_field.inst"
 
index 5430ee6abceb742fcab419b28f18eb06e08a3c53..3c3bad4c8507521df65b4f2a4b371c344b4994e6 100644 (file)
@@ -40,6 +40,12 @@ for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS; deal_II_space_dimens
          const VEC&,
          VEC&);
 
+      template
+         void get_position_vector
+        (const DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+         VEC&,
+         const ComponentMask);
+
       \}
 #endif
   }
index 0463f9b18208ead1183b96a6bc28f1eb868aafad..6ac4bd9a472f6d08162500d1726e0193cbc0392f 100644 (file)
@@ -31,6 +31,7 @@
 #include <deal.II/fe/mapping_q1.h>
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/fe/fe_bernstein.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -81,9 +82,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhb.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhb, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhb, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
 
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
index 7efb2357d975363dad6366ef7f4cde78ad00e203..a11b2d7989654dc9cd9d67240eab0c017c15cf69 100644 (file)
@@ -37,6 +37,7 @@
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
 #include <deal.II/fe/fe_bernstein.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -99,9 +100,8 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhb.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhb, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhb, mask);
-
- map.update_euler_vector_using_triangulation(eulerq);
  
 
  typename Triangulation<dim, spacedim >::active_cell_iterator
index f8e4be9d7c3fb705c6d5c2e61beabb68026e5646..e8edd1d89d15c9eb7d821ae82c0c57328e998417 100644 (file)
@@ -33,6 +33,7 @@
 #include <deal.II/fe/fe_bernstein.h>
 #include <deal.II/numerics/data_out.h>
 #include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -98,11 +99,9 @@ void test_real_to_unit_cell()
  ComponentMask mask(spacedim+1, true);
  mask.set(0, false);
 
+ VectorTools::get_position_vector(dhb, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhb, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index 1ed55433fe8631ce32c4992591c724c8fcaa41a5..0df01fc4a3aa5123883679d39f635718e3b74889 100644 (file)
@@ -37,6 +37,7 @@
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
 #include <deal.II/fe/fe_bernstein.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -99,9 +100,8 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhb.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhb, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhb, mask);
-
- map.update_euler_vector_using_triangulation(eulerq);
  
 
  typename Triangulation<dim, spacedim >::active_cell_iterator
index 2cdf1cebae6c6d47a3a1099c974b4037c3ca377d..990ea4d28e9f536a4908eb094f8159ac34bca530 100644 (file)
@@ -37,6 +37,7 @@
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
 #include <deal.II/fe/fe_bernstein.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -99,11 +100,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhb.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhb, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhb, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index 7886f749193f70bf964bbd9509d4813df714b525..e6843b985f12887b5bf5e06cca9f7f0828779b09 100644 (file)
@@ -37,6 +37,7 @@
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
 #include <deal.II/fe/fe_bernstein.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -99,11 +100,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhb.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhb, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhb, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index 9ac09034dc44152cf8c6d00b0294426189f74735..debf15ae94934d4cc15f9a9edb529b0a489f79f3 100644 (file)
@@ -30,6 +30,7 @@
 #include <deal.II/fe/component_mask.h>
 #include <deal.II/fe/mapping_q1.h>
 #include <deal.II/fe/fe_system.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -80,10 +81,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhq.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhq, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index 0cce6f055b89cdc0eb3aa36432ea695dea52da51..adfe6f3ed121df082c9554888004481b962ae3e6 100644 (file)
@@ -36,6 +36,7 @@
 #include <deal.II/fe/mapping_q.h>
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/numerics/vector_tools.h>
 
 #include <deal.II/grid/grid_out.h>
 #include <fstream>
@@ -101,11 +102,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhq.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhq, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index bd8ef97191d92ec181e2858bc29d3b78dcbf7aca..074c7aa957d659b5748f35b2d891c0104c27bc5d 100644 (file)
@@ -30,6 +30,7 @@
 #include <deal.II/fe/component_mask.h>
 #include <deal.II/fe/mapping_q1.h>
 #include <deal.II/fe/fe_system.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -83,10 +84,9 @@ void test_real_to_unit_cell()
  ComponentMask mask(spacedim+1, true);
  mask.set(0, false);
 
+ VectorTools::get_position_vector(dhq, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index e70517993fbd146b354f0609efbd52864a1dd2fc..54c5afb21fe5e9404b2b3b361d0b5a8952434cd1 100644 (file)
@@ -36,6 +36,7 @@
 #include <deal.II/fe/mapping_q.h>
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/numerics/vector_tools.h>
 
 #include <deal.II/grid/grid_out.h>
 #include <fstream>
@@ -101,11 +102,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhq.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhq, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index 3ff565dfe3ab3f331f1d8628c5704cf154a2b75e..2690693320823c4f7ac0d8664d5d86dc49a38dcf 100644 (file)
@@ -36,6 +36,7 @@
 #include <deal.II/fe/mapping_q.h>
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -98,11 +99,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhq.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhq, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 
index 1e04f9527b6f95a852bd7359166934f6b2c6fc1d..669ea368a05b4d11623c77f8b1d88784a8121477 100644 (file)
@@ -36,6 +36,7 @@
 #include <deal.II/fe/mapping_q.h>
 #include <deal.II/fe/fe_system.h>
 #include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/numerics/vector_tools.h>
 
 using namespace dealii;
 
@@ -98,11 +99,9 @@ void test_real_to_unit_cell()
  Vector<double> eulerq(dhq.n_dofs());
  const ComponentMask mask(spacedim, true);
 
+ VectorTools::get_position_vector(dhq, eulerq, mask);
  MappingFEField<dim,spacedim> map(eulerq, dhq, mask);
 
- map.update_euler_vector_using_triangulation(eulerq);
-
  typename Triangulation<dim, spacedim >::active_cell_iterator
  cell = triangulation.begin_active();
 

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.