16 #include <deal.II/base/tensor.h> 17 #include <deal.II/grid/manifold.h> 18 #include <deal.II/grid/tria.h> 19 #include <deal.II/grid/tria_iterator.h> 20 #include <deal.II/grid/tria_accessor.h> 21 #include <deal.II/fe/fe_q.h> 24 DEAL_II_NAMESPACE_OPEN
31 template <
int dim,
int spacedim>
37 template <
int dim,
int spacedim>
43 Assert (
false, ExcPureFunctionCalled());
49 template <
int dim,
int spacedim>
54 const std::vector<Point<spacedim> > &surrounding_points = quad.
get_points();
55 const std::vector<double> &weights = quad.
get_weights();
60 for (
unsigned int i=0; i<weights.size(); ++i)
65 for (
unsigned int i=0; i<surrounding_points.size(); ++i)
66 p += surrounding_points[i]*weights[i];
68 return project_to_manifold(surrounding_points, p);
72 template <
int dim,
int spacedim>
82 template <
int dim,
int spacedim>
91 template <
int dim,
int spacedim>
96 Assert (dim>1, ExcImpossibleInDim(dim));
101 return get_new_point_on_line (face);
103 return get_new_point_on_quad (face);
111 template <
int dim,
int spacedim>
119 return get_new_point_on_line (cell);
121 return get_new_point_on_quad (cell);
123 return get_new_point_on_hex (cell);
135 Assert (
false, ExcImpossibleInDim(1));
145 Assert (
false, ExcImpossibleInDim(1));
156 Assert (
false, ExcImpossibleInDim(1));
166 Assert (
false, ExcImpossibleInDim(1));
175 Assert (
false, ExcImpossibleInDim(1));
185 Assert (
false, ExcImpossibleInDim(1));
189 template <
int dim,
int spacedim>
194 Assert (
false, ExcImpossibleInDim(dim));
210 template <
int dim,
int spacedim>
212 const double tolerance) :
213 periodicity(periodicity),
217 template <
int dim,
int spacedim>
222 const std::vector<Point<spacedim> > &surrounding_points = quad.
get_points();
223 const std::vector<double> &weights = quad.
get_weights();
227 for (
unsigned int i=0; i<weights.size(); ++i)
240 for (
unsigned int i=0; i<surrounding_points.size(); ++i)
241 for (
unsigned int d=0; d<spacedim; ++d)
243 minP[d] = std::min(minP[d], surrounding_points[i][d]);
250 for (
unsigned int i=0; i<surrounding_points.size(); ++i)
255 for (
unsigned int d=0; d<spacedim; ++d)
257 dp[d] = ( (surrounding_points[i][d]-minP[d]) >
periodicity[d]/2.0 ?
260 p += (surrounding_points[i]+dp)*weights[i];
263 for (
unsigned int d=0; d<spacedim; ++d)
270 template <
int dim,
int spacedim>
281 template <
int dim,
int spacedim,
int chartdim>
285 template <
int dim,
int spacedim,
int chartdim>
287 sub_manifold(periodicity)
291 template <
int dim,
int spacedim,
int chartdim>
296 const std::vector<Point<spacedim> > &surrounding_points = quad.
get_points();
297 const std::vector<double> &weights = quad.
get_weights();
298 std::vector<Point<chartdim> > chart_points(surrounding_points.size());
300 for (
unsigned int i=0; i<surrounding_points.size(); ++i)
301 chart_points[i] =
pull_back(surrounding_points[i]);
315 #include "manifold.inst" 317 DEAL_II_NAMESPACE_CLOSE
Quadrature< OBJECT::AccessorType::space_dimension > get_default_quadrature(const OBJECT &obj, bool with_laplace=false)
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
const std::vector< Point< dim > > & get_points() const
const std::vector< double > & get_weights() const
virtual Point< spacedim > get_new_point_on_hex(const typename Triangulation< dim, spacedim >::hex_iterator &hex) const
::ExceptionBase & ExcMessage(std::string arg1)
numbers::NumberTraits< Number >::real_type norm() const
const FlatManifold< dim, chartdim > sub_manifold
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const
virtual Point< spacedim > project_to_manifold(const std::vector< Point< spacedim > > &points, const Point< spacedim > &candidate) const
ChartManifold(const Point< chartdim > periodicity=Point< chartdim >())
#define Assert(cond, exc)
virtual Point< spacedim > project_to_manifold(const std::vector< Point< spacedim > > &surrounding_points, const Point< spacedim > &candidate) const
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
FlatManifold(const Point< spacedim > periodicity=Point< spacedim >(), const double tolerance=1e-10)
const Point< spacedim > periodicity
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const
virtual Point< spacedim > push_forward(const Point< chartdim > &chart_point) const =0
Point< spacedim > get_new_point_on_face(const typename Triangulation< dim, spacedim >::face_iterator &face) const
virtual Point< spacedim > get_new_point(const Quadrature< spacedim > &quad) const
virtual Point< chartdim > pull_back(const Point< spacedim > &space_point) const =0
Point< spacedim > get_new_point_on_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell) const