00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__mapping_q1_eulerian_h
00013 #define __deal2__mapping_q1_eulerian_h
00014
00015 #include <deal.II/base/config.h>
00016 #include <deal.II/base/smartpointer.h>
00017 #include <deal.II/fe/mapping_q1.h>
00018
00019 DEAL_II_NAMESPACE_OPEN
00020
00023
00086 template <int dim, class VECTOR = Vector<double>, int spacedim=dim >
00087 class MappingQ1Eulerian : public MappingQ1<dim,spacedim>
00088 {
00089 public:
00090
00112 MappingQ1Eulerian (const VECTOR &euler_transform_vectors,
00113 const DoFHandler<dim,spacedim> &shiftmap_dof_handler);
00114
00120 virtual
00121 Mapping<dim,spacedim> * clone () const;
00122
00131 bool preserves_vertex_locations () const;
00132
00136 DeclException0 (ExcInactiveCell);
00137
00138
00139
00140 protected:
00147 virtual void
00148 fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00149 const Quadrature<dim> &quadrature,
00150 typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
00151 typename std::vector<Point<spacedim> > &quadrature_points,
00152 std::vector<double> &JxW_values,
00153 std::vector<DerivativeForm<1,dim,spacedim> > &jacobians,
00154 std::vector<DerivativeForm<2,dim,spacedim> > &jacobian_grads,
00155 std::vector<DerivativeForm<1,spacedim,dim> > &inverse_jacobians,
00156 std::vector<Point<spacedim> > &cell_normal_vectors,
00157 CellSimilarity::Similarity &cell_similarity) const;
00158
00163 SmartPointer<const VECTOR, MappingQ1Eulerian<dim,VECTOR,spacedim> > euler_transform_vectors;
00164
00170 SmartPointer<const DoFHandler<dim,spacedim>,MappingQ1Eulerian<dim,VECTOR,spacedim> > shiftmap_dof_handler;
00171
00172
00173 private:
00180 virtual void compute_mapping_support_points(
00181 const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00182 std::vector<Point<spacedim> > &a) const;
00183
00184 };
00185
00188
00189
00190 #ifndef DOXYGEN
00191
00192 template <int dim, class VECTOR, int spacedim>
00193 inline
00194 bool
00195 MappingQ1Eulerian<dim,VECTOR,spacedim>::preserves_vertex_locations () const
00196 {
00197 return false;
00198 }
00199
00200 #endif // DOXYGEN
00201
00202 DEAL_II_NAMESPACE_CLOSE
00203
00204 #endif
00205