16 #include <deal.II/grid/tria.h> 17 #include <deal.II/grid/tria_iterator.h> 18 #include <deal.II/grid/tria_accessor.h> 19 #include <deal.II/grid/manifold_lib.h> 20 #include <deal.II/base/tensor.h> 21 #include <deal.II/lac/vector.h> 24 DEAL_II_NAMESPACE_OPEN
26 template <
int dim,
int spacedim>
34 template <
int dim,
int spacedim>
44 template <
int dim,
int spacedim>
52 double rho_average = 0;
54 for (
unsigned int i=0; i<quad.
size(); ++i)
62 R *= rho_average/R.
norm();
70 template <
int dim,
int spacedim>
74 Assert(spherical_point[0] >=0.0,
75 ExcMessage(
"Negative radius for given point."));
76 const double rho = spherical_point[0];
77 const double theta = spherical_point[1];
84 p[0] = rho*cos(theta);
85 p[1] = rho*sin(theta);
89 const double &phi= spherical_point[2];
90 p[0] = rho*sin(theta)*cos(phi);
91 p[1] = rho*sin(theta)*sin(phi);
92 p[2] = rho*cos(theta);
96 Assert(
false, ExcInternalError());
101 template <
int dim,
int spacedim>
106 const double rho = R.
norm();
114 p[1] = atan2(R[1],R[0]);
120 const double z = R[2];
121 p[2] = atan2(R[1],R[0]);
124 p[1] = atan2(sqrt(R[0]*R[0]+R[1]*R[1]),z);
128 Assert(
false, ExcInternalError());
138 template <
int dim,
int spacedim>
140 const double tolerance) :
141 direction (
Point<spacedim>::unit_vector(axis)),
142 point_on_axis (
Point<spacedim>()),
145 Assert(spacedim > 1, ExcImpossibleInDim(1));
149 template <
int dim,
int spacedim>
153 direction (direction),
154 point_on_axis (point_on_axis),
157 Assert(spacedim > 2, ExcImpossibleInDim(spacedim));
163 template <
int dim,
int spacedim>
168 const std::vector<Point<spacedim> > &surrounding_points = quad.
get_points();
169 const std::vector<double> &weights = quad.
get_weights();
177 for (
unsigned int i=0; i<surrounding_points.size(); ++i)
181 radius += weights[i]*on_plane.
norm();
205 template <
int dim,
int spacedim,
int chartdim>
212 push_forward_function(&push_forward_function),
213 pull_back_function(&pull_back_function),
221 template <
int dim,
int spacedim,
int chartdim>
223 (
const std::string push_forward_expression,
224 const std::string pull_back_expression,
227 const std::string chart_vars,
228 const std::string space_vars,
229 const double tolerance) :
231 const_map(const_map),
237 pf->
initialize(chart_vars, push_forward_expression, const_map);
238 pb->
initialize(space_vars, pull_back_expression, const_map);
239 push_forward_function = pf;
240 pull_back_function = pb;
243 template <
int dim,
int spacedim,
int chartdim>
246 if (owns_pointers ==
true)
249 push_forward_function = 0;
253 pull_back_function = 0;
258 template <
int dim,
int spacedim,
int chartdim>
265 for (
unsigned int i=0; i<spacedim; ++i)
271 for (
unsigned int i=0; i<chartdim; ++i)
273 (std::abs(pb[i]-chart_point[i]) < tolerance*chart_point.
norm())) ||
274 (std::abs(pb[i]-chart_point[i]) <
tolerance),
275 ExcMessage(
"The push forward is not the inverse of the pull back! Bailing out."));
282 template <
int dim,
int spacedim,
int chartdim>
289 for (
unsigned int i=0; i<chartdim; ++i)
295 #include "manifold_lib.inst" 297 DEAL_II_NAMESPACE_CLOSE
#define AssertDimension(dim1, dim2)
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
FunctionManifold(const Function< chartdim > &push_forward_function, const Function< spacedim > &pull_back_function, const Point< chartdim > periodicity=Point< chartdim >(), const double tolerance=1e-10)
const std::vector< Point< dim > > & get_points() const
const std::vector< double > & get_weights() const
virtual Point< spacedim > pull_back(const Point< spacedim > &space_point) const
const Point< spacedim > point_on_axis
::ExceptionBase & ExcMessage(std::string arg1)
const Point< dim > & point(const unsigned int i) const
numbers::NumberTraits< Number >::real_type norm() const
const unsigned int n_components
CylindricalManifold(const unsigned int axis=0, const double tolerance=1e-10)
#define Assert(cond, exc)
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
const Point< spacedim > direction
virtual Point< chartdim > pull_back(const Point< spacedim > &space_point) const
unsigned int size() const
virtual Point< spacedim > push_forward(const Point< spacedim > &chart_point) const
const Point< spacedim > center
virtual Point< spacedim > push_forward(const Point< chartdim > &chart_point) const
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
void initialize(const std::string &vars, const std::vector< std::string > &expressions, const ConstMap &constants, const bool time_dependent=false)
static Point< spacedim > get_periodicity()
FlatManifold< dim, spacedim > flat_manifold
SphericalManifold(const Point< spacedim > center=Point< spacedim >())
virtual void vector_value(const Point< dim > &p, Vector< Number > &values) const
double weight(const unsigned int i) const