16 #include <deal.II/grid/tria_boundary_lib.h> 17 #include <deal.II/grid/tria.h> 18 #include <deal.II/grid/tria_iterator.h> 19 #include <deal.II/grid/tria_accessor.h> 20 #include <deal.II/base/tensor.h> 21 #include <deal.II/base/std_cxx14/memory.h> 26 DEAL_II_NAMESPACE_OPEN
30 template <
int dim,
int spacedim>
32 const unsigned int axis)
35 direction (get_axis_vector (axis)),
36 point_on_axis (
Point<spacedim>())
40 template <
int dim,
int spacedim>
46 direction (direction / direction.norm()),
47 point_on_axis (point_on_axis)
52 template<
int dim,
int spacedim>
53 std::unique_ptr<Manifold<dim, spacedim> >
56 return std_cxx14::make_unique<CylinderBoundary<dim, spacedim> >(radius, direction, point_on_axis);
61 template <
int dim,
int spacedim>
68 axis_vector[axis] = 1;
74 template <
int dim,
int spacedim>
89 ((middle-point_on_axis) * direction) * direction;
94 if (vector_from_axis.
norm() <= 1e-10 * middle.
norm())
98 ((middle-point_on_axis) * direction) * direction +
112 const unsigned int spacedim = 3;
115 ((middle-point_on_axis) * direction) * direction;
116 if (vector_from_axis.
norm() <= 1e-10 * middle.
norm())
119 return Point<3>(vector_from_axis / vector_from_axis.
norm() * radius +
120 ((middle-point_on_axis) * direction) * direction +
132 const unsigned int spacedim = 3;
134 ((middle-point_on_axis) * direction) * direction;
135 if (vector_from_axis.
norm() <= 1
e-10 * middle.
norm())
138 return Point<3>(vector_from_axis / vector_from_axis.
norm() * radius +
139 ((middle-point_on_axis) * direction) * direction +
144 template <
int dim,
int spacedim>
155 template <
int dim,
int spacedim>
158 const typename Triangulation<dim,spacedim>::line_iterator &line,
161 if (points.size()==1)
162 points[0]=get_new_point_on_line(line);
164 get_intermediate_points_between_points(line->vertex(0), line->vertex(1), points);
168 template <
int dim,
int spacedim>
175 const unsigned int n=points.size();
180 const std::vector<Point<1> > &line_points = this->get_line_support_points(n);
182 for (
unsigned int i=0; i<n; ++i)
184 const double x = line_points[i+1][0];
188 ((middle-point_on_axis) * direction) * direction;
189 if (vector_from_axis.
norm() <= 1e-10 * middle.
norm())
193 ((middle-point_on_axis) * direction) * direction +
203 const Triangulation<3>::quad_iterator &quad,
204 std::vector<
Point<3> > &points)
const 206 if (points.size()==1)
207 points[0]=get_new_point_on_quad(quad);
210 unsigned int m=
static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
213 std::vector<Point<3> > lp0(m);
214 std::vector<Point<3> > lp1(m);
216 get_intermediate_points_on_line(quad->line(0), lp0);
217 get_intermediate_points_on_line(quad->line(1), lp1);
219 std::vector<Point<3> > lps(m);
220 for (
unsigned int i=0; i<m; ++i)
222 get_intermediate_points_between_points(lp0[i], lp1[i], lps);
224 for (
unsigned int j=0; j<m; ++j)
225 points[i*m+j]=lps[j];
232 template <
int dim,
int spacedim>
235 const typename Triangulation<dim,spacedim>::quad_iterator &,
256 template <
int dim,
int spacedim>
262 for (
unsigned int v=0; v<GeometryInfo<dim>::vertices_per_face; ++v)
267 ((vertex-point_on_axis) * direction) * direction;
269 face_vertex_normals[v] = (vector_from_axis / vector_from_axis.
norm());
275 template <
int dim,
int spacedim>
287 const double radius_1,
302 return std_cxx14::make_unique<ConeBoundary<dim> >(radius_0,radius_1,x_0,x_1);
310 for (
unsigned int i = 0; i < dim; ++i)
311 if ((x_1 (i) - x_0 (i)) != 0)
312 return (radius_1 - radius_0) * (x (i) - x_0 (i)) / (x_1 (i) - x_0 (i)) + radius_0;
326 const unsigned int n = points.size ();
331 const std::vector<Point<1> > &line_points = this->get_line_support_points(n);
333 for (
unsigned int i=0; i<n; ++i)
335 const double x = line_points[i+1][0];
341 const double c = (x_i - x_0) * axis / (axis*axis);
345 points[i] = x_ip + get_radius (x_ip) * (x_i - x_ip) / (x_i - x_ip).
norm ();
359 const double c = (middle - x_0) * axis / (axis*axis);
362 return middle_p + get_radius (middle_p) * (middle - middle_p) / (middle - middle_p).
norm ();
380 const double c = (middle - x_0) * axis / (axis*axis);
383 return middle_p + get_radius (middle_p) * (middle - middle_p) / (middle - middle_p).
norm ();
406 if (points.size () == 1)
407 points[0] = get_new_point_on_line (line);
409 get_intermediate_points_between_points (line->vertex (0), line->vertex (1), points);
419 std::vector<
Point<3> > &points)
const 421 if (points.size () == 1)
422 points[0] = get_new_point_on_quad (quad);
425 unsigned int n =
static_cast<unsigned int> (std::sqrt (static_cast<double> (points.size ())));
429 std::vector<Point<3> > points_line_0 (n);
430 std::vector<Point<3> > points_line_1 (n);
432 get_intermediate_points_on_line (quad->line (0), points_line_0);
433 get_intermediate_points_on_line (quad->line (1), points_line_1);
435 std::vector<Point<3> > points_line_segment (n);
437 for (
unsigned int i = 0; i < n; ++i)
439 get_intermediate_points_between_points (points_line_0[i],
441 points_line_segment);
443 for (
unsigned int j = 0; j < n; ++j)
444 points[i * n + j] = points_line_segment[j];
482 for (
unsigned int vertex = 0; vertex < GeometryInfo<dim>::vertices_per_face; ++vertex)
486 const double c = (face->vertex (vertex) - x_0) * axis / (axis*axis);
490 const Tensor<1,dim> axis_to_vertex = face->vertex (vertex) - vertex_p;
492 face_vertex_normals[vertex] = axis_to_vertex / axis_to_vertex.
norm ();
508 for (
unsigned int d=0; d<dim; ++d)
513 const double c_squared = (this->radius_1 / this->x_1[dim-1])*(this->radius_1 / this->x_1[dim-1]);
515 normal[0] *= -2.0/c_squared;
516 normal[1] *= -2.0/c_squared;
517 normal[dim-1] *= 2.0;
519 return normal/normal.
norm();
526 template <
int dim,
int spacedim>
532 compute_radius_automatically(false)
537 template<
int dim,
int spacedim>
538 std::unique_ptr<Manifold<dim, spacedim> >
541 return std_cxx14::make_unique<HyperBallBoundary<dim,spacedim> >(center, radius);
546 template <
int dim,
int spacedim>
555 if (compute_radius_automatically)
556 r = (line->vertex(0) - center).norm();
561 middle *= r / std::sqrt(middle.
square());
589 template <
int dim,
int spacedim>
599 if (compute_radius_automatically)
600 r = (quad->vertex(0) - center).norm();
605 middle *= r / std::sqrt(middle.
square());
616 const Triangulation<1>::line_iterator &,
624 template <
int dim,
int spacedim>
627 const typename Triangulation<dim,spacedim>::line_iterator &line,
630 if (points.size()==1)
631 points[0]=get_new_point_on_line(line);
633 get_intermediate_points_between_points(line->vertex(0), line->vertex(1), points);
638 template <
int dim,
int spacedim>
644 const unsigned int n=points.size();
649 const double length=(v1-v0).norm();
654 if (compute_radius_automatically)
655 r = (p0 - center).norm();
659 Assert((std::fabs(v0*v0-r*r)<eps*r*r)
661 (std::fabs(v1*v1-r*r)<eps*r*r),
662 ExcMessage(
"In computing the location of midpoints of an edge of a " 663 "HyperBallBoundary, one of the vertices of the edge " 664 "does not have the expected distance from the center " 665 "of the sphere. This may happen if the geometry has " 666 "been deformed, or if the HyperBallBoundary object has " 667 "been assigned to a part of the boundary that is not " 668 "in fact a sphere (e.g., the sides of a quarter shell " 669 "or one octant of a ball)."));
671 const double alpha=std::acos((v0*v1)/std::sqrt((v0*v0)*(v1*v1)));
674 const double h=pm.
norm();
678 const std::vector<Point<1> > &line_points = this->get_line_support_points(n);
679 const unsigned int m=n/2;
680 for (
unsigned int i=0; i<m ; ++i)
682 const double beta = alpha * (line_points[i+1][0]-0.5);
683 const double d = h*std::tan(beta);
694 for (
unsigned int i=0; i<n; ++i)
696 points[i] *= r / std::sqrt(points[i].square());
706 const Triangulation<3>::quad_iterator &quad,
707 std::vector<
Point<3> > &points)
const 709 if (points.size()==1)
710 points[0]=get_new_point_on_quad(quad);
713 unsigned int m=
static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
716 std::vector<Point<3> > lp0(m);
717 std::vector<Point<3> > lp1(m);
719 get_intermediate_points_on_line(quad->line(0), lp0);
720 get_intermediate_points_on_line(quad->line(1), lp1);
722 std::vector<Point<3> > lps(m);
723 for (
unsigned int i=0; i<m; ++i)
725 get_intermediate_points_between_points(lp0[i], lp1[i], lps);
727 for (
unsigned int j=0; j<m; ++j)
728 points[i*m+j]=lps[j];
738 const Triangulation<2,3>::quad_iterator &quad,
739 std::vector<
Point<3> > &points)
const 741 if (points.size()==1)
742 points[0]=get_new_point_on_quad(quad);
745 unsigned int m=
static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
748 std::vector<Point<3> > lp0(m);
749 std::vector<Point<3> > lp1(m);
751 get_intermediate_points_on_line(quad->line(0), lp0);
752 get_intermediate_points_on_line(quad->line(1), lp1);
754 std::vector<Point<3> > lps(m);
755 for (
unsigned int i=0; i<m; ++i)
757 get_intermediate_points_between_points(lp0[i], lp1[i], lps);
759 for (
unsigned int j=0; j<m; ++j)
760 points[i*m+j]=lps[j];
767 template <
int dim,
int spacedim>
770 const typename Triangulation<dim,spacedim>::quad_iterator &,
778 template <
int dim,
int spacedim>
785 return unnormalized_normal/unnormalized_normal.
norm();
810 template <
int dim,
int spacedim>
816 for (
unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_face; ++vertex)
817 face_vertex_normals[vertex] = face->vertex(vertex)-center;
822 template <
int dim,
int spacedim>
831 template <
int dim,
int spacedim>
835 Assert(!compute_radius_automatically, ExcRadiusNotSet());
845 const double radius) :
854 return std_cxx14::make_unique<HalfHyperBallBoundary<dim> >(this->get_center(),
868 const Point<dim> line_center = line->center();
869 const Point<dim> vertices[2] = { line->vertex(0), line->vertex(1) };
871 if ((line_center(0) == this->center(0))
873 ((std::fabs(vertices[0].distance(this->center)-this->radius) >
876 (std::fabs(vertices[1].distance(this->center)-this->radius) >
901 const Point<dim> quad_center = quad->center();
902 if (quad_center(0) == this->center(0))
918 const Point<dim> line_center = line->center();
919 if (line_center(0) == this->center(0))
933 if (points.size()==1)
934 points[0]=get_new_point_on_quad(quad);
939 const Point<dim> quad_center = quad->center();
940 if (quad_center(0) == this->center(0))
979 const Point<dim> quad_center = face->center();
980 if (quad_center(0) == this->center(0))
1002 std::unique_ptr<Manifold<dim,dim> >
1005 return std_cxx14::make_unique<HyperShellBoundary<dim> >(this->get_center());
1017 const double inner_radius,
1018 const double outer_radius)
1021 inner_radius (inner_radius),
1022 outer_radius (outer_radius)
1026 (outer_radius > 0) &&
1028 ExcMessage (
"Inner and outer radii must be specified explicitly in 3d."));
1034 std::unique_ptr<Manifold<dim,dim> >
1037 return std_cxx14::make_unique<HalfHyperShellBoundary<dim> >(this->get_center(),
1055 if ((line->vertex(0)(0) == this->center(0))
1057 (line->vertex(1)(0) == this->center(0)))
1058 return (line->vertex(0) + line->vertex(1))/2;
1070 if (((line->vertex(0)(0) == this->center(0))
1072 (line->vertex(1)(0) == this->center(0)))
1074 !(((std::fabs (line->vertex(0).distance (this->center)
1075 - inner_radius) < 1e-12 * outer_radius)
1077 (std::fabs (line->vertex(1).distance (this->center)
1078 - inner_radius) < 1e-12 * outer_radius))
1080 ((std::fabs (line->vertex(0).distance (this->center)
1081 - outer_radius) < 1e-12 * outer_radius)
1083 (std::fabs (line->vertex(1).distance (this->center)
1084 - outer_radius) < 1e-12 * outer_radius))))
1085 return (line->vertex(0) + line->vertex(1))/2;
1120 if ((quad->vertex(0)(0) == this->center(0)) &&
1121 (quad->vertex(1)(0) == this->center(0)) &&
1122 (quad->vertex(2)(0) == this->center(0)) &&
1123 (quad->vertex(3)(0) == this->center(0)))
1125 const Point<dim> quad_center = (quad->vertex(0) + quad->vertex(1) +
1126 quad->vertex(2) + quad->vertex(3) )/4;
1127 const Tensor<1,dim> quad_center_offset = quad_center - this->center;
1130 if (std::fabs (quad->line(0)->center().distance(this->center) -
1131 quad->line(1)->center().distance(this->center))
1132 < 1e-12 * outer_radius)
1135 const double needed_radius
1136 = quad->line(0)->center().distance(this->center);
1138 return (this->center +
1139 quad_center_offset/quad_center_offset.
norm() * needed_radius);
1141 else if (std::fabs (quad->line(2)->center().distance(this->center) -
1142 quad->line(3)->center().distance(this->center))
1143 < 1e-12 * outer_radius)
1146 const double needed_radius
1147 = quad->line(2)->center().distance(this->center);
1149 return (this->center +
1150 quad_center_offset/quad_center_offset.
norm() * needed_radius);
1175 if ((line->vertex(0)(0) == this->center(0))
1177 (line->vertex(1)(0) == this->center(0)))
1190 if (((line->vertex(0)(0) == this->center(0))
1192 (line->vertex(1)(0) == this->center(0)))
1194 !(((std::fabs (line->vertex(0).distance (this->center)
1195 - inner_radius) < 1e-12 * outer_radius)
1197 (std::fabs (line->vertex(1).distance (this->center)
1198 - inner_radius) < 1e-12 * outer_radius))
1200 ((std::fabs (line->vertex(0).distance (this->center)
1201 - outer_radius) < 1e-12 * outer_radius)
1203 (std::fabs (line->vertex(1).distance (this->center)
1204 - outer_radius) < 1e-12 * outer_radius))))
1231 const Point<dim> quad_center = quad->center();
1232 if (quad_center(0) == this->center(0))
1270 if (face->center()(0) == this->center(0))
1279 template <
int dim,
int spacedim>
1301 template<
int dim,
int spacedim>
1302 std::unique_ptr<Manifold<dim, spacedim> >
1305 return std_cxx14::make_unique<TorusBoundary<dim,spacedim> >(R,r);
1310 template <
int dim,
int spacedim>
1314 const double y)
const 1336 const double theta=surfP(0);
1337 const double phi=surfP(1);
1339 return Point<3> ((R+r*std::cos(phi))*std::cos(theta),
1341 (R+r*std::cos(phi))*std::sin(theta));
1350 const double phi=std::asin(std::abs(p(1))/r);
1351 const double Rr_2=p(0)*p(0)+p(2)*p(2);
1354 surfP(1)=get_correct_angle(phi,Rr_2-R*R,p(1));
1356 if (std::abs(p(0))<1.E-5)
1365 const double theta = std::atan(std::abs(p(2)/p(0)));
1366 surfP(0)= get_correct_angle(theta,p(0),p(2));
1379 Point<2> p0=get_surf_coord(line->vertex(0));
1380 Point<2> p1=get_surf_coord(line->vertex(1));
1387 for (
unsigned int i=0; i<2; i++)
1394 Point<3> midReal=get_real_coord(middle);
1407 for (
unsigned int i=0; i<4; i++)
1408 p[i]=get_surf_coord(quad->vertex(i));
1415 for (
unsigned int i=0; i<2; i++)
1416 for (
unsigned int j=1; j<4; j++)
1424 for (
unsigned int i=0; i<4; i++)
1429 return get_real_coord(middle);
1441 double theta=surfP[0];
1442 double phi=surfP[1];
1444 double f=R+r*std::cos(phi);
1446 n[0]=r*std::cos(phi)*std::cos(theta)*f;
1447 n[1]=r*std::sin(phi)*f;
1448 n[2]=r*std::sin(theta)*std::cos(phi)*f;
1462 return get_surf_norm_from_sp(surfP);
1475 unsigned int npoints=points.size();
1476 if (npoints==0)
return;
1480 for (
unsigned int i=0; i<2; i++)
1481 p[i]=get_surf_coord(line->vertex(i));
1483 unsigned int offset[2];
1491 for (
unsigned int i=0; i<2; i++)
1492 for (
unsigned int j=1; j<2; j++)
1501 for (
unsigned int i=0; i<2; i++)
1502 for (
unsigned int j=0; j<2; j++)
1503 if (p[j](i)<1.E-12 )
1508 const std::vector<Point<1> > &line_points = this->get_line_support_points(npoints);
1509 for (
unsigned int i=0; i<npoints; i++)
1511 const double x = line_points[i+1][0];
1512 target= (1-x)*p[0] + x*p[1];
1513 points[i]=get_real_coord(target);
1526 const unsigned int n=points.size(),
1527 m=
static_cast<unsigned int>(std::sqrt(static_cast<double>(n)));
1533 for (
unsigned int i=0; i<4; i++)
1534 p[i]=get_surf_coord(quad->vertex(i));
1537 unsigned int offset[2];
1545 for (
unsigned int i=0; i<2; i++)
1546 for (
unsigned int j=1; j<4; j++)
1555 for (
unsigned int i=0; i<2; i++)
1556 for (
unsigned int j=0; j<4; j++)
1557 if (p[j](i)<1.E-12 )
1560 const std::vector<Point<1> > &line_points = this->get_line_support_points(m);
1561 for (
unsigned int i=0; i<m; ++i)
1563 const double y=line_points[i+1][0];
1564 for (
unsigned int j=0; j<m; ++j)
1566 const double x=line_points[j+1][0];
1567 target=((1-x) * p[0] +
1572 points[i*m+j]=get_real_coord(target);
1585 for (
unsigned int i=0; i<GeometryInfo<2>::vertices_per_face; i++)
1586 face_vertex_normals[i]=get_surf_norm(face->vertex(i));
1592 #include "tria_boundary_lib.inst" 1594 DEAL_II_NAMESPACE_CLOSE
virtual void get_normals_at_vertices(const typename Triangulation< dim >::face_iterator &face, typename Boundary< dim >::FaceVertexNormals &face_vertex_normals) const override
void get_intermediate_points_between_points(const Point< spacedim > &p0, const Point< spacedim > &p1, std::vector< Point< spacedim > > &points) const
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const override
void get_intermediate_points_between_points(const Point< dim > &p0, const Point< dim > &p1, std::vector< Point< dim > > &points) const
virtual std::unique_ptr< Manifold< dim, spacedim > > clone() const override
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const override
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const override
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const override
virtual void get_intermediate_points_on_line(const typename Triangulation< dim >::line_iterator &line, std::vector< Point< dim > > &points) const override
virtual std::unique_ptr< Manifold< dim, dim > > clone() const override
virtual void get_normals_at_vertices(const typename Triangulation< dim, spacedim >::face_iterator &face, typename Boundary< dim, spacedim >::FaceVertexNormals &face_vertex_normals) const override
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const override
virtual void get_normals_at_vertices(const typename Triangulation< dim, spacedim >::face_iterator &face, typename Boundary< dim, spacedim >::FaceVertexNormals &face_vertex_normals) const override
numbers::NumberTraits< Number >::real_type norm() const
bool compute_radius_automatically
virtual void get_normals_at_vertices(const typename Triangulation< dim, spacedim >::face_iterator &face, typename Boundary< dim, spacedim >::FaceVertexNormals &face_vertex_normals) const override
static ::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim >::quad_iterator &quad, std::vector< Point< dim > > &points) const override
double get_radius(const Point< dim > x) const
Point< dim > get_surf_coord(const Point< spacedim > &p) const
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim >::quad_iterator &quad, std::vector< Point< dim > > &points) const override
double get_correct_angle(const double angle, const double x, const double y) const
virtual void get_normals_at_vertices(const typename Triangulation< dim >::face_iterator &face, typename Boundary< dim >::FaceVertexNormals &face_vertex_normals) const override
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const override
virtual void get_intermediate_points_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line, std::vector< Point< spacedim > > &points) const override
static Point< spacedim > get_axis_vector(const unsigned int axis)
HalfHyperShellBoundary(const Point< dim > ¢er=Point< dim >(), const double inner_radius=-1, const double outer_radius=-1)
virtual void get_normals_at_vertices(const typename Triangulation< dim, spacedim >::face_iterator &face, typename Boundary< dim, spacedim >::FaceVertexNormals &face_vertex_normals) const override
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
virtual void get_intermediate_points_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line, std::vector< Point< spacedim > > &points) const override
virtual Point< dim > get_new_point_on_line(const typename Triangulation< dim >::line_iterator &line) const override
virtual void get_intermediate_points_on_line(const typename Triangulation< dim >::line_iterator &line, std::vector< Point< dim > > &points) const override
virtual std::unique_ptr< Manifold< dim, dim > > clone() const override
HalfHyperBallBoundary(const Point< dim > p=Point< dim >(), const double radius=1.0)
#define Assert(cond, exc)
Point< spacedim > get_surf_norm(const Point< spacedim > &p) const
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const override
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const override
Point< spacedim > get_real_coord(const Point< dim > &surfP) const
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const override
virtual Point< dim > get_new_point_on_line(const typename Triangulation< dim >::line_iterator &line) const override
virtual Point< dim > get_new_point_on_quad(const typename Triangulation< dim >::quad_iterator &quad) const override
virtual std::unique_ptr< Manifold< dim, spacedim > > clone() const override
virtual Point< dim > get_new_point_on_quad(const typename Triangulation< dim >::quad_iterator &quad) const override
ConeBoundary(const double radius_0, const double radius_1, const Point< dim > x_0, const Point< dim > x_1)
virtual Tensor< 1, dim > normal_vector(const typename Triangulation< dim >::face_iterator &face, const Point< dim > &p) const override
virtual void get_intermediate_points_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line, std::vector< Point< spacedim > > &points) const override
virtual Point< dim > get_new_point_on_line(const typename Triangulation< dim >::line_iterator &line) const override
virtual void get_normals_at_vertices(const typename Triangulation< dim >::face_iterator &face, typename Boundary< dim >::FaceVertexNormals &face_vertex_normals) const override
double get_radius() const
HyperShellBoundary(const Point< dim > ¢er=Point< dim >())
Point< spacedim > get_surf_norm_from_sp(const Point< dim > &surfP) const
numbers::NumberTraits< Number >::real_type square() const
double get_radius() const
void get_intermediate_points_between_points(const Point< spacedim > &p0, const Point< spacedim > &p1, std::vector< Point< spacedim > > &points) const
virtual Tensor< 1, spacedim > normal_vector(const typename Triangulation< dim, spacedim >::face_iterator &face, const Point< spacedim > &p) const override
virtual Point< dim > get_new_point_on_quad(const typename Triangulation< dim >::quad_iterator &quad) const override
TorusBoundary(const double R, const double r)
static ::ExceptionBase & ExcNotImplemented()
virtual void get_intermediate_points_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line, std::vector< Point< spacedim > > &points) const override
virtual std::unique_ptr< Manifold< dim, dim > > clone() const override
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim >::quad_iterator &quad, std::vector< Point< dim > > &points) const override
const double inner_radius
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const override
HyperBallBoundary(const Point< spacedim > p=Point< spacedim >(), const double radius=1.0)
CylinderBoundary(const double radius=1.0, const unsigned int axis=0)
virtual std::unique_ptr< Manifold< dim, spacedim > > clone() const override
Point< spacedim > get_center() const
virtual void get_intermediate_points_on_line(const typename Triangulation< dim >::line_iterator &line, std::vector< Point< dim > > &points) const override
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const override
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const override
virtual std::unique_ptr< Manifold< dim, dim > > clone() const override
static ::ExceptionBase & ExcInternalError()