/**
* @}
*/
-
-
- /**
- * @name Interface with FEValues
- * @{
- */
-
-public:
- /**
- * Use the InternalData class of the base class without modification
- * and additions.
- */
- typedef typename MappingQGeneric<dim,spacedim>::InternalData InternalData;
-
- /**
- * @}
- */
-
-protected:
-
- /**
- * Computes the support points of the mapping. For @p MappingQ1 these are
- * the vertices, as obtained by calling Mapping::get_vertices().
- *
- * By default, that function just computes the locations of the vertices as
- * reported by the Triangulation. However, other classes may override this
- * function. In particular, the MappingQ1Eulerian class does exactly this by
- * not computing the support points from the geometry of the current cell but
- * instead evaluating an externally given displacement field in addition to
- * the geometry of the cell.
- */
- virtual
- void
- compute_mapping_support_points(const typename Triangulation<dim,spacedim>::cell_iterator &cell,
- std::vector<Point<spacedim> > &a) const;
};
const DoFHandler<dim,spacedim> &shiftmap_dof_handler);
/**
- * Return the mapped vertices of the cell.
+ * Return the mapped vertices of the cell. For the current class, this function does
+ * not use the support points from the geometry of the current cell but
+ * instead evaluates an externally given displacement field in addition to
+ * the geometry of the cell.
*/
virtual
std_cxx11::array<Point<spacedim>, GeometryInfo<dim>::vertices_per_cell>
const typename Mapping<dim,spacedim>::InternalDataBase &internal_data,
internal::FEValues::MappingRelatedData<dim,spacedim> &output_data) const;
+ /**
+ * Compute the support points of the mapping. For the current class, these are
+ * the vertices, as obtained by calling Mapping::get_vertices().
+ */
+ virtual
+ void
+ compute_mapping_support_points(const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+ std::vector<Point<spacedim> > &a) const;
+
/**
* Reference to the vector of shifts.
*/
-template<int dim, int spacedim>
-void
-MappingQ1<dim,spacedim>::compute_mapping_support_points(
- const typename Triangulation<dim,spacedim>::cell_iterator &cell,
- std::vector<Point<spacedim> > &a) const
-{
- std_cxx11::array<Point<spacedim>, GeometryInfo<dim>::vertices_per_cell>
- vertices = this->get_vertices(cell);
-
- a.resize(GeometryInfo<dim>::vertices_per_cell);
- for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
- a[i] = vertices[i];
-}
-
-
-
/**
* Compute an initial guess to pass to the Newton method in
* transform_real_to_unit_cell. For the initial guess we proceed in the
//MappingQ1. this doesn't currently work because we here really need
//a Q1 InternalData, but MappingQGeneric produces one with the
//polynomial degree of the MappingQ
- std_cxx11::unique_ptr<InternalData> mdata (new InternalData(1));
+ std_cxx11::unique_ptr<typename MappingQGeneric<dim,spacedim>::InternalData>
+ mdata (new typename MappingQGeneric<dim,spacedim>::InternalData(1));
mdata->initialize (this->requires_update_flags (update_flags), point_quadrature, 1);
compute_mapping_support_points (cell, mdata->mapping_support_points);
+template<int dim, class EulerVectorType, int spacedim>
+void
+MappingQ1Eulerian<dim,EulerVectorType,spacedim>::
+compute_mapping_support_points(const typename Triangulation<dim,spacedim>::cell_iterator &cell,
+ std::vector<Point<spacedim> > &a) const
+{
+ const std_cxx11::array<Point<spacedim>, GeometryInfo<dim>::vertices_per_cell>
+ vertices = this->get_vertices(cell);
+
+ a.resize(GeometryInfo<dim>::vertices_per_cell);
+ for (unsigned int i=0; i<GeometryInfo<dim>::vertices_per_cell; ++i)
+ a[i] = vertices[i];
+}
+
+
+
+
+
template <int dim, class EulerVectorType, int spacedim>
MappingQ1Eulerian<dim,EulerVectorType,spacedim> *
MappingQ1Eulerian<dim, EulerVectorType, spacedim>::clone () const