00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__mapping_cartesian_h
00013 #define __deal2__mapping_cartesian_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/table.h>
00018 #include <cmath>
00019 #include <deal.II/fe/mapping.h>
00020
00021 DEAL_II_NAMESPACE_OPEN
00022
00025
00041 template <int dim, int spacedim=dim>
00042 class MappingCartesian : public Mapping<dim,spacedim>
00043 {
00044 public:
00045 virtual
00046 typename Mapping<dim, spacedim>::InternalDataBase *
00047 get_data (const UpdateFlags,
00048 const Quadrature<dim>& quadrature) const;
00049
00050 virtual
00051 typename Mapping<dim, spacedim>::InternalDataBase *
00052 get_face_data (const UpdateFlags flags,
00053 const Quadrature<dim-1>& quadrature) const;
00054
00055 virtual
00056 typename Mapping<dim, spacedim>::InternalDataBase *
00057 get_subface_data (const UpdateFlags flags,
00058 const Quadrature<dim-1>& quadrature) const;
00059
00060 virtual void
00061 fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00062 const Quadrature<dim> &quadrature,
00063 typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
00064 std::vector<Point<spacedim> > &quadrature_points,
00065 std::vector<double> &JxW_values,
00066 std::vector<DerivativeForm<1,dim,spacedim> > &jacobians,
00067 std::vector<DerivativeForm<2,dim,spacedim> > &jacobian_grads,
00068 std::vector<DerivativeForm<1,spacedim,dim> > &inverse_jacobians,
00069 std::vector<Point<spacedim> > &,
00070 CellSimilarity::Similarity &cell_similarity) const ;
00071
00072
00073 virtual void
00074 fill_fe_face_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00075 const unsigned int face_no,
00076 const Quadrature<dim-1>& quadrature,
00077 typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
00078 std::vector<Point<dim> > &quadrature_points,
00079 std::vector<double> &JxW_values,
00080 std::vector<Tensor<1,dim> > &boundary_form,
00081 std::vector<Point<spacedim> > &normal_vectors) const ;
00082 virtual void
00083 fill_fe_subface_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00084 const unsigned int face_no,
00085 const unsigned int sub_no,
00086 const Quadrature<dim-1>& quadrature,
00087 typename Mapping<dim, spacedim>::InternalDataBase &mapping_data,
00088 std::vector<Point<dim> > &quadrature_points,
00089 std::vector<double> &JxW_values,
00090 std::vector<Tensor<1,dim> > &boundary_form,
00091 std::vector<Point<spacedim> > &normal_vectors) const ;
00092
00093 virtual void
00094 transform (const VectorSlice<const std::vector<Tensor<1,dim> > > input,
00095 VectorSlice<std::vector<Tensor<1,spacedim> > > output,
00096 const typename Mapping<dim,spacedim>::InternalDataBase &internal,
00097 const MappingType type) const;
00098
00099 virtual void
00100 transform (const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
00101 VectorSlice<std::vector<Tensor<2,spacedim> > > output,
00102 const typename Mapping<dim,spacedim>::InternalDataBase &internal,
00103 const MappingType type) const;
00104
00105
00106 virtual
00107 void
00108 transform (const VectorSlice<const std::vector<Tensor<2, dim> > > input,
00109 VectorSlice<std::vector<Tensor<2,spacedim> > > output,
00110 const typename Mapping<dim,spacedim>::InternalDataBase &internal,
00111 const MappingType type) const;
00112
00113 virtual Point<spacedim>
00114 transform_unit_to_real_cell (
00115 const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00116 const Point<dim> &p) const;
00117
00128 virtual Point<dim>
00129 transform_real_to_unit_cell (
00130 const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00131 const Point<spacedim> &p) const;
00132
00133
00139 virtual
00140 Mapping<dim, spacedim> * clone () const;
00141
00147 bool preserves_vertex_locations () const;
00148
00149 protected:
00154 class InternalData : public Mapping<dim, spacedim>::InternalDataBase
00155 {
00156 public:
00160 InternalData (const Quadrature<dim> &quadrature);
00161
00168 virtual std::size_t memory_consumption () const;
00169
00176 Tensor<1,dim> length;
00177
00181 double volume_element;
00182
00188 std::vector<Point<dim> > quadrature_points;
00189 };
00190
00195 void compute_fill (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00196 const unsigned int face_no,
00197 const unsigned int sub_no,
00198 const CellSimilarity::Similarity cell_similarity,
00199 InternalData& data,
00200 std::vector<Point<dim> > &quadrature_points,
00201 std::vector<Point<dim> >& normal_vectors) const;
00202
00203 private:
00204 virtual UpdateFlags update_once (const UpdateFlags) const;
00205 virtual UpdateFlags update_each (const UpdateFlags) const;
00206
00212 static const unsigned int invalid_face_number = numbers::invalid_unsigned_int;
00213 };
00214
00217
00218
00219 #ifndef DOXYGEN
00220
00221 template <int dim, int spacedim>
00222 inline
00223 bool
00224 MappingCartesian<dim,spacedim>::preserves_vertex_locations () const
00225 {
00226 return true;
00227 }
00228
00229 #endif // DOXYGEN
00230
00231 DEAL_II_NAMESPACE_CLOSE
00232
00233 #endif
00234