include/deal.II/fe/mapping_cartesian.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: mapping_cartesian.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
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 /* -------------- declaration of explicit specializations ------------- */
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Tue May 22 2012 12:06:08 by doxygen 1.7.3