Reference documentation for deal.II version 8.4.2
mapping_q.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2001 - 2016 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii__mapping_q_h
17 #define dealii__mapping_q_h
18 
19 
20 #include <deal.II/base/config.h>
21 #include <deal.II/fe/mapping_q_generic.h>
22 
23 DEAL_II_NAMESPACE_OPEN
24 
25 template <int dim, typename PolynomialType> class TensorProductPolynomials;
26 
27 
30 
78 template <int dim, int spacedim=dim>
79 class MappingQ : public Mapping<dim,spacedim>
80 {
81 public:
99  MappingQ (const unsigned int polynomial_degree,
100  const bool use_mapping_q_on_all_cells = false);
101 
105  MappingQ (const MappingQ<dim,spacedim> &mapping);
106 
111  unsigned int get_degree () const;
112 
117  virtual
118  bool preserves_vertex_locations () const;
119 
124  virtual
127  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
128  const Point<dim> &p) const;
129 
151  virtual
152  Point<dim>
154  const Point<spacedim> &p) const;
155 
156  // for documentation, see the Mapping base class
157  virtual
158  void
159  transform (const ArrayView<const Tensor<1,dim> > &input,
160  const MappingType type,
161  const typename Mapping<dim,spacedim>::InternalDataBase &internal,
162  const ArrayView<Tensor<1,spacedim> > &output) const;
163 
164  // for documentation, see the Mapping base class
165  virtual
166  void
168  const MappingType type,
169  const typename Mapping<dim,spacedim>::InternalDataBase &internal,
170  const ArrayView<Tensor<2,spacedim> > &output) const;
171 
172  // for documentation, see the Mapping base class
173  virtual
174  void
175  transform (const ArrayView<const Tensor<2, dim> > &input,
176  const MappingType type,
177  const typename Mapping<dim,spacedim>::InternalDataBase &internal,
178  const ArrayView<Tensor<2,spacedim> > &output) const;
179 
180  // for documentation, see the Mapping base class
181  virtual
182  void
184  const MappingType type,
185  const typename Mapping<dim,spacedim>::InternalDataBase &internal,
186  const ArrayView<Tensor<3,spacedim> > &output) const;
187 
188  // for documentation, see the Mapping base class
189  virtual
190  void
191  transform (const ArrayView<const Tensor<3, dim> > &input,
192  const MappingType type,
193  const typename Mapping<dim,spacedim>::InternalDataBase &internal,
194  const ArrayView<Tensor<3,spacedim> > &output) const;
195 
200  virtual
201  Mapping<dim,spacedim> *clone () const;
202 
203 
209 protected:
210 
231  class InternalData : public Mapping<dim,spacedim>::InternalDataBase
232  {
233  public:
237  InternalData ();
238 
239 
243  virtual std::size_t memory_consumption () const;
244 
252 
257  std_cxx11::unique_ptr<typename MappingQGeneric<dim,spacedim>::InternalData> mapping_q1_data;
258 
263  std_cxx11::unique_ptr<typename MappingQGeneric<dim,spacedim>::InternalData> mapping_qp_data;
264  };
265 
266 protected:
267 
268  // documentation can be found in Mapping::requires_update_flags()
269  virtual
271  requires_update_flags (const UpdateFlags update_flags) const;
272 
273  // documentation can be found in Mapping::get_data()
274  virtual
275  InternalData *
276  get_data (const UpdateFlags,
277  const Quadrature<dim> &quadrature) const;
278 
279  // documentation can be found in Mapping::get_face_data()
280  virtual
281  InternalData *
282  get_face_data (const UpdateFlags flags,
283  const Quadrature<dim-1>& quadrature) const;
284 
285  // documentation can be found in Mapping::get_subface_data()
286  virtual
287  InternalData *
288  get_subface_data (const UpdateFlags flags,
289  const Quadrature<dim-1>& quadrature) const;
290 
291  // documentation can be found in Mapping::fill_fe_values()
292  virtual
293  CellSimilarity::Similarity
294  fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
295  const CellSimilarity::Similarity cell_similarity,
296  const Quadrature<dim> &quadrature,
297  const typename Mapping<dim,spacedim>::InternalDataBase &internal_data,
299 
300  // documentation can be found in Mapping::fill_fe_face_values()
301  virtual void
302  fill_fe_face_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
303  const unsigned int face_no,
304  const Quadrature<dim-1> &quadrature,
305  const typename Mapping<dim,spacedim>::InternalDataBase &internal_data,
307 
308  // documentation can be found in Mapping::fill_fe_subface_values()
309  virtual void
310  fill_fe_subface_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
311  const unsigned int face_no,
312  const unsigned int subface_no,
313  const Quadrature<dim-1> &quadrature,
314  const typename Mapping<dim,spacedim>::InternalDataBase &internal_data,
316 
321 protected:
322 
327  const unsigned int polynomial_degree;
328 
334 
352  std_cxx11::shared_ptr<const MappingQGeneric<dim,spacedim> > q1_mapping;
353 
368  std_cxx11::shared_ptr<const MappingQGeneric<dim,spacedim> > qp_mapping;
369 };
370 
373 DEAL_II_NAMESPACE_CLOSE
374 
375 #endif
unsigned int get_degree() const
Definition: mapping_q.cc:107
virtual InternalData * get_face_data(const UpdateFlags flags, const Quadrature< dim-1 > &quadrature) const
Definition: mapping_q.cc:161
std_cxx11::shared_ptr< const MappingQGeneric< dim, spacedim > > q1_mapping
Definition: mapping_q.h:352
virtual Point< dim > transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p) const
Definition: mapping_q.cc:488
MappingType
Definition: mapping.h:50
virtual InternalData * get_subface_data(const UpdateFlags flags, const Quadrature< dim-1 > &quadrature) const
Definition: mapping_q.cc:185
bool use_mapping_q1_on_current_cell
Definition: mapping_q.h:251
std_cxx11::unique_ptr< typename MappingQGeneric< dim, spacedim >::InternalData > mapping_q1_data
Definition: mapping_q.h:257
const bool use_mapping_q_on_all_cells
Definition: mapping_q.h:333
virtual std::size_t memory_consumption() const
Definition: mapping_q.cc:45
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const
Definition: mapping_q.cc:126
virtual void transform(const ArrayView< const Tensor< 1, dim > > &input, const MappingType type, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 1, spacedim > > &output) const
Definition: mapping_q.cc:352
UpdateFlags
Abstract base class for mapping classes.
Definition: dof_tools.h:52
const unsigned int polynomial_degree
Definition: mapping_q.h:327
virtual Mapping< dim, spacedim > * clone() const
Definition: mapping_q.cc:505
std_cxx11::unique_ptr< typename MappingQGeneric< dim, spacedim >::InternalData > mapping_qp_data
Definition: mapping_q.h:263
virtual Point< spacedim > transform_unit_to_real_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< dim > &p) const
Definition: mapping_q.cc:471
virtual InternalData * get_data(const UpdateFlags, const Quadrature< dim > &quadrature) const
Definition: mapping_q.cc:137
std_cxx11::shared_ptr< const MappingQGeneric< dim, spacedim > > qp_mapping
Definition: mapping_q.h:368
MappingQ(const unsigned int polynomial_degree, const bool use_mapping_q_on_all_cells=false)
Definition: mapping_q.cc:56
virtual bool preserves_vertex_locations() const
Definition: mapping_q.cc:117