*
* A hint to implementators: no function except the two functions
* @p update_once and @p update_each may add any flags.
- *
+ *
* For more information about the <tt>spacedim</tt> template parameter
* check the documentation of FiniteElement or the one of
* Triangulation.
class Mapping : public Subscriptor
{
public:
-
+
/**
* Virtual destructor.
*/
virtual ~Mapping ();
-
+
/**
* Transforms the point @p p on
* the unit cell to the point
transform_unit_to_real_cell (
const typename Triangulation<dim,spacedim>::cell_iterator &cell,
const Point<dim> &p) const = 0;
-
+
/**
* Transforms the point @p p on
* the real cell to the point
transform_real_to_unit_cell (
const typename Triangulation<dim,spacedim>::cell_iterator &cell,
const Point<spacedim> &p) const = 0;
-
+
/**
* Base class for internal data
* of finite element and mapping
* @p first_cell to @p true.
*/
InternalDataBase ();
-
+
/**
* Virtual destructor for
* derived classes
* by reinit.
*/
UpdateFlags update_flags;
-
+
/**
* Values computed by
* constructor.
* the first cell.
*/
virtual void clear_first_cell ();
-
+
/**
* Return an estimate (in
* bytes) or the memory
* if #update_volume_elements.
*/
std::vector<double> volume_elements;
-
+
/**
* The positions of the
* mapped (generalized)
* support points.
*/
std::vector<Point<spacedim> > support_point_values;
-
+
/*
* The Jacobian of the
* transformation in the
* points.
*/
std::vector<Tensor<2,spacedim> > support_point_gradients;
-
+
/*
* The inverse of the
* Jacobian of the
* points.
*/
std::vector<Tensor<2,spacedim> > support_point_inverse_gradients;
-
-
+
+
private:
/**
* The value returned by
*/
bool first_cell;
};
-
+
/**
* Transform a field of
* vectors accorsing to
VectorSlice<std::vector<Tensor<2,spacedim> > > output,
const InternalDataBase &internal,
const MappingType type) const = 0;
-
+
/**
* @deprecated Use transform() instead.
*/
/**
* @deprecated Use transform() instead.
*/
-
+
void
transform_contravariant (const VectorSlice<const std::vector<Tensor<2,dim> > > intput,
const unsigned int offset,
const Point<spacedim>& support_point_value(
const unsigned int index,
const typename Mapping<dim,spacedim>::InternalDataBase &internal) const;
-
+
/**
* The Jacobian
* matrix of the transformation
const Tensor<2,spacedim>& support_point_gradient(
const unsigned int index,
const typename Mapping<dim,spacedim>::InternalDataBase &internal) const;
-
+
/**
* The inverse Jacobian
* matrix of the transformation
const Tensor<2,spacedim>& support_point_inverse_gradient(
const unsigned int index,
const typename Mapping<dim,spacedim>::InternalDataBase &internal) const;
-
+
/**
* Return a pointer to a copy of the
* present object. The caller of this
*/
virtual
Mapping<dim,spacedim> * clone () const = 0;
-
+
/**
* Returns whether the mapping preserves
* vertex locations, i.e. whether the
DeclException0 (ExcInvalidData);
private:
-
+
/**
* Indicate fields to be updated
* in the constructor of
* See @ref UpdateFlagsEssay.
*/
virtual UpdateFlags update_once (const UpdateFlags) const = 0;
-
+
/**
* The same as update_once(),
* but for the flags to be updated for
virtual InternalDataBase*
get_face_data (const UpdateFlags flags,
const Quadrature<dim-1>& quadrature) const = 0;
-
+
/**
* Prepare internal data
* structure for transformation
const unsigned int face_no,
const Quadrature<dim-1> &quadrature,
InternalDataBase &internal,
- std::vector<Point<dim> > &quadrature_points,
+ std::vector<Point<spacedim> > &quadrature_points,
std::vector<double> &JxW_values,
std::vector<Tensor<1,dim> > &boundary_form,
std::vector<Point<spacedim> > &normal_vectors) const = 0;
const unsigned int sub_no,
const Quadrature<dim-1> &quadrature,
InternalDataBase &internal,
- std::vector<Point<dim> > &quadrature_points,
+ std::vector<Point<spacedim> > &quadrature_points,
std::vector<double> &JxW_values,
std::vector<Tensor<1,dim> > &boundary_form,
std::vector<Point<spacedim> > &normal_vectors) const = 0;
const typename Mapping<dim,spacedim>::InternalDataBase& internal) const
{
AssertIndexRange(index, internal.support_point_values.size());
- return internal.support_point_values[index];
+ return internal.support_point_values[index];
}
FEFaceValuesBase<dim,spacedim> (quadrature.size(),
fe.dofs_per_cell,
update_flags,
- StaticMappingQ1<dim>::mapping,
+ StaticMappingQ1<dim,spacedim>::mapping,
fe, quadrature)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
template class FEValues<deal_II_dimension,deal_II_dimension+1>;
template class FEValuesBase<deal_II_dimension,deal_II_dimension+1>::
CellIterator<DoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator>;
-//template class FEValuesBase<deal_II_dimension,deal_II_dimension+1>::
-// CellIterator<MGDoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator>;
-
-// #if deal_II_dimension == 2
-// template class FEFaceValuesBase<deal_II_dimension,deal_II_dimension+1>;
-// template class FEFaceValues<deal_II_dimension,deal_II_dimension+1>;
-// template class FESubfaceValues<deal_II_dimension,deal_II_dimension+1>;
-// #endif
+template class FEValuesBase<deal_II_dimension,deal_II_dimension+1>::
+ CellIterator<MGDoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator>;
+
+#if deal_II_dimension == 2
+template class FEFaceValuesBase<deal_II_dimension,deal_II_dimension+1>;
+template class FEFaceValues<deal_II_dimension,deal_II_dimension+1>;
+template class FESubfaceValues<deal_II_dimension,deal_II_dimension+1>;
+#endif
#endif