Reference documentation for deal.II version 8.4.2
manifold_lib.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 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__manifold_lib_h
17 #define dealii__manifold_lib_h
18 
19 
20 #include <deal.II/base/config.h>
21 #include <deal.II/grid/manifold.h>
22 #include <deal.II/base/function.h>
23 #include <deal.II/base/function_parser.h>
24 
25 DEAL_II_NAMESPACE_OPEN
26 
57 template <int dim, int spacedim = dim>
58 class SphericalManifold : public ChartManifold<dim, spacedim, spacedim>
59 {
60 public:
70 
76  virtual Point<spacedim>
77  pull_back(const Point<spacedim> &space_point) const;
78 
84  virtual Point<spacedim>
85  push_forward(const Point<spacedim> &chart_point) const;
86 
94  virtual Point<spacedim>
95  get_new_point(const Quadrature<spacedim> &quad) const;
96 
101 private:
102 
108 };
109 
110 
126 template <int dim, int spacedim = dim>
127 class CylindricalManifold : public Manifold<dim,spacedim>
128 {
129 public:
136  CylindricalManifold (const unsigned int axis = 0,
137  const double tolerance = 1e-10);
138 
146  CylindricalManifold (const Point<spacedim> &direction,
147  const Point<spacedim> &point_on_axis,
148  const double tolerance = 1e-10);
149 
154  virtual Point<spacedim>
155  get_new_point(const Quadrature<spacedim> &quad) const;
156 
157 protected:
162 
167 
168 private:
173 
177  double tolerance;
178 };
179 
180 
197 template <int dim, int spacedim=dim, int chartdim=dim>
198 class FunctionManifold : public ChartManifold<dim, spacedim, chartdim>
199 {
200 public:
210  FunctionManifold(const Function<chartdim> &push_forward_function,
211  const Function<spacedim> &pull_back_function,
212  const Point<chartdim> periodicity=Point<chartdim>(),
213  const double tolerance=1e-10);
214 
229  FunctionManifold(const std::string push_forward_expression,
230  const std::string pull_back_expression,
231  const Point<chartdim> periodicity=Point<chartdim>(),
233  const std::string chart_vars=FunctionParser<chartdim>::default_variable_names(),
234  const std::string space_vars=FunctionParser<spacedim>::default_variable_names(),
235  const double tolerance=1e-10);
236 
240  ~FunctionManifold();
241 
247  virtual Point<spacedim>
248  push_forward(const Point<chartdim> &chart_point) const;
249 
255  virtual Point<chartdim>
256  pull_back(const Point<spacedim> &space_point) const;
257 
258 private:
263 
269 
275 
281  const double tolerance;
282 
290  const bool owns_pointers;
291 };
292 
293 
294 DEAL_II_NAMESPACE_CLOSE
295 
296 #endif
const double tolerance
Definition: manifold_lib.h:281
SmartPointer< const Function< chartdim >, FunctionManifold< dim, spacedim, chartdim > > push_forward_function
Definition: manifold_lib.h:268
virtual Point< spacedim > pull_back(const Point< spacedim > &space_point) const
const Point< spacedim > point_on_axis
Definition: manifold_lib.h:166
SmartPointer< const Function< spacedim >, FunctionManifold< dim, spacedim, chartdim > > pull_back_function
Definition: manifold_lib.h:274
const Point< spacedim > direction
Definition: manifold_lib.h:161
virtual Point< spacedim > push_forward(const Point< spacedim > &chart_point) const
Definition: manifold_lib.cc:72
const Point< spacedim > center
Definition: manifold_lib.h:100
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
Definition: manifold_lib.cc:46
static Point< spacedim > get_periodicity()
Definition: manifold_lib.cc:36
FlatManifold< dim, spacedim > flat_manifold
Definition: manifold_lib.h:172
const FunctionParser< spacedim >::ConstMap const_map
Definition: manifold_lib.h:262
const bool owns_pointers
Definition: manifold_lib.h:290
SphericalManifold(const Point< spacedim > center=Point< spacedim >())
Definition: manifold_lib.cc:27